mqtt client polished
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user