From 99b1bf6c3dae652199225d0c864dade8993811c7 Mon Sep 17 00:00:00 2001 From: Priec Date: Sat, 4 Oct 2025 16:17:45 +0200 Subject: [PATCH] mqtt client polished --- final/src/mqtt/client.rs | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/final/src/mqtt/client.rs b/final/src/mqtt/client.rs index 1b62d52..66da915 100644 --- a/final/src/mqtt/client.rs +++ b/final/src/mqtt/client.rs @@ -1,7 +1,7 @@ +// src/mqtt/client.rs use embassy_net::{tcp::TcpSocket, Ipv4Address, Stack}; use embassy_time::{Duration, Timer}; use log::info; - use rust_mqtt::client::client::MqttClient; use rust_mqtt::client::client_config::{ClientConfig, MqttVersion}; use rust_mqtt::packet::v5::publish_packet::QualityOfService; @@ -15,21 +15,24 @@ pub async fn mqtt_task(stack: Stack<'static>) { static mut TCP_RX_BUFFER: [u8; 2048] = [0; 2048]; static mut TCP_TX_BUFFER: [u8; 2048] = [0; 2048]; - // embassy-net 0.7: pass Stack by value (not &Stack) + // pass Stack by value let mut socket = TcpSocket::new(stack, unsafe { &mut TCP_RX_BUFFER }, unsafe { &mut TCP_TX_BUFFER }); // Adjust broker IP/port as needed + // TODO let broker_ip = Ipv4Address::new(192, 168, 1, 100); let broker_port = 1883; - if let Err(e) = socket.connect((broker_ip, broker_port)).await { - info!("TCP connect failed: {:?}", e); - return; + match socket.connect((broker_ip, broker_port)).await { + Ok(_) => info!("Connected TCP to MQTT broker"), + Err(e) => { + info!("TCP connect failed: {:?}", e); + return; + } } - info!("Connected TCP to MQTT broker"); - // MQTT client buffers (separate from the TcpSocket’s buffers) + // MQTT client buffers (separate from the TcpSocket's buffers) static mut MQTT_TX_BUF: [u8; 1024] = [0; 1024]; static mut MQTT_RX_BUF: [u8; 1024] = [0; 1024]; @@ -55,25 +58,26 @@ pub async fn mqtt_task(stack: Stack<'static>) { ); // CONNECT - if let Err(reason) = client.connect_to_broker().await { - info!("MQTT connect failed: {:?}", reason); - return; + match client.connect_to_broker().await { + Ok(_) => info!("MQTT CONNACK received"), + Err(reason) => { + info!("MQTT connect failed: {:?}", reason); + return; + } } - info!("MQTT CONNACK received"); - // Publish a message (QoS0) - if let Err(reason) = client + // Publish a message (QoS1) + match client .send_message( "esp32/topic", b"hello from esp32", - QualityOfService::QoS0, + QualityOfService::QoS1, false, ) .await { - info!("MQTT publish failed: {:?}", reason); - } else { - info!("MQTT PUBLISH sent"); + Ok(_) => info!("MQTT PUBLISH sent"), + Err(reason) => info!("MQTT publish failed: {:?}", reason), } // Keep the session alive; send PING and await PINGRESP every 30s