Good Morning,
Updated, narrated, video E220 dual core project During the video there is a 60 second countdown timer between switch on and off.
Project has been converted to FreeRTOS, dual core coding for better stability and crash prevention; previously on single core coding, experienced WiFi and sketch flow/logic collisions causing crashes. Using dual cores prevents collisions by WiFi running on one core and sketch logic running on the other core, and better E220 AUX pin management; not proceeding until E220 module is ready internally..
Project credits for project development
E220-WOR-with-Dual-Core-FREERTOS-System
Separate versions for ESP32 and the ESP32S3, New feature, timing for each step of the process.
Nordic Power Profiler Kit 2 observations to be available soon on the Tech500, Project GitHub Repository.
Regards,
William
Hi.
Thanks for sharing.
That’s a great application of FreeRTOS Dual Core.
Regards,
Sara
Hi Sara,
Thank you Sara; still working on the ESP32S3 WOR Receiver.
Original use case was for a Wyse 3 Cam, live video feed, power bank battery to conserve battery. Project use a one-click URL to initialize the process of waking deep sleeping ESP32S3 and sending preamble with payload command to turn on the “switch”, then a countdown timer initializes process to turn off the “switch”. Goes back to sleep, awaits next web request.
Quick look with the “Nordic Power Profiler Kit II” shows the choice of ESP32S3 is no where close to the “Ebyte, EoRa S3 900TB (ESP32S3 with SX1262 on board), I posted here about on this forum! ESP32S3 with E220 power consumption is ranging in milliamps; not in microamps of power consumption!!!
Regards.
William
Update 01/16/2026
Good news! Remaining issue of ESP32S3 not waking by Wake On Radio (WOR) has been resolved with 100% reliability!
11:45:11.611 -> E220 Ready 11:45:11.611 -> 11:45:11.611 -> ╔════════════════════════════════════════╗ 11:45:11.611 -> ║ SYSTEM READY ║ 11:45:11.644 -> ╚════════════════════════════════════════╝ 11:45:11.644 -> URL: http://192.168.12.27/relay 11:45:11.644 -> 11:45:43.715 -> 11:45:43.715 -> 🌐 WEB REQUEST RECEIVED 11:45:43.715 -> 11:45:43.715 -> ╔════════════════════════════════════════╗ 11:45:43.715 -> ║ WOR TRANSMISSION STARTING ║ 11:45:43.749 -> ╚════════════════════════════════════════╝ 11:45:43.749 -> Event: Battery Switch ON 11:45:43.749 -> 11:45:43.749 -> ============================== 11:45:43.749 -> WOR SEND SEQUENCE START 11:45:43.749 -> ============================== 11:45:43.749 -> STEP 1: Preparing data payload... 11:45:43.749 -> Switch value: 1 11:45:43.749 -> Timestamp: Fri 01/16/26 11:45:43 11:45:43.749 -> 11:45:43.749 -> STEP 2: Entering WOR TX mode... 11:45:43.943 -> WOR TX mode confirmed. 11:45:43.943 -> 11:45:43.943 -> STEP 3: Sending WOR preamble... 11:45:43.974 -> Preamble status: Success 11:45:46.533 -> 11:45:46.533 -> STEP 4: Switching to NORMAL TX mode... 11:45:46.760 -> Normal TX mode confirmed. 11:45:46.760 -> 11:45:46.760 -> STEP 5: Sending data packet... 11:45:46.760 -> Data status: Success 11:45:47.245 -> 11:45:47.245 -> ============================== 11:45:47.245 -> WOR SEND COMPLETE (3501 ms) 11:45:47.245 -> ============================== 11:45:47.245 -> 11:45:47.245 -> ╔════════════════════════════════════════╗ 11:45:47.245 -> ║ WOR TRANSMISSION COMPLETE ║ 11:45:47.245 -> ╚════════════════════════════════════════╝ 11:45:47.280 -> 11:46:43.713 -> 11:46:43.713 -> ⏰ COUNTDOWN EXPIRED - AUTO SHUTDOWN 11:46:43.713 -> 11:46:43.713 -> ╔════════════════════════════════════════╗ 11:46:43.745 -> ║ WOR TRANSMISSION STARTING ║ 11:46:43.745 -> ╚════════════════════════════════════════╝ 11:46:43.745 -> Event: Battery Switch OFF 11:46:43.745 -> 11:46:43.745 -> ============================== 11:46:43.745 -> WOR SEND SEQUENCE START 11:46:43.745 -> ============================== 11:46:43.745 -> STEP 1: Preparing data payload... 11:46:43.745 -> Switch value: 2 11:46:43.777 -> Timestamp: Fri 01/16/26 11:46:43 11:46:43.777 -> 11:46:43.777 -> STEP 2: Entering WOR TX mode... 11:46:43.971 -> WOR TX mode confirmed. 11:46:43.971 -> 11:46:43.971 -> STEP 3: Sending WOR preamble... 11:46:43.971 -> Preamble status: Success 11:46:46.534 -> 11:46:46.534 -> STEP 4: Switching to NORMAL TX mode... 11:46:46.760 -> Normal TX mode confirmed. 11:46:46.760 -> 11:46:46.760 -> STEP 5: Sending data packet... 11:46:46.760 -> Data status: Success 11:46:47.246 -> 11:46:47.246 -> ============================== 11:46:47.246 -> WOR SEND COMPLETE (3491 ms) 11:46:47.246 -> ============================== 11:46:47.246 -> 11:46:47.246 -> ╔════════════════════════════════════════╗ 11:46:47.246 -> ║ WOR TRANSMISSION COMPLETE ║ 11:46:47.279 -> ╚════════════════════════════════════════╝ 11:46:47.279 ->
Note: Receiver does not have WiFi; so no NTP for timestamping. Timestamping is sent from transmitter to receiver included in Message outgoing struct.
Regards,
William
Nordic Power Profiler Kit II Observations of the ESP32-S3 with the Ebyte, E220:
Before power saving adjustments
After power saving adjustments
Note: The on Development Board LED, the LDO, voltage regulator, and the USB interface keep from reaching below the mA range.
Regards,
William
ESP32/ESP32-S3 Dual-Core FreeRTOS Wake-On-Radio System with Ebyte E220
Project I’ve been working on that combines the Ebyte E220 LoRa transceiver with ESP32/ESP32-S3 microcontrollers using dual-core FreeRTOS architecture and Wake-On-Radio (WOR) functionality.
Project Overview
This project demonstrates implementation of LoRa communication with deep sleep power management, utilizing the dual-core capabilities of ESP32 and ESP32-S3 microcontrollers. The system is designed for ultra-low-power remote applications where battery efficiency is critical.
GitHub Repository: E220-WOR-with-Dual-Core-FREERTOS-System
Key Features
Dual-Core Architecture: Leverages both cores of ESP32/ESP32-S3 with FreeRTOS task management
Wake-On-Radio (WOR): E220 transceiver wakes from deep sleep on incoming messages
Ultra-Low Power: Deep sleep mode with 5 µA current draw
Long Range: Up to 10 km estimated range at 30 dBm transmit power
Dual Platform Support: Compatible with both ESP32 and ESP32-S3 development boards
Web Interface: HTML-based configuration and monitoring
Technical Highlights
The system uses FreeRTOS to distribute tasks across both processor cores, with one core handling radio communications while the other manages system tasks and power states. The E220-900T30D transceiver’s WOR capability allows the entire system to remain in deep sleep until a radio message arrives, making it ideal for battery-powered remote monitoring and control applications.
The repository includes:
Complete source code for ESP32 and ESP32-S3 variants
E220 WOR Configurator sketch for module setup
Technical reference documentation for the dual-core architecture
HTML interface files for web-based interaction
Applications
This architecture is perfect for:
Remote sensor networks
Battery-powered IoT devices
Solar-powered monitoring stations
Long-range telemetry systems
Agricultural automation
Environmental monitoring
License
Released under the MIT License, making it free for both personal and commercial use.
Project Credits & Acknowledgments
This project wouldn’t have been possible without the contributions and support of the following individuals and AI assistants:
William Lucid (Tech500) – Project author and developer
AI Collaboration Team
This project was developed with significant assistance from various AI language models, each contributing their unique strengths to different aspects of the development:
Claude (Anthropic) – Primary development partner
Advanced code architecture and FreeRTOS dual-core implementation
Technical documentation and markdown formatting
Code optimization and debugging assistance
Project structure and organization
Deep technical problem-solving for ESP32 platform specifics
ChatGPT (OpenAI) – Development support
Code refinement and alternative implementation suggestions
Documentation assistance
General programming consultation
Code review and improvement recommendations
Gemini (Google) – Research and analysis
Technical research and background information
Comparison analysis of different approaches
Additional code examples and references
Verification of technical concepts
Special Thanks
Renzo Mischianti (xReef)
LoRa E220 Library development and maintenance
Comprehensive E220 Ebyte articles and documentation
Community support and technical guidance
E220 support resources and examples
Wolfgang Ewald
Excellent tutorial: “Using LoRa with the EByte E220, E22 and E32 series”
Practical hands-on guidance and real-world examples
Valuable insights into LoRa implementation
Component Manufacturers
Espressif Systems – For the ESP32 and ESP32-S3 microcontroller platforms and FreeRTOS implementation
Ebyte – For the excellent E220-900T30D LoRa transceiver modules
Development Notes
This project represents a collaborative effort between human expertise and AI assistance, demonstrating how modern AI tools can accelerate embedded systems development while maintaining high code quality and documentation standards. Each AI assistant brought different strengths to the project, from Claude’s deep technical ESP32 knowledge to Gemini’s research capabilities and Grok’s creative problem-solving.
The combination of human direction and AI assistance enabled rapid prototyping, comprehensive documentation, and robust implementation of complex dual-core FreeRTOS architecture.
I hope this project helps others working on similar LoRa and ESP32 applications! Feel free to fork, contribute, or reach out with questions.
Questions? Suggestions? Contributions?
Please open an issue on GitHub or submit a pull request. I’m always happy to discuss the project and help others implement similar systems!
Licensed under MIT License – See repository for full license details
Regards,
William, ab9nq
Update 01/24/2025
Have detailed “E220-WOR-with-Dual-Core-FREERTOS-System” in depth over at “Dronebot Workshop” link goes directly to topic.
GitHub, project README with links to video demonstration and Putty log of serial output.
Items of interest; ACK is sent from receiver to transmitter on success and NTP time is sent from transmitter to receiver. Receiver has no Wi-Fi.
“Putty” log capture shows event timing for the sequence events; including getting ready, preamble received, esp32-s3 wakeup, receiving data, turning switch on, entering deep sleep. Cycle repeats after countdown timer expires, turning off switch, then entering deep sleep.
Regards,
William
Claude (AI) provided code to config E220-900T22D modules for transmitter and receiver:
Claude’s E220 Module configurator
If used; Check your #define pin definitions! Could be different than my #define pins. This saves allot of time and get the process done correctly the first time!
Good news; ordered two, Ebyte, EoRa-S3-900TB (915 MHz) development boards with shipping to my address for $36.20 — 7 to 15 day delivery. Looks like tariffs have not impacted EbyteIoT orders; incase anyone is holding off of ordering now. I verified with EbyteIoT; finial cost delivered before placing the order.
William