README.md
1# ESPNOW Example
2
3(See the README.md file in the upper level 'examples' directory for more information about examples.)
4
5This example shows how to use ESPNOW of wifi. Example does the following steps:
6
7* Start WiFi.
8* Initialize ESPNOW.
9* Register ESPNOW sending or receiving callback function.
10* Add ESPNOW peer information.
11* Send and receive ESPNOW data.
12
13This example need at least two ESP devices:
14
15* In order to get the MAC address of the other device, Device1 firstly send broadcast ESPNOW data with 'state' set as 0.
16* When Device2 receiving broadcast ESPNOW data from Device1 with 'state' as 0, adds Device1 into the peer list.
17 Then start sending broadcast ESPNOW data with 'state' set as 1.
18* When Device1 receiving broadcast ESPNOW data with 'state' as 1, compares the local magic number with that in the data.
19 If the local one is bigger than that one, stop sending broadcast ESPNOW data and starts sending unicast ESPNOW data to Device2.
20* If Device2 receives unicast ESPNOW data, also stop sending broadcast ESPNOW data.
21
22In practice, if the MAC address of the other device is known, it's not required to send/receive broadcast ESPNOW data first,
23just add the device into the peer list and send/receive unicast ESPNOW data.
24
25There 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
26not required to use ESPNOW. They are only used to make this example to run correctly. However, it is recommended that users add some "extras"
27to make ESPNOW data more safe and more reliable.
28
29## How to use example
30
31### Configure the project
32
33```
34idf.py menuconfig
35```
36
37* Set WiFi mode (station or SoftAP) under Example Configuration Options.
38* Set ESPNOW primary master key under Example Configuration Options.
39 This parameter must be set to the same value for sending and recving devices.
40* Set ESPNOW local master key under Example Configuration Options.
41 This parameter must be set to the same value for sending and recving devices.
42* Set Channel under Example Configuration Options.
43 The sending device and the recving device must be on the same channel.
44* Set Send count and Send delay under Example Configuration Options.
45* Set Send len under Example Configuration Options.
46* Set Enable Long Range Options.
47 When this parameter is enabled, the ESP32 device will send data at the PHY rate of 512Kbps or 256Kbps
48 then the data can be transmitted over long range between two ESP32 devices.
49
50### Build and Flash
51
52Build the project and flash it to the board, then run monitor tool to view serial output:
53
54```
55idf.py -p PORT flash monitor
56```
57
58(To exit the serial monitor, type ``Ctrl-]``.)
59
60See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects.
61
62## Example Output
63
64Here is the example of ESPNOW receiving device console output.
65
66```
67I (898) phy: phy_version: 3960, 5211945, Jul 18 2018, 10:40:07, 0, 0
68I (898) wifi: mode : sta (30:ae:a4:80:45:68)
69I (898) espnow_example: WiFi started
70I (898) ESPNOW: espnow [version: 1.0] init
71I (5908) espnow_example: Start sending broadcast data
72I (6908) espnow_example: send data to ff:ff:ff:ff:ff:ff
73I (7908) espnow_example: send data to ff:ff:ff:ff:ff:ff
74I (52138) espnow_example: send data to ff:ff:ff:ff:ff:ff
75I (52138) espnow_example: Receive 0th broadcast data from: 30:ae:a4:0c:34:ec, len: 200
76I (53158) espnow_example: send data to ff:ff:ff:ff:ff:ff
77I (53158) espnow_example: Receive 1th broadcast data from: 30:ae:a4:0c:34:ec, len: 200
78I (54168) espnow_example: send data to ff:ff:ff:ff:ff:ff
79I (54168) espnow_example: Receive 2th broadcast data from: 30:ae:a4:0c:34:ec, len: 200
80I (54168) espnow_example: Receive 0th unicast data from: 30:ae:a4:0c:34:ec, len: 200
81I (54678) espnow_example: Receive 1th unicast data from: 30:ae:a4:0c:34:ec, len: 200
82I (55668) espnow_example: Receive 2th unicast data from: 30:ae:a4:0c:34:ec, len: 200
83```
84
85Here is the example of ESPNOW sending device console output.
86
87```
88I (915) phy: phy_version: 3960, 5211945, Jul 18 2018, 10:40:07, 0, 0
89I (915) wifi: mode : sta (30:ae:a4:0c:34:ec)
90I (915) espnow_example: WiFi started
91I (915) ESPNOW: espnow [version: 1.0] init
92I (5915) espnow_example: Start sending broadcast data
93I (5915) espnow_example: Receive 41th broadcast data from: 30:ae:a4:80:45:68, len: 200
94I (5915) espnow_example: Receive 42th broadcast data from: 30:ae:a4:80:45:68, len: 200
95I (5925) espnow_example: Receive 44th broadcast data from: 30:ae:a4:80:45:68, len: 200
96I (5935) espnow_example: Receive 45th broadcast data from: 30:ae:a4:80:45:68, len: 200
97I (6965) espnow_example: send data to ff:ff:ff:ff:ff:ff
98I (6965) espnow_example: Receive 46th broadcast data from: 30:ae:a4:80:45:68, len: 200
99I (7975) espnow_example: send data to ff:ff:ff:ff:ff:ff
100I (7975) espnow_example: Receive 47th broadcast data from: 30:ae:a4:80:45:68, len: 200
101I (7975) espnow_example: Start sending unicast data
102I (7975) espnow_example: send data to 30:ae:a4:80:45:68
103I (9015) espnow_example: send data to 30:ae:a4:80:45:68
104I (9015) espnow_example: Receive 48th broadcast data from: 30:ae:a4:80:45:68, len: 200
105I (10015) espnow_example: send data to 30:ae:a4:80:45:68
106I (16075) espnow_example: send data to 30:ae:a4:80:45:68
107I (17075) espnow_example: send data to 30:ae:a4:80:45:68
108I (24125) espnow_example: send data to 30:ae:a4:80:45:68
109```
110
111## Troubleshooting
112
113If ESPNOW data can not be received from another device, maybe the two devices are not
114on the same channel or the primary key and local key are different.
115
116In real application, if the receiving device is in station mode only and it connects to an AP,
117modem sleep should be disabled. Otherwise, it may fail to revceive ESPNOW data from other devices.
118