diff --git a/README.org b/README.org new file mode 100644 index 0000000..cef33dc --- /dev/null +++ b/README.org @@ -0,0 +1,111 @@ +#+TITLE: PMME - Particulate Matter Monitoring Ecosystem +#+OPTIONS: toc:nil +#+AUTHOR: +#+DATE: + +* Overview + +A complete IoT solution for monitoring air quality using PM2.5 sensors, built with Rust across embedded, cloud, and mobile platforms. + +* Architecture Overview + +The PMME system consists of four main components working together to provide real-time air quality monitoring: + +#+BEGIN_EXAMPLE +[ESP32 Device] --WiFi--> [Cloud Server] <--HTTP--> [Mobile App] + | | + [Admin Panel] <--WiFi--> [PostgreSQL DB] +#+END_EXAMPLE + +* Components + +** 🔧 ESP32 Device (~pmme-device/rust-version/~) + +- *Platform*: ESP32 microcontroller running esp-idf with Rust +- *Sensors*: PM2.5 particulate matter sensor (PMS7003) +- *Display*: SSD1306 OLED for local readings +- *Connectivity*: WiFi for data transmission to cloud +- *Features*: + - Real-time sensor data collection + - Local display of current readings + - Automatic cloud data transmission + +** ☁️ Cloud Server (~pmme-cloud/~) + +- *Framework*: Rocket web framework (Rust) +- *Database*: PostgreSQL (planned integration) +- *Purpose*: + - Receive and store sensor data from ESP32 devices + - Provide REST API for mobile app data access + - Future: Historical data analysis and graphing + +** 📱 Mobile App (~pmme-mobile/~) + +- *Framework*: Tauri (Rust + Web frontend) +- *Platform*: Cross-platform mobile application +- *Features*: + - Connect to cloud server via HTTP + - Display current PM2.5 readings + - Future: Historical data visualization and graphs + - Future: Potential direct ESP32 admin panel access + +** 🌐 Web UI & Admin Panel (~pmme-ui/~) + +- *Framework*: ClojureScript with Shadow CLJS +- *Purpose*: + - Data visualization interface + - Admin panel for ESP32 device management and provisioning + +* Getting Started + +** ESP32 Device Setup + +#+BEGIN_SRC bash +cd pmme-device/rust-version/ +# Set up ESP-IDF environment +./export-esp.sh +cargo build +cargo run +#+END_SRC + +** Cloud Server + +#+BEGIN_SRC bash +cd pmme-cloud/ +cargo run +#+END_SRC + +** Mobile App + +#+BEGIN_SRC bash +cd pmme-mobile/ +npm install +npm run tauri dev +#+END_SRC + +** Web UI + +#+BEGIN_SRC bash +cd pmme-ui/ +npm install +npm run dev +#+END_SRC + +* Future Features + +- *PostgreSQL Integration*: Historical data storage and analysis +- *Data Visualization*: Graphs and trends in mobile app +- *Multi-sensor Support*: Expansion beyond PM2.5 to other environmental sensors +- *ESP32 HTTP Server*: Device-hosted admin interface + +* Development Notes + +- The project previously included a C version implementation which has been deprecated in favor of the Rust implementation +- The system is designed to be scalable for multiple ESP32 devices reporting to a single cloud instance + +* Tech Stack + +- *Embedded*: Rust + esp-idf +- *Backend*: Rust + Rocket + PostgreSQL +- *Mobile*: Rust + Tauri +- *Web/Admin*: ClojureScript + Shadow CLJS diff --git a/pmme-device/rust-version/export-esp.sh b/pmme-device/rust-version/export-esp.sh new file mode 100644 index 0000000..1aab6ab --- /dev/null +++ b/pmme-device/rust-version/export-esp.sh @@ -0,0 +1,2 @@ +export PATH="/home/joe/.local/share/rustup/toolchains/esp/xtensa-esp-elf/esp-14.2.0_20240906/xtensa-esp-elf/bin:$PATH" +export LIBCLANG_PATH="/home/joe/.local/share/rustup/toolchains/esp/xtensa-esp32-elf-clang/esp-19.1.2_20250225/esp-clang/lib"