wireless_debug

Example of the component espressif/esp-now v2.5.2

ESP-NOW Debug Demo

This example demonstrates how to debug the ESP-NOW devices.

Functionality

ESP-NOW debug receiver board or monitored device provides the following features through UART or espnow command:

  • Wi-Fi configuration: provides WiFi configuration, WiFi scan, WiFi ping commands.
  • ESP-NOW configuration: provides control, provisioning, OTA, configuration and iperf commands.
  • [System command]: provides heap, version, restart, power save, reset, rollback, coredump commands.
  • [Peripherals command]: provides GPIO, UART commands.
  • Command: runs commands on specific devices.
  • General command: includes help command to print all currently supported commands.

ESP-NOW debug receiver board also provides the following features:

  • Receives running log from ESP-NOW devices via ESP-NOW wireless transmission technology.
  • Web server: starts a HTTP web server, and PC web browser can get running log and status from the server.

ESP-NOW monitored device also provides the following features:

  • The device log data will be stored in flash and sent through ESP-NOW data.
  • The monitored device also implements the function of transferring log data to the TCP server on the HTTP network.

Note:

  1. ESP-NOW debug receiver board can receive debugging data from devices only when the board is on the same Wi-Fi channel with the devices.
  2. If the ESP-NOW debug receiver board is on the same channel with devices, you don't need to connect the board with the router.

Hardware Required

This example can run on any ESP32 series boards and at least two development boards are required. One is the debug receiver board and others are monitored devices.

Configuration

Open the project configuration menu (idf.py menuconfig) to configure "ESP-NOW debug monitor Mode" on debug receiver board or "ESP-NOW debug monitored Mode" on monitored devices.

For debug monitor mode, configure web server to debug devices through the web pages (Refer to Kconfig file).

For debug monitored mode, post monitored device log to HTTP server (Refer to Kconfig file).

How to Use the Example

Workflow

  1. Compile and flash this project to an ESP32 development board;
  2. Open serial port terminal and restart development board:

Please use serial port terminals such as minicom to avoid some unexpected problems when using idf.py monitor.

  1. Debug ESP-NOW by entering the following commands according to the prompts.

The following describes the use of each command in sequence.

Serial Port Commands

  • ESP-NOW debug receiver board or monitored device supports the following serial port commands: help, wifi_config, wifi_scan, wifi_ping and command, provisioning, control, ota.

  • The interaction of serial port commands follows the following rules:

    1. PC sends commands to ESP-NOW debug receiver board through serial port with a baud rate of 115200.

    2. In command definition, all characters are lowercase (some options are uppercase), and strings do not need to be quoted.

    3. The elements in angle brackets <> in command description should be taken as a parameter and be replaced as the case may be.

    4. The part contained in square brackets [] or brackets () in command description is the value range that can be filled in.

    5. The pattern of serial port commands is shown below, with each element separated by a space:

      Plaintext

      Command + Option + Parameter,for example: wifi_config -c 1
      
    6. Serial port commands support line breaks: \n and \r\n.

    7. Serial port returns execution results at a baud rate of 115200.

Wi-Fi Command

  1. Wi-Fi configuration | | | Note |

| ------------------ | ----------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | | Command definition | wifi_config -i -c <channel (1 ~ 13)> -s <ssid> -b <bssid (xx:xx:xx:xx:xx:xx)> -p <password> -C <country_code> | | | Command | wifi_config -i | Get Wi-Fi information | | | wifi_config -c -s -b -p -C | Set Wi-Fi configuration | | Parameter | -i or --info | Wi-Fi information | | | -c or --channel | Wi-Fi work channel | | | -s or --ssid | AP SSID | | | -b or --bssid | AP BSSID | | | -p or --password | AP password | | | -C or --country_code | Set the current country code | | Example | wifi_config -s "ssid" -p "password" | Wi-Fi sets and connects to the AP with SSID as "ssid" and password as "password". | | | wifi_config -c 11 | Configure the working channel of the ESP-NOW device to be 11 | 2. Scan command

Note
Command definition wifi_scan -r <rssi (-120 ~ 0)> -s <ssid> -b <bssid (xx:xx:xx:xx:xx:xx)> -p <time (ms)>
Command wifi_scan -r -s -b -p Scan APs
Parameter -r or --rssi Filter devices by RSSI
-s or --ssid Filter devices by SSID
-b or --bssid Filter devices by BSSID
-p or --passive Passive scan time of each channel
Example wifi_scan Scan all APs
wifi_scan -r -60 Scan devices with RSSI signal value within -60
wifi_scan -p 600 -b 30:ae:a4:80:16:3c Scan devices with BSSID 30:ae:a4:80:16:3c and set passive scan time 600 ms every channel
3. Ping command
Note
------------------ -------------------------------------------------- -------------------------------------------------
Command definition ping <host> -W <t> -i <t> -s <n> -c <n> -Q <n>
Command ping host -w -i -s -c -Q Send ICMP ECHO_REQUEST to network hosts
Parameter host Host address
-w or --timeout Time to wait for a response, in seconds
-i or --interval Wait interval seconds between sending each packet
-s or --size Specify the number of data bytes to be sent
-c or --count Stop after sending count packets
-Q or --tos Set Type of service related bits in IP datagrams
Example ping 192.168.0.1 Ping host address 192.168.0.1

ESP-NOW Command

  1. Scan | | | Note |

| ------------------ | ----------------------------------------------------------- | ---------------------------------------------- | | Command definition | scan <addr (xx:xx:xx:xx:xx:xx)> -a -r <rssi (-120 ~ 0)> | | | Command | scan <addr> -a -r | Find devices that support ESP-NOW debug | | Parameter | <addr> | MAC of the monitored device | | | -a or --all | Full channel scan | | | -r or --rssi | Filter devices by RSSI | | Example | scan -a | Scan all devices in all channel | | | scan -r -60 | Scan devices with RSSI signal value within -60 | | | scan 30:ae:a4:80:16:3c | Scan devices with BSSID 30:ae:a4:80:16:3c | 2. Provisioning

Note
Command definition provisioning -er -i <beacon_time(s)> <ap_ssid> <app_password>
Command provisioning -e -r -i Provisioning
Parameter -e or --erase Reset WiFi provisioning information and restart
-r or --responder Responder devices start provisioning
-i or --initiator Set provisioning beacon time
ap_ssid ap_password Configure network for devices
Example provisioning -e Reset WiFi provisioning information and restart
provisioning -r Responder devices start provisioning
provisioning -i 30000 myssid mypassword Send provisioning beacon for 30 s and send WiFi configuration to responder devices
3. Control
Note
------------------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------
Command definition control -lasC -b <initiator_attribute> -u <initiator_attribute> -c <initiator_attribute> -m <addr (xx:xx:xx:xx:xx:xx)> -t <responder_attribute> -v <responder_value> -b <count> -t <count> -r <rssi>
Command control -lasC -b -u -c -m -t -v -b -t -r Control devices by esp-now command
Parameter -l or --list Get device binding list
-a or --ack Wait for the receiving device to return ack
-s or --filter_weak_signal Discard packets which rssi is lower than forward_rssi
-C or --filter_adjacent_channel Discard packets from adjacent channels
-b or --bind Binding with response device
-u or --unbind Unbinding with response device
-c or --command Control command to bound device
-m or --mac MAC of the monitored device
-t or --responder_attribute Responder's attribute
-v or --responder_value Responder's value
-b or --broadcast Broadcast packet
-t or --forward_ttl Number of hops in data transfer
-r or --forward_rssi Discard packet which rssi is lower than forward_rssi
Example control -b 0x200 Bind device, initiator_attribute: 512
control -u 0x200 Unbind device, initiator_attribute: 512
control -c 0x200 -t 0x1 -v 0 Send control command,initiator_attribute: 512, set responder_attribute: 1, responder_value: 0
control -c 0x200 -t 0x101 -v 100 Send control command,initiator_attribute: 512, set responder_attribute: 257, responder_value: 100
4. OTA
Note
------------------ -------------------------------------------------------------------------- --------------------------------------------
Command definition ota -d <url> -f <wait_tick> -s <xx:xx:xx:xx:xx:xx>,<xx:xx:xx:xx:xx:xx>
Command ota -d -f -s Firmware update
Parameter -d or --download Firmware Download url
-f or --find Find upgradeable devices
-s or --send Send firmware to selected device
Example ota -d http://192.168.0.3:8070/hello-world.bin Download Firmware
ota -f 3000 Find upgradeable devices for no more than 3s
ota -s 30:ae:a4:80:16:3c Send firmware to 30:ae:a4:80:16:3c
5. Configuration
Note
------------------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------------
Command definition espnow_config -i -c <channel (1 ~ 13)> -r <rate (wifi_phy_rate_t)> -t <tx_power (8, 84)> -p <protocol_bitmap[1, 2, 4, 8]> -C <country_code ('CN', 'JP, 'US')>
Command espnow_config -i -c -r -t -p -C ESP-NOW configuration
Parameter -i or --info Print all configuration information
-c or --channel Channel of ESP-NOW
-r or --rate Wi-Fi PHY rate encodings
-t or --tx_power Set maximum transmitting power after WiFi start
-p or --protocol Set protocol type of specified interface
-C or --country_code Set the current country code
Example espnow_config -i
espnow_config -r 0x0B Config ESPNOW data rate 6 Mbps
6. Iperf
Note
------------------ ------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------
Command definition espnow_iperf -spga -c <responder (xx:xx:xx:xx:xx:xx)> -i <interval (sec)> -l <len (Bytes)> -t <time (sec)> -b <count>
Command espnow_iperf -spga -c -i -l -t -b ESP-NOW iperf
Parameter -s or --responder Run in responder mode, receive from throughput or ping
-p or --ping Run in ping mode, send to responder
-g or --group Send a package to a group
-a or --abort Abort running espnow-iperf
-c or --initiator Run in initiator mode, ping to<responder>
-i or --interval Seconds between periodic bandwidth reports (default 3 secs)
-l or --len Length of buffer in bytes to read or write (Defaults: 230 Bytes)
-t or --time Time in seconds to transmit for (default 10 secs)
-b or --roadcast Send package by broadcast
Example espnow_iperf -s Run in responder mode
espnow_iperf -c 30:ae:a4:80:16:3c Send iperf packages to responder mac

Command Command

  1. Command | | | Note |

| ------------------ | ----------------------------------------------------------------------------- | ---------------------------------------------------- | | Command definition | command -a <addr_list (xx:xx:xx:xx:xx:xx,xx:xx:xx:xx:xx:xx)> <"Command"> | | | Command | command addr_list "Command" | Let the console command run on the monitoring device | | Parameter | -a or --channel_all | Send packets on all channels | | | addr_list | Device MAC address | | | "Command" | The command to be executed on a specific device | | Example | command 30:ae:a4:80:16:3c "help" | Run help command on device 30:ae:a4:80:16:3c |

Other Command

  • help: prints all currently supported commands.

Web Server

The function is disabled by default. If you want to use the function, please follow the steps.

  • Open Web server under Example Configuration Options:
    • Set Enable WebServer for ESP-NOW debug to y, default is n.
    • Set mDNS Host Name, default is espnow-webserver
    • Set WiFi SoftAP SSID, default is espnow-webserver
    • Set Website mount point in VFS, default is /www
  • Connect PC or phone to Wi-Fi SoftAP
  • Open url http://espnow-webserver in web browser, and customer can debug devices through the web browser, like getting all devices log and status, controlling or upgrading the monitored devices.

Post monitored device log to HTTP server

The function is disabled by default. If you want to use the function, please follow the steps.

  1. Run HTTP server with follow command or start TCP server on PC or phone.

Shell

python -m http.server 8070
  1. Configure the devices with idf.py menuconfig under Example Configuration Options:
    • Set Post flash log to HTTP server to y.
    • Set the server URL Flash log URL endpoint
  2. Build & flash & Run the device, connect the device to the Router (Access-Point) by WiFi command or provision command.

After the device connected to the Router (Access-Point), it will post log to the HTTP server.

Note:

  1. ESP32 and phone should be connected to the same router, so that data information can be collected on the network assistant tool.

Note

  1. Impact on Performance. Since ESP-NOW uses a Wi-Fi interface to send and receive data packages, delay may occur in receiving commands or in data transmission if there is a large amount of data to be transmitted among ESP-NOW devices. By testing in a good network, we provide the following thresholds, and with such configuration parameters, the delay caused to devices is negligible.

    • Fifty ESP-NOW devices (The more the devices, the worse the network.)
    • Set logging level to info (The lower the level, the worse the network may be.)
  2. It should also be noted that when using a new chip for burning, the chip needs to be erased and then burned.

  3. The log_info area is added to the partition table in this example as a space to save logs. The chip needs to be erased before programming.

  4. The head of the data is a timestamp. It is just an experiment and there is no real-time calibration. It can be modified according to the user's own needs.

  5. Get the status of log mode uart, flash, espnow in the console command log -i. The console command can't be used to disable the log configuration, because the main program has been forced to be enabled. If the user do not want to use such a function, the main program can be disable.

    Plaintext

    // espnow_log_init(&log_config);
    

To create a project from this example, run:

idf.py create-project-from-example "espressif/esp-now=2.5.2:wireless_debug"

or download archive (~380.61 KB)