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_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 {
|
||||||
|
Ok(_) => info!("Connected TCP to MQTT broker"),
|
||||||
|
Err(e) => {
|
||||||
info!("TCP connect failed: {:?}", e);
|
info!("TCP connect failed: {:?}", e);
|
||||||
return;
|
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_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 {
|
||||||
|
Ok(_) => info!("MQTT CONNACK received"),
|
||||||
|
Err(reason) => {
|
||||||
info!("MQTT connect failed: {:?}", reason);
|
info!("MQTT connect failed: {:?}", reason);
|
||||||
return;
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user