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

25
final/Cargo.lock generated
View File

@@ -326,7 +326,7 @@ dependencies = [
"embassy-time 0.5.0",
"embedded-io-async",
"embedded-nal-async",
"heapless 0.8.0",
"heapless",
"log",
"managed",
"smoltcp",
@@ -349,7 +349,7 @@ dependencies = [
"embedded-io-async",
"futures-sink",
"futures-util",
"heapless 0.8.0",
"heapless",
]
[[package]]
@@ -363,7 +363,7 @@ dependencies = [
"embedded-io-async",
"futures-core",
"futures-sink",
"heapless 0.8.0",
"heapless",
]
[[package]]
@@ -415,7 +415,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc55c748d16908a65b166d09ce976575fb8852cf60ccd06174092b41064d8f83"
dependencies = [
"embassy-executor",
"heapless 0.8.0",
"heapless",
]
[[package]]
@@ -551,7 +551,7 @@ dependencies = [
"cfg-if",
"esp-config",
"esp-println",
"heapless 0.8.0",
"heapless",
"semihosting",
]
@@ -932,16 +932,6 @@ dependencies = [
"stable_deref_trait",
]
[[package]]
name = "heapless"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1edcd5a338e64688fbdcb7531a846cfd3476a54784dcb918a0844682bc7ada5"
dependencies = [
"hash32",
"stable_deref_trait",
]
[[package]]
name = "heck"
version = "0.5.0"
@@ -1254,7 +1244,7 @@ dependencies = [
"defmt 0.3.100",
"embedded-io",
"embedded-io-async",
"heapless 0.8.0",
"heapless",
"rand_core 0.6.4",
]
@@ -1322,7 +1312,7 @@ dependencies = [
"bitflags 1.3.2",
"byteorder",
"cfg-if",
"heapless 0.8.0",
"heapless",
"log",
"managed",
]
@@ -1407,7 +1397,6 @@ dependencies = [
"esp-hal-embassy",
"esp-println",
"esp-wifi",
"heapless 0.9.1",
"log",
"rust-mqtt",
"smoltcp",

View File

@@ -65,7 +65,6 @@ smoltcp = { version = "0.12.0", default-features = false, features = [
] }
static_cell = "2.1.1"
rust-mqtt = { version = "0.3.0", default-features = false, features = ["no_std"] }
heapless = "0.9.1"
[build-dependencies]
dotenvy = "0.15.7"

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;