final
This commit is contained in:
25
final/Cargo.lock
generated
25
final/Cargo.lock
generated
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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