This commit is contained in:
Priec
2025-10-02 12:17:36 +02:00
parent 2520db2fd7
commit 7c5186ed49
8 changed files with 237 additions and 19 deletions

View File

@@ -17,6 +17,7 @@ use esp_wifi::{
wifi::{ClientConfiguration, Configuration, WifiController, WifiDevice, WifiEvent, WifiState},
};
use log::info;
mod mqtt;
extern crate alloc;

53
final/src/mqtt/client.rs Normal file
View File

@@ -0,0 +1,53 @@
use embassy_time::{Duration, Timer};
use embassy_net::{tcp::TcpSocket, Stack};
use esp_wifi::wifi::WifiDevice;
use rust_mqtt::client::client::MqttClient;
use rust_mqtt::packet::v5::{connect::ConnectPacket, publish::PublishPacket};
use rust_mqtt::utils::rng_generator::CountingRng32;
use log::info;
#[embassy_executor::task]
pub async fn mqtt_task(stack: &'static Stack<WifiDevice<'static>>) {
info!("MQTT task starting...");
static mut RX_BUFFER: [u8; 2048] = [0; 2048];
static mut TX_BUFFER: [u8; 2048] = [0; 2048];
let mut socket = TcpSocket::new(stack, unsafe { &mut RX_BUFFER }, unsafe { &mut TX_BUFFER });
// TODO: replace with your broker IP
use embassy_net::Ipv4Address;
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;
}
info!("Connected to MQTT broker");
let rng = CountingRng32::new();
let mut client: MqttClient<_, _, 1024, 1024> = MqttClient::new(socket, rng);
let connect = ConnectPacket::new("esp32-client");
if client.connect(connect).await.is_ok() {
info!("MQTT CONNECT sent");
}
let publish = PublishPacket::new("esp32/topic", b"hello from esp32", 0);
if client.publish(publish).await.is_ok() {
info!("MQTT PUBLISH sent");
}
// Keep polling
loop {
match client.poll().await {
Ok(_) => {}
Err(e) => {
info!("MQTT error: {:?}", e);
break;
}
}
Timer::after(Duration::from_secs(5)).await;
}
}

2
final/src/mqtt/mod.rs Normal file
View File

@@ -0,0 +1,2 @@
pub mod client;