Skip to content

Instantly share code, notes, and snippets.

@tlhenvironment
Last active November 22, 2024 21:26
Rust MQTT TLS on ESP32
//use rust-mqtt = { git = "https://github.com/obabec/rust-mqtt.git", rev = "b5ed04efc694c5a0e4f6925b7f90ebaac9f0504f", default-features = false, features = ["log", "tls"] }
//tcp
let mqtt_broker_addr = stack.dns_query(broker_str, embassy_net::dns::DnsQueryType::A).await.unwrap();
let mqtt_endpoint = IpEndpoint::new(endpoint, 8883);
let mut socket = embassy_net::tcp::TcpSocket::new(stack, &mut rx_buffer, &mut tx_buffer);
socket.connect(mqtt_endpoint).await.unwrap();
//tls
let config: TlsConfig<'_> = TlsConfig::new().with_server_name(&broker_str).enable_rsa_signatures();
let mut read_record_buffer = [0; 16640];
let mut write_record_buffer = [0; 16640];
let mut tls_connection: TlsConnection<_, _> = TlsConnection::new(
socket,
&mut read_record_buffer,
&mut write_record_buffer,
);
tls_connection.open(TlsContext::new(
&config,
UnsecureProvider::new::<Aes256GcmSha384>(rng),
)).await.unwrap();
//mqtt
let mut config = ClientConfig::new(MqttVersion::MQTTv5, CountingRng(20000));
config.max_packet_size = 100;
let mut recv_buffer = [0; 80];
let mut write_buffer = [0; 80];
let mut client = MqttClient::<_, 5, CountingRng>::new(
tls_connection,
&mut write_buffer,
80,
&mut recv_buffer,
80,
config,
);
println!("Connecting to mqtt broker");
if let Err(e) = client.connect_to_broker().await {
log::warn!("Connection error: {e}");
continue
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment