From add04b9fbd5a3f4118e5fedb924205d55c4b7f01 Mon Sep 17 00:00:00 2001 From: Andrei Dodu Date: Wed, 22 Nov 2023 21:28:07 +0100 Subject: [PATCH] feature: motion detection and server notifier --- .cargo/config.toml | 20 ++++ .github/workflows/rust_ci.yml | 40 +++++++ .gitignore | 5 + Cargo.toml | 57 ++++++++++ README.md | 24 +++++ build.rs | 3 + images/board.jpg | Bin 0 -> 106611 bytes rust-toolchain.toml | 2 + sdkconfig.defaults | 11 ++ src/config/config.sample.rs | 5 + src/config/mod.rs | 1 + src/main.rs | 14 +++ src/mod.rs | 3 + src/service/client_service.rs | 102 ++++++++++++++++++ src/service/mod.rs | 3 + src/service/orchestrator_service.rs | 36 +++++++ src/service/peripheral_service.rs | 162 ++++++++++++++++++++++++++++ src/util/mod.rs | 1 + src/util/thread_util.rs | 16 +++ 19 files changed, 505 insertions(+) create mode 100644 .cargo/config.toml create mode 100644 .github/workflows/rust_ci.yml create mode 100644 .gitignore create mode 100644 Cargo.toml create mode 100644 README.md create mode 100644 build.rs create mode 100644 images/board.jpg create mode 100644 rust-toolchain.toml create mode 100644 sdkconfig.defaults create mode 100644 src/config/config.sample.rs create mode 100644 src/config/mod.rs create mode 100644 src/main.rs create mode 100644 src/mod.rs create mode 100644 src/service/client_service.rs create mode 100644 src/service/mod.rs create mode 100644 src/service/orchestrator_service.rs create mode 100644 src/service/peripheral_service.rs create mode 100644 src/util/mod.rs create mode 100644 src/util/thread_util.rs diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..193b015 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,20 @@ +[build] +target = "xtensa-esp32-espidf" + +[target.xtensa-esp32-espidf] +linker = "ldproxy" +# runner = "espflash --monitor" # Select this runner for espflash v1.x.x +runner = "espflash flash --monitor" # Select this runner for espflash v2.x.x +rustflags = [ + "--cfg", + "espidf_time64", +] # Extending time_t for ESP IDF 5: https://github.com/esp-rs/rust/issues/110 + +[unstable] +build-std = ["std", "panic_abort"] + +[env] +MCU = "esp32" +# Note: this variable is not used by the pio builder (`cargo build --features pio`) +ESP_IDF_VERSION = "v5.1.1" + diff --git a/.github/workflows/rust_ci.yml b/.github/workflows/rust_ci.yml new file mode 100644 index 0000000..6914f4d --- /dev/null +++ b/.github/workflows/rust_ci.yml @@ -0,0 +1,40 @@ +name: Continuous Integration + +on: + push: + paths-ignore: + - "**/README.md" + pull_request: + workflow_dispatch: + +env: + CARGO_TERM_COLOR: always + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +jobs: + rust-checks: + name: Rust Checks + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + action: + - command: build + args: --release + - command: fmt + args: --all -- --check --color always + - command: clippy + args: --all-targets --all-features --workspace -- -D warnings + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Enable caching + uses: Swatinem/rust-cache@v2 + - name: Setup Rust + uses: esp-rs/xtensa-toolchain@v1.5 + with: + default: true + buildtargets: esp32 + ldproxy: true + - name: Run command + run: cargo ${{ matrix.action.command }} ${{ matrix.action.args }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..15312c0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +/.vscode +/.embuild +/target +/Cargo.lock +/src/config/config.rs \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..a9d7b60 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,57 @@ +[package] +name = "esp32-motion-detector-and-server-notifier-rust" +version = "0.2.0" +authors = ["Andrei Dodu"] +edition = "2021" +resolver = "2" +rust-version = "1.71" + +[profile.release] +opt-level = "s" + +[profile.dev] +debug = true # Symbols are nice and they don't increase the size on Flash +opt-level = "z" + +[features] + +default = ["std", "hal", "esp-idf-sys/native"] + + +pio = ["esp-idf-sys/pio"] +all = ["std", "nightly", "experimental", "embassy"] +hal = ["esp-idf-hal", "embedded-svc", "esp-idf-svc"] +std = [ + "alloc", + "esp-idf-sys/std", + "esp-idf-sys/binstart", + "embedded-svc?/std", + "esp-idf-hal?/std", + "esp-idf-svc?/std", +] +alloc = ["embedded-svc?/alloc", "esp-idf-hal?/alloc", "esp-idf-svc?/alloc"] +nightly = [ + "embedded-svc?/nightly", + "esp-idf-svc?/nightly", +] # Future: "esp-idf-hal?/nightly" +experimental = ["embedded-svc?/experimental", "esp-idf-svc?/experimental"] +embassy = [ + "esp-idf-hal?/embassy-sync", + "esp-idf-hal?/critical-section", + "esp-idf-svc?/embassy-time-driver", + "esp-idf-svc?/embassy-time-isr-queue", +] + +[dependencies] +macaddr = "1.0.1" +anyhow = "1.0.75" +log = { version = "0.4.17", default-features = false } +esp-idf-sys = { version = "0.33", default-features = false } +esp-idf-hal = { version = "0.42.5", optional = true, default-features = false } +esp-idf-svc = { version = "0.47.3", optional = true, default-features = false } +embedded-svc = { version = "0.26.4", optional = true, default-features = false } +serde = { version = "1.0.193", features = ["derive"] } +serde_json = { version = "1.0.108", features = ["raw_value"] } + +[build-dependencies] +embuild = "0.31.2" diff --git a/README.md b/README.md new file mode 100644 index 0000000..f7006c1 --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# ESP32 IDF | Motion Detector and Server Notifier (Rust) + +Motion Detector and Server Notifier (Rust) is a motion detector application for ESP32 device (should be [this one](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/hw-reference/esp32/get-started-devkitc.html#get-started-esp32-devkitc-board-front)), implemented using Rust programming language, that allows to detect movements and send an alert to a server which will send a notification to a smartphone. **Please refer to the `How to configure and install it?` section if your application does not compiles** (it is a configuration issue). + +# Architecture + +Motion Detector application uses 3 devices: + +- led - used for notifying the motion sensor status and application errors. The led is configured to work with GPIO5(Out); +- buzzer - used to emit a sound in order to notify the success of communication with the server after a motion detection. It is configured on GPIO15(Out); +- movement sensor - around which the entire application revolves. It is configured on GPIO4(In). + +# How it works? + +When the ESP32 is turned on, the application tries to establish an WiFi connection. If the device fails to connect to the WiFi, the application will retry until it succeeds. Then the led will blink one time for one second: this means that the software is configured correctly. After a movement detection, a post request is made which contains the MAC address wrapped in a JSON, useful to identify the device that sent the request. If this request was sent successfully then the the led blinks for less that one second and the buzzer emits a short sound. If the request to the server fails, the led blinks for 2 times. The request then is handled by the server, that I wrote using Java (Spring Boot), and a new message is sent to a Discord channel. So that I receive a notification on my smartphone. If the notification was sent successfully, the server sends a positive status, else, a false is returned wrapped in a JSON. + +# How to configure and install it? + +Before installing the Motion Detector application on a ESP32, it is necessary to rename the `src/config/config.sample.rs` to `src/config/config.rs`. Then you should change the configuration in the `config.rs` by defining your WiFi SSID, password and your remote server alert request handler. +I suppose that the environment is configured correctly, so that in order to run ESP32 Motion Detector application on an ESP32 device just run `cargo clean && cargo build && cargo run` (sometime I succeed in installing the software by doing a simple `cargo run`, other times i had to hold the boot button of ESP32). + +# Photo + +![board](images/board.jpg) diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..112ec3f --- /dev/null +++ b/build.rs @@ -0,0 +1,3 @@ +fn main() { + embuild::espidf::sysenv::output(); +} diff --git a/images/board.jpg b/images/board.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26952d1af54e440e7547cf68c4c096ff2b4295fc GIT binary patch literal 106611 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 z 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

q5Jh>fe}UYZfer*yD=P@cqMT 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 anyhow::Result<()> { + esp_idf_svc::sys::link_patches(); + esp_idf_svc::log::EspLogger::initialize_default(); + + orchestrate(); + + return Ok(()); +} diff --git a/src/mod.rs b/src/mod.rs new file mode 100644 index 0000000..2b6c79b --- /dev/null +++ b/src/mod.rs @@ -0,0 +1,3 @@ +pub mod config; +pub mod service; +pub mod util; diff --git a/src/service/client_service.rs b/src/service/client_service.rs new file mode 100644 index 0000000..561f6bb --- /dev/null +++ b/src/service/client_service.rs @@ -0,0 +1,102 @@ +use anyhow::{Error, Ok}; +use embedded_svc::{http::client::Client as HttpClient, io::Write, utils::io}; +use esp_idf_svc::http::client::EspHttpConnection; +use esp_idf_sys as _; +use log::{error, info}; +use serde::Serialize; + +pub struct ClientService { + alert_url: String, +} + +impl ClientService { + pub fn new(alert_url: &str) -> ClientService { + ClientService { + alert_url: alert_url.to_owned(), + } + } + + pub fn post_request(&self, mac_address: &str) -> anyhow::Result<(), anyhow::Error> { + let mut client = HttpClient::wrap(EspHttpConnection::new(&Default::default())?); + + let payload = serde_json::to_string(&RequestAlert::new(mac_address.to_owned())).unwrap(); + let payload = payload.as_bytes(); + + let content_length_header = format!("{}", payload.len()); + let headers = [ + ("content-type", "application/json"), + ("content-length", &*content_length_header), + ]; + + let request = client.post(&self.alert_url, &headers); + + if request.is_err() { + let message = format!("connection error: {:?}", request.err()); + error!("{}", message); + return Err(Error::msg(message)); + } + let mut request = request.unwrap(); + + if request.write_all(payload).is_err() { + let message = format!("connection error while trying to write all"); + error!("{}", message); + return Err(Error::msg(message)); + } + if request.flush().is_err() { + let message = format!("connection error while trying to flush"); + error!("{}", message); + return Err(Error::msg(message)); + } + info!("-> POST {}", self.alert_url); + let response = request.submit(); + if response.is_err() { + let message = format!("connection error while trying to read response"); + error!("{}", message); + return Err(Error::msg(message)); + } + let mut response = response.unwrap(); + + let status = response.status(); + info!("<- {}", status); + let mut buf = [0u8; 1024]; + let bytes_read = io::try_read_full(&mut response, &mut buf).map_err(|e| e.0); + + if bytes_read.is_err() { + let message = format!( + "connection error while trying to read response: {:?}", + bytes_read.err() + ); + error!("{}", message); + return Err(Error::msg(message)); + } else { + let bytes_read = bytes_read.unwrap(); + info!("Read {} bytes", bytes_read); + match std::str::from_utf8(&buf[0..bytes_read]) { + std::result::Result::Ok(body_string) => info!( + "Response body (truncated to {} bytes): {:?}", + buf.len(), + body_string + ), + Err(e) => error!("Error decoding response body: {}", e), + }; + + // Drain the remaining response bytes + while response.read(&mut buf).unwrap_or(0) > 0 {} + } + Ok(()) + } +} + +#[derive(Serialize)] +#[warn(non_snake_case)] +struct RequestAlert { + macAddress: String, +} + +impl RequestAlert { + pub fn new(mac_address: String) -> RequestAlert { + RequestAlert { + macAddress: mac_address, + } + } +} diff --git a/src/service/mod.rs b/src/service/mod.rs new file mode 100644 index 0000000..8f6d05a --- /dev/null +++ b/src/service/mod.rs @@ -0,0 +1,3 @@ +pub mod client_service; +pub mod orchestrator_service; +pub mod peripheral_service; diff --git a/src/service/orchestrator_service.rs b/src/service/orchestrator_service.rs new file mode 100644 index 0000000..7cba8e7 --- /dev/null +++ b/src/service/orchestrator_service.rs @@ -0,0 +1,36 @@ +use super::{client_service, peripheral_service::PeripheralService}; +use crate::{config::config, util::thread_util}; +use log::info; + +pub fn orchestrate() { + let mut peripheral_service = PeripheralService::new(config::WIFI_SSID, config::WIFI_PASS); + let client_service = client_service::ClientService::new(config::ALERT_URL); + + let mut detection = false; + peripheral_service.led_blink_1_time_long(); + + loop { + if !peripheral_service.is_motion_detected() && detection { + info!("no detection"); + detection = false; + peripheral_service.power_off_output_devices(); + } else if peripheral_service.is_motion_detected() && !detection { + info!("MOVEMENT DETECTED"); + while !peripheral_service.retry_wifi_connection_if_necessary_and_return_status() { + peripheral_service.led_blink_3_time_long(); + thread_util::sleep_short(); + } + let mac_address = peripheral_service.get_mac_address(); + let mac_address = &mac_address.as_str(); + if client_service.post_request(mac_address).is_err() { + peripheral_service.led_blink_2_time_long(); + detection = false; + } else { + peripheral_service.led_blink_1_time_short(); + peripheral_service.buzz_1_time_short(); + detection = true; + } + } + thread_util::sleep_time(20); + } +} diff --git a/src/service/peripheral_service.rs b/src/service/peripheral_service.rs new file mode 100644 index 0000000..1fd0a37 --- /dev/null +++ b/src/service/peripheral_service.rs @@ -0,0 +1,162 @@ +use embedded_svc::wifi::{AuthMethod, ClientConfiguration, Configuration}; +use esp_idf_hal::{ + gpio::{Gpio15, Gpio4, Gpio5, Input, Output, PinDriver}, + peripherals::Peripherals, +}; +use esp_idf_svc::{ + eventloop::EspSystemEventLoop, + nvs::EspDefaultNvsPartition, + wifi::{BlockingWifi, EspWifi, WifiDeviceId}, +}; +use log::info; + +use crate::util::thread_util; + +const TIME_SHORT: u64 = 20; +const TIME_LONG: u64 = 1000; + +pub struct PeripheralService { + led: PinDriver<'static, Gpio5, Output>, + buzzer: PinDriver<'static, Gpio15, Output>, + sensor: PinDriver<'static, Gpio4, Input>, + wifi: BlockingWifi>, + wifi_ssid: String, + wifi_password: String, +} + +impl PeripheralService { + pub fn new(wifi_ssid: &str, wifi_password: &str) -> Self { + let peripherals = Peripherals::take().unwrap(); + let led = PinDriver::output(peripherals.pins.gpio5).unwrap(); + let sensor = PinDriver::input(peripherals.pins.gpio4).unwrap(); + let buzzer = PinDriver::output(peripherals.pins.gpio15).unwrap(); + + let sys_loop = EspSystemEventLoop::take().unwrap(); + let nvs = EspDefaultNvsPartition::take().unwrap(); + + let mut wifi = BlockingWifi::wrap( + EspWifi::new(peripherals.modem, sys_loop.clone(), Some(nvs)).unwrap(), + sys_loop, + ) + .unwrap(); + let mut wifi_connection = connect_wifi(&mut wifi, wifi_ssid, wifi_password); + while wifi_connection.is_err() { + thread_util::sleep_time(TIME_LONG); + wifi_connection = connect_wifi(&mut wifi, wifi_ssid, wifi_password); + } + + let peripheral_service = PeripheralService { + led, + buzzer, + sensor, + wifi, + wifi_ssid: wifi_ssid.to_owned(), + wifi_password: wifi_password.to_owned(), + }; + return peripheral_service; + } + + pub fn retry_wifi_connection_if_necessary_and_return_status(&mut self) -> bool { + if !self.wifi.is_connected().unwrap() { + if connect_wifi(&mut self.wifi, &self.wifi_ssid, &self.wifi_password).is_err() { + self.led_blink_3_time_long(); + return false; + } + } + return true; + } + + pub fn buzz_1_time_short(&mut self) { + self.buzzer.set_high().unwrap(); + thread_util::sleep_time(TIME_SHORT); + self.buzzer.set_low().unwrap(); + thread_util::sleep_time(TIME_SHORT); + } + + pub fn power_off_output_devices(&mut self) { + self.led.set_low().unwrap(); + self.buzzer.set_low().unwrap(); + } + + pub fn is_motion_detected(&self) -> bool { + self.sensor.is_high() + } + + pub fn led_blink_3_time_short(&mut self) { + self.led_blink_1_time(TIME_SHORT); + self.led_blink_1_time(TIME_SHORT); + self.led_blink_1_time(TIME_SHORT); + } + + pub fn led_blink_3_time_long(&mut self) { + self.led_blink_1_time(TIME_LONG); + self.led_blink_1_time(TIME_LONG); + self.led_blink_1_time(TIME_LONG); + } + + pub fn led_blink_2_time_short(&mut self) { + self.led_blink_1_time(TIME_SHORT); + self.led_blink_1_time(TIME_SHORT); + } + + pub fn led_blink_2_time_long(&mut self) { + self.led_blink_1_time(TIME_LONG); + self.led_blink_1_time(TIME_LONG); + } + + pub fn led_blink_1_time_short(&mut self) { + self.led_blink_1_time(TIME_SHORT); + } + + pub fn led_blink_1_time_long(&mut self) { + self.led_blink_1_time(TIME_LONG); + } + + pub fn get_mac_address(&self) -> String { + let mav = &self + .wifi + .wifi() + .driver() + .get_mac(WifiDeviceId::Sta) + .unwrap(); + let mac_address_obj = + macaddr::MacAddr6::new(mav[0], mav[1], mav[2], mav[3], mav[4], mav[5]); + let mac_address_value = mac_address_obj.to_string(); + info!("MAC_ADDRESS: {:?}", mac_address_value); + mac_address_value + } + + fn led_blink_1_time(&mut self, time: u64) { + self.led.set_high().unwrap(); + thread_util::sleep_time(time); + self.led.set_low().unwrap(); + thread_util::sleep_time(time); + } +} + +fn connect_wifi( + wifi: &mut BlockingWifi>, + ssid: &str, + password: &str, +) -> anyhow::Result<()> { + let wifi_configuration: Configuration = Configuration::Client(ClientConfiguration { + ssid: ssid.into(), + bssid: None, + auth_method: AuthMethod::WPA2Personal, + password: password.into(), + channel: None, + }); + info!("Connecting to SSID: {}", ssid); + wifi.set_configuration(&wifi_configuration)?; + + wifi.start()?; + info!("Wifi started"); + + wifi.connect()?; + info!("Wifi connected: {}", ssid); + + wifi.wait_netif_up()?; + info!("Wifi netif up"); + + Ok(()) +} diff --git a/src/util/mod.rs b/src/util/mod.rs new file mode 100644 index 0000000..c789e57 --- /dev/null +++ b/src/util/mod.rs @@ -0,0 +1 @@ +pub mod thread_util; diff --git a/src/util/thread_util.rs b/src/util/thread_util.rs new file mode 100644 index 0000000..7c2695e --- /dev/null +++ b/src/util/thread_util.rs @@ -0,0 +1,16 @@ +use std::time::Duration; + +const TIME_SHORT: u64 = 1000; +const TIME_LONG: u64 = 2000; + +pub fn sleep_short() { + std::thread::sleep(Duration::from_millis(TIME_SHORT)); +} + +pub fn sleep_long() { + std::thread::sleep(Duration::from_millis(TIME_LONG)); +} + +pub fn sleep_time(time: u64) { + std::thread::sleep(Duration::from_millis(time)); +}