|
@@ -1,30 +1,115 @@
|
|
|
# ESPNOW Example
|
|
# ESPNOW Example
|
|
|
|
|
|
|
|
-This example shows how to use ESPNOW of wifi. Example does the following steps:
|
|
|
|
|
-
|
|
|
|
|
-1. Start WiFi.
|
|
|
|
|
-
|
|
|
|
|
-2. Initialize ESPNOW.
|
|
|
|
|
|
|
+(See the README.md file in the upper level 'examples' directory for more information about examples.)
|
|
|
|
|
|
|
|
-3. Register ESPNOW sending or receiving callback function.
|
|
|
|
|
|
|
+This example shows how to use ESPNOW of wifi. Example does the following steps:
|
|
|
|
|
|
|
|
-4. Add ESPNOW peer information.
|
|
|
|
|
|
|
+* Start WiFi.
|
|
|
|
|
+* Initialize ESPNOW.
|
|
|
|
|
+* Register ESPNOW sending or receiving callback function.
|
|
|
|
|
+* Add ESPNOW peer information.
|
|
|
|
|
+* Send and receive ESPNOW data.
|
|
|
|
|
|
|
|
-5. Send and receive ESPNOW data.
|
|
|
|
|
|
|
+This example need at least two ESP devices:
|
|
|
|
|
|
|
|
-In order to get the MAC address of the other device, firstly send broadcast ESPNOW data to each other with 'state' set as 0. When receiving
|
|
|
|
|
-broadcast ESPNOW data with 'state' as 0, add the device from which the data comes to the peer list. Then start sending broadcast ESPNOW
|
|
|
|
|
-data with 'state' set as 1. When receiving broadcast ESPNOW data with 'state' as 1, compare the local magic number with that in the data.
|
|
|
|
|
-If the local one is bigger than that one, stop sending broadcast ESPNOW data and start sending unicast ESPNOW data. If receive unicast
|
|
|
|
|
-ESPNOW data, also stop sending broadcast ESPNOW data. That is what happens in this example. It shows how to send/receive broadcast/unicast
|
|
|
|
|
-ESPNOW data. In practice, if the MAC address of the other device is known, it's not required to send/receive broadcast ESPNOW data first,
|
|
|
|
|
-just add the device to the peer list and send/receive unicast ESPNOW data.
|
|
|
|
|
|
|
+* In order to get the MAC address of the other device, Device1 firstly send broadcast ESPNOW data with 'state' set as 0.
|
|
|
|
|
+* When Device2 receiving broadcast ESPNOW data from Device1 with 'state' as 0, adds Device1 into the peer list.
|
|
|
|
|
+ Then start sending broadcast ESPNOW data with 'state' set as 1.
|
|
|
|
|
+* When Device1 receiving broadcast ESPNOW data with 'state' as 1, compares the local magic number with that in the data.
|
|
|
|
|
+ If the local one is bigger than that one, stop sending broadcast ESPNOW data and starts sending unicast ESPNOW data to Device2.
|
|
|
|
|
+* If Device2 receives unicast ESPNOW data, also stop sending broadcast ESPNOW data.
|
|
|
|
|
+
|
|
|
|
|
+In practice, if the MAC address of the other device is known, it's not required to send/receive broadcast ESPNOW data first,
|
|
|
|
|
+just add the device into the peer list and send/receive unicast ESPNOW data.
|
|
|
|
|
|
|
|
There are a lot of "extras" on top of ESPNOW data, such as type, state, sequence number, CRC and magic in this example. These "extras" are
|
|
There are a lot of "extras" on top of ESPNOW data, such as type, state, sequence number, CRC and magic in this example. These "extras" are
|
|
|
not required to use ESPNOW. They are only used to make this example to run correctly. However, it is recommended that users add some "extras"
|
|
not required to use ESPNOW. They are only used to make this example to run correctly. However, it is recommended that users add some "extras"
|
|
|
to make ESPNOW data more safe and more reliable.
|
|
to make ESPNOW data more safe and more reliable.
|
|
|
|
|
|
|
|
-*Note:* The two devices can be set as either station or softap or station+softap mode. If the receiving device is in station mode only
|
|
|
|
|
-and it connects to an AP, modem sleep should be disabled.
|
|
|
|
|
|
|
+## How to use example
|
|
|
|
|
+
|
|
|
|
|
+### Configure the project
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+make menuconfig
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+* Set serial port under Serial Flasher Options.
|
|
|
|
|
+* Set WiFi mode (station or SoftAP) under Example Configuration Options.
|
|
|
|
|
+* Set ESPNOW primary master key under Example Configuration Options.
|
|
|
|
|
+ This parameter must be set to the same value for sending and recving devices.
|
|
|
|
|
+* Set ESPNOW local master key under Example Configuration Options.
|
|
|
|
|
+ This parameter must be set to the same value for sending and recving devices.
|
|
|
|
|
+* Set Channel under Example Configuration Options.
|
|
|
|
|
+ The sending device and the recving device must be on the same channel.
|
|
|
|
|
+* Set Send count and Send delay under Example Configuration Options.
|
|
|
|
|
+* Set Send len under Example Configuration Options.
|
|
|
|
|
+
|
|
|
|
|
+### Build and Flash
|
|
|
|
|
+
|
|
|
|
|
+Build the project and flash it to the board, then run monitor tool to view serial output:
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+make -j4 flash monitor
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+(To exit the serial monitor, type ``Ctrl-]``.)
|
|
|
|
|
+
|
|
|
|
|
+See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects.
|
|
|
|
|
+
|
|
|
|
|
+## Example Output
|
|
|
|
|
+
|
|
|
|
|
+Here is the example of ESPNOW receiving device console output.
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+I (898) phy: phy_version: 3960, 5211945, Jul 18 2018, 10:40:07, 0, 0
|
|
|
|
|
+I (898) wifi: mode : sta (30:ae:a4:80:45:68)
|
|
|
|
|
+I (898) espnow_example: WiFi started
|
|
|
|
|
+I (898) ESPNOW: espnow [version: 1.0] init
|
|
|
|
|
+I (5908) espnow_example: Start sending broadcast data
|
|
|
|
|
+I (6908) espnow_example: send data to ff:ff:ff:ff:ff:ff
|
|
|
|
|
+I (7908) espnow_example: send data to ff:ff:ff:ff:ff:ff
|
|
|
|
|
+I (52138) espnow_example: send data to ff:ff:ff:ff:ff:ff
|
|
|
|
|
+I (52138) espnow_example: Receive 0th broadcast data from: 30:ae:a4:0c:34:ec, len: 200
|
|
|
|
|
+I (53158) espnow_example: send data to ff:ff:ff:ff:ff:ff
|
|
|
|
|
+I (53158) espnow_example: Receive 1th broadcast data from: 30:ae:a4:0c:34:ec, len: 200
|
|
|
|
|
+I (54168) espnow_example: send data to ff:ff:ff:ff:ff:ff
|
|
|
|
|
+I (54168) espnow_example: Receive 2th broadcast data from: 30:ae:a4:0c:34:ec, len: 200
|
|
|
|
|
+I (54168) espnow_example: Receive 0th unicast data from: 30:ae:a4:0c:34:ec, len: 200
|
|
|
|
|
+I (54678) espnow_example: Receive 1th unicast data from: 30:ae:a4:0c:34:ec, len: 200
|
|
|
|
|
+I (55668) espnow_example: Receive 2th unicast data from: 30:ae:a4:0c:34:ec, len: 200
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+Here is the example of ESPNOW sending device console output.
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+I (915) phy: phy_version: 3960, 5211945, Jul 18 2018, 10:40:07, 0, 0
|
|
|
|
|
+I (915) wifi: mode : sta (30:ae:a4:0c:34:ec)
|
|
|
|
|
+I (915) espnow_example: WiFi started
|
|
|
|
|
+I (915) ESPNOW: espnow [version: 1.0] init
|
|
|
|
|
+I (5915) espnow_example: Start sending broadcast data
|
|
|
|
|
+I (5915) espnow_example: Receive 41th broadcast data from: 30:ae:a4:80:45:68, len: 200
|
|
|
|
|
+I (5915) espnow_example: Receive 42th broadcast data from: 30:ae:a4:80:45:68, len: 200
|
|
|
|
|
+I (5925) espnow_example: Receive 44th broadcast data from: 30:ae:a4:80:45:68, len: 200
|
|
|
|
|
+I (5935) espnow_example: Receive 45th broadcast data from: 30:ae:a4:80:45:68, len: 200
|
|
|
|
|
+I (6965) espnow_example: send data to ff:ff:ff:ff:ff:ff
|
|
|
|
|
+I (6965) espnow_example: Receive 46th broadcast data from: 30:ae:a4:80:45:68, len: 200
|
|
|
|
|
+I (7975) espnow_example: send data to ff:ff:ff:ff:ff:ff
|
|
|
|
|
+I (7975) espnow_example: Receive 47th broadcast data from: 30:ae:a4:80:45:68, len: 200
|
|
|
|
|
+I (7975) espnow_example: Start sending unicast data
|
|
|
|
|
+I (7975) espnow_example: send data to 30:ae:a4:80:45:68
|
|
|
|
|
+I (9015) espnow_example: send data to 30:ae:a4:80:45:68
|
|
|
|
|
+I (9015) espnow_example: Receive 48th broadcast data from: 30:ae:a4:80:45:68, len: 200
|
|
|
|
|
+I (10015) espnow_example: send data to 30:ae:a4:80:45:68
|
|
|
|
|
+I (16075) espnow_example: send data to 30:ae:a4:80:45:68
|
|
|
|
|
+I (17075) espnow_example: send data to 30:ae:a4:80:45:68
|
|
|
|
|
+I (24125) espnow_example: send data to 30:ae:a4:80:45:68
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## Troubleshooting
|
|
|
|
|
+
|
|
|
|
|
+If ESPNOW data can not be received from another device, maybe the two devices are not
|
|
|
|
|
+on the same channel or the primary key and local key are different.
|
|
|
|
|
|
|
|
-More info in the code [espnow_example_main.c](./main/espnow_example_main.c).
|
|
|
|
|
|
|
+In real application, if the receiving device is in station mode only and it connects to an AP,
|
|
|
|
|
+modem sleep should be disabled. Otherwise, it may fail to revceive ESPNOW data from other devices.
|