update: improve documentation and restructure code for modular hardware integration, add CAN communication to HAL, and update KiCad layouts
This commit is contained in:
@@ -2,13 +2,50 @@
|
||||
title: "Software"
|
||||
date: 2025-01-24
|
||||
draft: false
|
||||
description: "Information about the Firmware"
|
||||
tags: ["software"]
|
||||
description: "Information about the PlantCtrl Firmware"
|
||||
tags: ["software", "rust", "esp32-c6", "firmware"]
|
||||
---
|
||||
* esp-idf-hal based rust project
|
||||
* can be run standalon or with wifi
|
||||
* MQTT
|
||||
* SNTP to sync the RTC/Clock
|
||||
* Abitrary file upload and download into SPIFS volume
|
||||
* Flash Battery Controller from file in Flash
|
||||
* Flash Firmware via OTA directly from website
|
||||
|
||||
The PlantCtrl firmware is a modern, reliable, and efficient system designed specifically for the ESP32-C6 RISC-V microcontroller. It is written entirely in **Rust**, leveraging the power of asynchronous programming to ensure low power consumption and high responsiveness.
|
||||
|
||||
## Core Technology Stack
|
||||
|
||||
* **Language:** [Rust](https://www.rust-lang.org/) (no_std)
|
||||
* **Async Runtime:** [Embassy](https://embassy.dev/)
|
||||
* **Hardware Abstraction:** `esp-hal` for ESP32-C6
|
||||
* **Filesystem:** [LittleFS2](https://github.com/littlefs-project/littlefs) for robust persistent storage
|
||||
* **Web Framework:** `edge-http` for the integrated web server
|
||||
|
||||
## Key Features
|
||||
|
||||
### Intelligent Watering
|
||||
The software manages up to 8 independent watering zones.
|
||||
* **Moisture-Based Control:** Automatically triggers pumps when soil moisture drops below a configurable threshold.
|
||||
* **Safety Limits:** Includes pump time limits, volume limits (requires flow sensor), and mandatory cooldown periods.
|
||||
* **Scheduling:** Define specific hours during which watering is allowed to occur.
|
||||
* **Pump Protection:** Monitors pump current to detect dry running or blockages (using INA219).
|
||||
|
||||
### Modular Sensor Integration
|
||||
The firmware communicates with the new **CAN bus-based sensor modules**.
|
||||
* **Digital Accuracy:** Receives precise moisture data over the robust CAN bus protocol.
|
||||
* **Multi-Sensor Support:** Supports A and B sensor pairs for each plant to provide better averaging in large containers.
|
||||
|
||||
### Networking & IoT
|
||||
* **WiFi:** Supports both Station mode (connecting to your home network) and Access Point mode (for initial setup).
|
||||
* **MQTT & Home Assistant:** Full integration with Home Assistant via the `mcutie` crate. Reports battery status, moisture levels, tank levels, and allows remote configuration.
|
||||
* **Time Sync:** Uses **SNTP** to keep the internal Real-Time Clock (RTC) accurate.
|
||||
* **OTA Updates:** Firmware can be updated wirelessly via the web interface.
|
||||
|
||||
### Power Management
|
||||
* **Solar Optimized:** Works in tandem with the MPPT module to maximize solar charging.
|
||||
* **Battery Aware:** Monitors battery State of Charge (SoC). It can automatically disable non-essential features (like the nightlight) or enter a deep-sleep "rescue mode" if the battery is critically low.
|
||||
* **Low Power:** Uses ESP32-C6 power-saving features to ensure long autonomous operation.
|
||||
|
||||
### Integrated Web Interface
|
||||
The firmware hosts a comprehensive web dashboard built with **TypeScript** and **Webpack**.
|
||||
* **Real-time Monitoring:** View current moisture, battery health, and solar production.
|
||||
* **Easy Configuration:** Change all system settings (WiFi, MQTT, watering rules) directly from your browser.
|
||||
* **Diagnostics:** Access system logs and hardware status information.
|
||||
|
||||
## Emergency Rescue Mode
|
||||
If the system detects a missing configuration or an invalid system time, it automatically enters **Emergency Rescue Mode**. In this mode, it opens a WiFi Access Point ("PlantCtrl Init") allowing you to perform initial setup or recover the system.
|
||||
|
||||
Reference in New Issue
Block a user