Hivemonitor ESP32 Firmware
Firmware for running Hivemonitor on ESP32 microcontrollers.
Complemetary hivemonitor repositories:
Architecture
Operating modes
Setup mode
Both types of devices acting as sending and gateway have a operating and setup mode. By using the on-board switch labeled "MODE" the esp32 will boot up in setup mode and be available as a WiFi hotspot named ESP-AP-*. View setup section below.
Sender device
Devices acting as sensor have weight, temperature and humidity sensors connected that will be read and broadcasted using ESP-NOW peer-to-peer protocol.
Gateway device
Device acting as receiver will be simultaneously be listening for messages broadcasted to it's MAC address using ESP-NOW & connected to WiFi to send MQTT messages to a broker.
Installation
Clone repository and navigate into folder:
git clone https://github.com/kevinmidboe/hivemonitor-esp32-firmware
cd hivemonitor-esp32-firmware
TL;DR
Flash microcontroller:
wget https://raw.githubusercontent.com/glenn20/micropython-espnow-images/main/20230427-v1.20.0-espnow-2-gcc4c716f6/firmware-esp32-GENERIC.bin > firmware-esp32-espnow.bin
make flash file=firmware-esp32-espnow.bin device=/dev/tty.usbserial-02899247
Upload source code:
make sender device=/dev/tty.usbserial-02899247
# or
make gateway device=/dev/tty.usbserial-02899247
Flashing firmware
The current supported flashing tool for micropython firmware is esptool.py. You can find this tool here: https://github.com/espressif/esptool/, or install it using pip:
pip install esptool
Download firmware from supported firmware linked below or compile required micropython with libraries listed below:
- espnow
- usocket
- umqtt.simple
Plug esp32 into computers USB and find it's connected TTY port with:
ls -l /dev/tty.*
Erase the existing firmware and then deploy the new firmware using:
make flash device=/dev/tty.usbserial-02899247
Uploading application source files
For uploading source files we can use adafruit ampy CLI found at https://github.com/espressif/esptool, or installed with pip:
pip install adafruit-ampy
Upload all files for ESP32 that will be acting as a gateway by running:
make gateway
Upload all files for ESP32 that will be acting as a sensor reader & sender by running:
make sender
Setup
After uploading source files, use the on-board MODE switch to side marked "Setup" device to boot board into setup mode. Inputs will b based on if device is setup as sender or gateway.
After setting mode switch and resetting the controller will be discoverable as a WiFi access point serving a configuration page.
- Connect to WiFi network prefixed with
ESP-AP- - Open browser to http://192.168.0.4
Below shows screenshots of gateway device in setup mode:
🎉 Setup completed!
When both a sender and gateway is setup MQTT messages should start reaching broker.
ESP32
Deep sleep
asdf
Networking
There are two WiFi interfaces, STA mode is workstation mode (ESP32 is connected to the router),AP mode provides access services (other devices connected to ESP32).
The ESP32 does not have two antennas, but we can run two interfaces STA & AP. The drawback of this is that since we only have one antenna we need to make sure the sending and receiving devices are both broadcasting on same channel. In a sitation where your WiFi access point might be brodcasting on channel e.g. 6 the ESP32 connects over WiFi on this channel. The ESP32 sending sensor data therefor needs to be broadcasting data over ESP-NOW on same channel.
Firmware sources
| mpy version | espnow | mqtt* | socket | source |
|---|---|---|---|---|
| v1.20 | ✅ | ✅ | ✅ | github.com/glenn20/micropython-espnow/20230427-v1.20.0-espnow/firmware.bin |
| v1.19 | ✅ | ✅ | ✅ | github.com/glenn20/micropython-espnow/20220709-v1.19.1-espnow/firmware.bin |