mqtt client polished

This commit is contained in:
Priec
2025-10-04 16:17:45 +02:00
parent 980fb67f85
commit 99b1bf6c3d

View File

@@ -1,7 +1,7 @@
// src/mqtt/client.rs
use embassy_net::{tcp::TcpSocket, Ipv4Address, Stack}; use embassy_net::{tcp::TcpSocket, Ipv4Address, Stack};
use embassy_time::{Duration, Timer}; use embassy_time::{Duration, Timer};
use log::info; use log::info;
use rust_mqtt::client::client::MqttClient; use rust_mqtt::client::client::MqttClient;
use rust_mqtt::client::client_config::{ClientConfig, MqttVersion}; use rust_mqtt::client::client_config::{ClientConfig, MqttVersion};
use rust_mqtt::packet::v5::publish_packet::QualityOfService; 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_RX_BUFFER: [u8; 2048] = [0; 2048];
static mut TCP_TX_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 = let mut socket =
TcpSocket::new(stack, unsafe { &mut TCP_RX_BUFFER }, unsafe { &mut TCP_TX_BUFFER }); TcpSocket::new(stack, unsafe { &mut TCP_RX_BUFFER }, unsafe { &mut TCP_TX_BUFFER });
// Adjust broker IP/port as needed // Adjust broker IP/port as needed
// TODO
let broker_ip = Ipv4Address::new(192, 168, 1, 100); let broker_ip = Ipv4Address::new(192, 168, 1, 100);
let broker_port = 1883; let broker_port = 1883;
if let Err(e) = socket.connect((broker_ip, broker_port)).await { match socket.connect((broker_ip, broker_port)).await {
info!("TCP connect failed: {:?}", e); Ok(_) => info!("Connected TCP to MQTT broker"),
return; Err(e) => {
info!("TCP connect failed: {:?}", e);
return;
}
} }
info!("Connected TCP to MQTT broker");
// MQTT client buffers (separate from the TcpSockets buffers) // MQTT client buffers (separate from the TcpSocket's buffers)
static mut MQTT_TX_BUF: [u8; 1024] = [0; 1024]; static mut MQTT_TX_BUF: [u8; 1024] = [0; 1024];
static mut MQTT_RX_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 // CONNECT
if let Err(reason) = client.connect_to_broker().await { match client.connect_to_broker().await {
info!("MQTT connect failed: {:?}", reason); Ok(_) => info!("MQTT CONNACK received"),
return; Err(reason) => {
info!("MQTT connect failed: {:?}", reason);
return;
}
} }
info!("MQTT CONNACK received");
// Publish a message (QoS0) // Publish a message (QoS1)
if let Err(reason) = client match client
.send_message( .send_message(
"esp32/topic", "esp32/topic",
b"hello from esp32", b"hello from esp32",
QualityOfService::QoS0, QualityOfService::QoS1,
false, false,
) )
.await .await
{ {
info!("MQTT publish failed: {:?}", reason); Ok(_) => info!("MQTT PUBLISH sent"),
} else { Err(reason) => info!("MQTT publish failed: {:?}", reason),
info!("MQTT PUBLISH sent");
} }
// Keep the session alive; send PING and await PINGRESP every 30s // Keep the session alive; send PING and await PINGRESP every 30s