Last active
November 22, 2024 21:26
Rust MQTT TLS on ESP32
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//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