final
This commit is contained in:
@@ -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
53
final/src/mqtt/client.rs
Normal 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
2
final/src/mqtt/mod.rs
Normal file
@@ -0,0 +1,2 @@
|
||||
|
||||
pub mod client;
|
||||
Reference in New Issue
Block a user