Back of our home faced wetland pond; Mounted a Wyze Cam3 above our shed with no mains power available; resorted to a 10,000 mAH power bank. The camera was on continuously; lucky to get 24 hours of use from the power bank. The camera was feeding a Docker, Wyze-Bridge container to get a WebRTC URL. Designed a web page with iframe tags for the live video feed. Added a web link for a web request that arrived at the ESP32 Asynwebserver on my desk.
Almost immediately I started thinking of a way to conserve power; it was not until I had to move to an apartment; that I came up with the "EoRA-PI-Foundation" project. I continued to develop the Open-Source project as a community project with the collaborative help of Artificial Intelligence, Now, I no longer have access to the wetland pond, plus I am twenty miles north of the pond out of LoRa range.
Knew what I wanted to accomplish; started searching ways to implement my ideas for conserving power for the Wyze Cam3. Found the "SX126x-Arduino" library, example "DeepSleep.ino." The live video web site has been online since 2017 with about a dozen visitors a day; I need Deep Sleep; ~98% of the time. Thanks to Claude for converting the library example for use in the project! All I needed at this point was a web server request. Request would send the wake on the radio packet and the actual command packet to activate the load; this was accomplished from a single web request, in one web link click!
Next up the hardware; looking at Industrial Scientific Medical, license free band transceivers, I found the EoRa-S3-900TB with an ESP32-S3 and SX1262 LoRa radio. Early on found there is an issue with this development board; Lora radio signal DIO1 is not RTC_GPIO wake capable on GPIO33! Routing GPIO33 through 74HC04, pair of inverters, then to RTC_NUM_16 provided a RTC_GPIO that is externally wake-able! Thanks to Copilot for the fix.
Days were spent shuffling through printouts of pin diagrams, going through notes. matching parameters, and failures. Thanks to Claude for creating a five column, table of physical pin number, GPIO number, RTC-GPIO number, wake-capable, and notes --greatly increasing productivity! Finally getting transmitter and receiver communicating; continued working on project coding. Heart of the radio communications comes from the library example Claude converted for the project. Once the WOR and command is received, command is assigned to the taskDispatcher, radio is awaken, task 1 activates load, sets timer, timer expires, task 2: load is deactivated, ESP32-S3 goes to deep sleep, radio remains in duty cycle mode. LoRa radio awaits for the next web request.
Transceivers doing basic communication; we turned to power optimization. Doing ultra-low power optimization requires a tool like the Nordic Power Profiler Kit II that can switch from higher current to Pico amps at very high switching rates and capable of taking 100,000 sample measurements a second; no digital multimeter can do this switching and sampling. Starting point of measurement; with basic disabling of WiFi, Bluetooth, and Analog to Digital Converter; current consumption was 1.41 mA, far from Ebytes spec of 25uA. in "hibernation." Looking at radioLib class members, I came across radio.sleep(), which powers down the radio --no receive and no transmit. The solution was to use it along with radio.startReceivedutyCycleAuto() with no parameters; this brought us to 341 µA. Adding SPI.end() brought us to ~175 µA. Tried varying the number of symbols in the preamble: 64, 128, 256, 512. 512 symbols gave us ~175 µA per 10 seconds on the Nordic Power Profiler Kit II.
Serial Monitor Output with comments
Nordic PPK2 Observations from initialization to complete cycle
Project provides a "treasure", of documentation for anyone working with the "EoRa PI" (EoRa-S3-900TB) and project files for a strong foundation.
Complete Ebyte EoRa-S3-900TB (EoRa PI) Pin Mapping Guide.pdf
EoRa Pi Battery Life Analysis.pdf
EoRa_PI_UserManual_EN_v1.1.pdf
Comments