4.9 KiB
OpenThread Simple Node Example
This example demonstrates how to create a simple OpenThread node that automatically starts in a Thread network using default settings.
The application automatically initializes a Thread network with default parameters and displays the current device role and network information.
Supported Targets
| SoC | Thread | Status |
|---|---|---|
| ESP32-H2 | ✅ | Fully supported |
| ESP32-C6 | ✅ | Fully supported |
| ESP32-C5 | ✅ | Fully supported |
Note on Thread Support:
- Thread support must be enabled in the ESP-IDF configuration (
CONFIG_OPENTHREAD_ENABLED). This is done automatically when using the ESP32 Arduino OpenThread library. - This example uses
OpenThread.begin()which automatically starts a Thread network using default settings or previously stored NVS dataset information.
Features
- Automatic Thread network initialization with default settings
- Automatic device role assignment (first device becomes Leader, subsequent devices become Router or Child)
- Network information display using CLI Helper Functions API
- Periodic device role monitoring
- Support for persistent network configuration via NVS
Hardware Requirements
- ESP32 compatible development board with Thread support (ESP32-H2, ESP32-C6, or ESP32-C5)
- USB cable for Serial communication
Software Setup
Prerequisites
- Install the Arduino IDE (2.0 or newer recommended)
- Install ESP32 Arduino Core with OpenThread support
- ESP32 Arduino libraries:
OpenThread
Configuration
No configuration is required before uploading the sketch. The example uses default Thread network parameters:
- Network Name: "OpenThread-ESP"
- Mesh Local Prefix: "fd00:db8:a0:0::/64"
- Channel: 15
- PAN ID: 0x1234
- Extended PAN ID: "dead00beef00cafe"
- Network Key: "00112233445566778899aabbccddeeff"
- PSKc: "104810e2315100afd6bc9215a6bfac53"
Note: If NVS (Non-Volatile Storage) already contains dataset information, it will be loaded from there instead of using defaults.
Building and Flashing
- Open the
SimpleNode.inosketch in the Arduino IDE. - Select your ESP32 board from the Tools > Board menu (ESP32-H2, ESP32-C6, or ESP32-C5).
- Connect your ESP32 board to your computer via USB.
- Click the Upload button to compile and flash the sketch.
Expected Output
Once the sketch is running, open the Serial Monitor at a baud rate of 115200. You should see output similar to the following:
OpenThread Network Information:
Role: Leader
RLOC16: 0x0000
Network Name: OpenThread-ESP
Channel: 15
PAN ID: 0x1234
Extended PAN ID: dead00beef00cafe
Network Key: 00112233445566778899aabbccddeeff
Mesh Local EID: fd00:db8:a0:0:0:ff:fe00:0
Leader RLOC: fd00:db8:a0:0:0:ff:fe00:0
Node RLOC: fd00:db8:a0:0:0:ff:fe00:0
Thread Node State: Leader
Thread Node State: Leader
...
The first device to start will become the Leader. Subsequent devices will automatically join as Router or Child nodes.
Using the Device
Network Behavior
- First device: Automatically becomes the Leader and creates a new Thread network
- Subsequent devices: Automatically join the existing network as Router or Child nodes
- Device role: Displayed every 5 seconds in the Serial Monitor
Multiple Devices
To create a multi-device Thread network:
- Flash the first device - it will become the Leader
- Flash additional devices - they will automatically join the network
- All devices must use the same network key and channel (defaults are used if NVS is empty)
Code Structure
The SimpleNode example consists of the following main components:
-
setup():- Initializes Serial communication
- Starts OpenThread stack with
OpenThread.begin()(auto-start with default settings) - Initializes OpenThread CLI
- Prints current Thread network information using
OpenThread.otPrintNetworkInformation()
-
loop():- Periodically displays the current device role using
OpenThread.otGetStringDeviceRole() - Updates every 5 seconds
- Periodically displays the current device role using
Troubleshooting
- Device not joining network: Ensure all devices use the same network key and channel. Check that the Leader node is running first.
- Role stuck as "Detached": Wait a few seconds for the device to join the network. Verify network key and channel match the Leader.
- No network information displayed: Check that OpenThread stack initialized successfully (look for network information in setup)
- No serial output: Check baudrate (115200) and USB connection
Related Documentation
License
This example is licensed under the Apache License, Version 2.0.