【FireBeetle 2 ESP32 C6】espnow 测试1
<div class='showpostmsg'> 本帖最后由 dcexpert 于 2024-5-24 08:47 编辑<p>ESP32除了支持 wifi 外,还支持乐鑫私有的 espnow 协议。按照官方解释:“<span style="color:#8e44ad;">ESP-NOW 是一种基于数据链路层的无线通信协议,能够在没有路由器的情况下直接、快速、低功耗地控制智能设备,支持 Wi-Fi 和 Bluetooth LE 共存。ESP-NOW是基于数据链路层的无线通信协议,它将五层 OSI 上层协议精简为一层,数据传输时无需依次经过网络层、传输层、会话层、表示层、应用层等复杂的层级,也无需层层增加包头和解包,大大缓解了网络拥挤时因为丢包而导致的卡顿和延迟,拥有更高的响应速度。</span>”</p>
<p> </p>
<p><strong>特点:</strong></p>
<ul>
<li>最多 20 个注册配对设备之间的直接通信,无需无线接入点(AP)。</li>
<li>支持加密和未加密通信(最多 6 个加密的配对设备)。</li>
<li>消息大小多达 250 字节。</li>
<li>可以在 ESP32 和 ESP8266 设备上与 Wifi(network.WLAN)同时操作。</li>
</ul>
<p> </p>
<p>按官方的例程,使用espnow是非常容易的。先准备两个esp32开发板,除了FireBeetle 2 ESP32 C6外,还需要另外一个esp32,大部分型号都可以,注意先将固件更新,旧版本固件是不支持espnow功能的。其次还需要检查一下usb供电是否足够,因为开启wifi功能后功耗会增加,如果供电不足就会造成芯片复位。</p>
<p> </p>
<p>先在一个板子上输入接收端程序:</p>
<p> </p>
<pre>
<code class="language-python">import network
import espnow
# WLAN接口必须处于活动状态才能 send()/recv()
sta = network.WLAN(network.STA_IF)
sta.active(True)
sta.disconnect() # 因为 ESP8266 会自动连接到最后的接入点
e = espnow.ESPNow()
e.active(True)
while True:
host, msg = e.recv()
if msg: # 如果 recv() 超时 msg == None
print(host, msg)
if msg == b'end':
break</code></pre>
<p> </p>
<p>然后在另外一个板子上输入发送端程序</p>
<p> </p>
<pre>
<code class="language-python">import network
import espnow
# WLAN接口必须处于活动状态才能 send()/recv()
sta = network.WLAN(network.STA_IF) # 或 network.AP_IF
sta.active(True)
sta.disconnect() # 对于 ESP8266
e = espnow.ESPNow()
e.active(True)
peer = b'\xbb\xbb\xbb\xbb\xbb\xbb' # 配对设备wifi接口的MAC地址
e.add_peer(peer) # 发送前必须 add_peer()
e.send(peer, "Starting...")
for i in range(100):
e.send(peer, str(i)*20, True)
e.send(peer, b'end')</code></pre>
<p> </p>
<p>运行后,在接收端就会收到数据</p>
<p> </p>
<pre>
<code>b'T2\x04\x0b.\x1c' b'Starting...'
b'T2\x04\x0b.\x1c' b'00000000000000000000'
b'T2\x04\x0b.\x1c' b'11111111111111111111'
b'T2\x04\x0b.\x1c' b'22222222222222222222'
b'T2\x04\x0b.\x1c' b'33333333333333333333'
b'T2\x04\x0b.\x1c' b'44444444444444444444'
b'T2\x04\x0b.\x1c' b'55555555555555555555'
b'T2\x04\x0b.\x1c' b'66666666666666666666'
b'T2\x04\x0b.\x1c' b'77777777777777777777'
b'T2\x04\x0b.\x1c' b'88888888888888888888'
b'T2\x04\x0b.\x1c' b'99999999999999999999'
b'T2\x04\x0b.\x1c' b'1010101010101010101010101010101010101010'
b'T2\x04\x0b.\x1c' b'1111111111111111111111111111111111111111'
b'T2\x04\x0b.\x1c' b'1212121212121212121212121212121212121212'
b'T2\x04\x0b.\x1c' b'1313131313131313131313131313131313131313'
b'T2\x04\x0b.\x1c' b'1414141414141414141414141414141414141414'
b'T2\x04\x0b.\x1c' b'1515151515151515151515151515151515151515'
b'T2\x04\x0b.\x1c' b'2020202020202020202020202020202020202020'
b'T2\x04\x0b.\x1c' b'2121212121212121212121212121212121212121'
b'T2\x04\x0b.\x1c' b'2424242424242424242424242424242424242424'
b'T2\x04\x0b.\x1c' b'3030303030303030303030303030303030303030'
b'T2\x04\x0b.\x1c' b'3131313131313131313131313131313131313131'
b'T2\x04\x0b.\x1c' b'3434343434343434343434343434343434343434'
b'T2\x04\x0b.\x1c' b'3535353535353535353535353535353535353535'
b'T2\x04\x0b.\x1c' b'4040404040404040404040404040404040404040'
b'T2\x04\x0b.\x1c' b'4141414141414141414141414141414141414141'
b'T2\x04\x0b.\x1c' b'4646464646464646464646464646464646464646'
b'T2\x04\x0b.\x1c' b'5454545454545454545454545454545454545454'
b'T2\x04\x0b.\x1c' b'5555555555555555555555555555555555555555'
b'T2\x04\x0b.\x1c' b'6262626262626262626262626262626262626262'
b'T2\x04\x0b.\x1c' b'6363636363636363636363636363636363636363'
b'T2\x04\x0b.\x1c' b'7070707070707070707070707070707070707070'
b'T2\x04\x0b.\x1c' b'7171717171717171717171717171717171717171'
b'T2\x04\x0b.\x1c' b'7878787878787878787878787878787878787878'
b'T2\x04\x0b.\x1c' b'7979797979797979797979797979797979797979'
b'T2\x04\x0b.\x1c' b'8686868686868686868686868686868686868686'
b'T2\x04\x0b.\x1c' b'9494949494949494949494949494949494949494'
b'T2\x04\x0b.\x1c' b'9595959595959595959595959595959595959595'
b'T2\x04\x0b.\x1c' b'9797979797979797979797979797979797979797'
b'T2\x04\x0b.\x1c' b'9898989898989898989898989898989898989898'
b'T2\x04\x0b.\x1c' b'end'</code></pre>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>从接收数据看,丢失了很多数据,这是因为发送太快,加上接收端使用了 print 打印数据也占用了不少时间。将程序稍微修改一下:</p>
<p> </p>
<p>发送时插入延时</p>
<pre>
<code class="language-python">def esend(n=100, l=20, d=10):
e.send(peer, "Starting...")
for i in range(100):
e.send(peer, str(i)*l, True)
time.sleep_ms(d)
e.send(peer, b'end')</code></pre>
<p> </p>
<p>接收完再打印数据</p>
<pre>
<code class="language-python">def erecv():
cnt = 0
dat = ''
while True:
host, msg = e.recv()
if msg: # 如果 recv() 超时 msg == None
#print(host, msg)
#dat+='{} {} {}\n'.format(cnt, host, msg)
cnt+=1
if msg == b'end':
break
print(dat)
print(cnt)</code></pre>
<p> </p>
<p>这次收到数据就完整了</p>
<p> </p>
<pre>
<code>0 b'T2\x04\x0b.\x1c' b'Starting...'
1 b'T2\x04\x0b.\x1c' b'00000000000000000000'
2 b'T2\x04\x0b.\x1c' b'11111111111111111111'
3 b'T2\x04\x0b.\x1c' b'22222222222222222222'
4 b'T2\x04\x0b.\x1c' b'33333333333333333333'
5 b'T2\x04\x0b.\x1c' b'44444444444444444444'
6 b'T2\x04\x0b.\x1c' b'55555555555555555555'
7 b'T2\x04\x0b.\x1c' b'66666666666666666666'
8 b'T2\x04\x0b.\x1c' b'77777777777777777777'
9 b'T2\x04\x0b.\x1c' b'88888888888888888888'
10 b'T2\x04\x0b.\x1c' b'99999999999999999999'
11 b'T2\x04\x0b.\x1c' b'1010101010101010101010101010101010101010'
12 b'T2\x04\x0b.\x1c' b'1111111111111111111111111111111111111111'
13 b'T2\x04\x0b.\x1c' b'1212121212121212121212121212121212121212'
14 b'T2\x04\x0b.\x1c' b'1313131313131313131313131313131313131313'
15 b'T2\x04\x0b.\x1c' b'1414141414141414141414141414141414141414'
16 b'T2\x04\x0b.\x1c' b'1515151515151515151515151515151515151515'
17 b'T2\x04\x0b.\x1c' b'1616161616161616161616161616161616161616'
18 b'T2\x04\x0b.\x1c' b'1717171717171717171717171717171717171717'
19 b'T2\x04\x0b.\x1c' b'1818181818181818181818181818181818181818'
20 b'T2\x04\x0b.\x1c' b'1919191919191919191919191919191919191919'
21 b'T2\x04\x0b.\x1c' b'2020202020202020202020202020202020202020'
22 b'T2\x04\x0b.\x1c' b'2121212121212121212121212121212121212121'
23 b'T2\x04\x0b.\x1c' b'2222222222222222222222222222222222222222'
24 b'T2\x04\x0b.\x1c' b'2323232323232323232323232323232323232323'
25 b'T2\x04\x0b.\x1c' b'2424242424242424242424242424242424242424'
26 b'T2\x04\x0b.\x1c' b'2525252525252525252525252525252525252525'
27 b'T2\x04\x0b.\x1c' b'2626262626262626262626262626262626262626'
28 b'T2\x04\x0b.\x1c' b'2727272727272727272727272727272727272727'
29 b'T2\x04\x0b.\x1c' b'2828282828282828282828282828282828282828'
30 b'T2\x04\x0b.\x1c' b'2929292929292929292929292929292929292929'
31 b'T2\x04\x0b.\x1c' b'3030303030303030303030303030303030303030'
32 b'T2\x04\x0b.\x1c' b'3131313131313131313131313131313131313131'
33 b'T2\x04\x0b.\x1c' b'3232323232323232323232323232323232323232'
34 b'T2\x04\x0b.\x1c' b'3333333333333333333333333333333333333333'
35 b'T2\x04\x0b.\x1c' b'3434343434343434343434343434343434343434'
36 b'T2\x04\x0b.\x1c' b'3535353535353535353535353535353535353535'
37 b'T2\x04\x0b.\x1c' b'3636363636363636363636363636363636363636'
38 b'T2\x04\x0b.\x1c' b'3737373737373737373737373737373737373737'
39 b'T2\x04\x0b.\x1c' b'3838383838383838383838383838383838383838'
40 b'T2\x04\x0b.\x1c' b'3939393939393939393939393939393939393939'
41 b'T2\x04\x0b.\x1c' b'4040404040404040404040404040404040404040'
42 b'T2\x04\x0b.\x1c' b'4141414141414141414141414141414141414141'
43 b'T2\x04\x0b.\x1c' b'4242424242424242424242424242424242424242'
44 b'T2\x04\x0b.\x1c' b'4343434343434343434343434343434343434343'
45 b'T2\x04\x0b.\x1c' b'4444444444444444444444444444444444444444'
46 b'T2\x04\x0b.\x1c' b'4545454545454545454545454545454545454545'
47 b'T2\x04\x0b.\x1c' b'4646464646464646464646464646464646464646'
48 b'T2\x04\x0b.\x1c' b'4747474747474747474747474747474747474747'
49 b'T2\x04\x0b.\x1c' b'4848484848484848484848484848484848484848'
50 b'T2\x04\x0b.\x1c' b'4949494949494949494949494949494949494949'
51 b'T2\x04\x0b.\x1c' b'5050505050505050505050505050505050505050'
52 b'T2\x04\x0b.\x1c' b'5151515151515151515151515151515151515151'
53 b'T2\x04\x0b.\x1c' b'5252525252525252525252525252525252525252'
54 b'T2\x04\x0b.\x1c' b'5353535353535353535353535353535353535353'
55 b'T2\x04\x0b.\x1c' b'5454545454545454545454545454545454545454'
56 b'T2\x04\x0b.\x1c' b'5555555555555555555555555555555555555555'
57 b'T2\x04\x0b.\x1c' b'5656565656565656565656565656565656565656'
58 b'T2\x04\x0b.\x1c' b'5757575757575757575757575757575757575757'
59 b'T2\x04\x0b.\x1c' b'5858585858585858585858585858585858585858'
60 b'T2\x04\x0b.\x1c' b'5959595959595959595959595959595959595959'
61 b'T2\x04\x0b.\x1c' b'6060606060606060606060606060606060606060'
62 b'T2\x04\x0b.\x1c' b'6161616161616161616161616161616161616161'
63 b'T2\x04\x0b.\x1c' b'6262626262626262626262626262626262626262'
64 b'T2\x04\x0b.\x1c' b'6363636363636363636363636363636363636363'
65 b'T2\x04\x0b.\x1c' b'6464646464646464646464646464646464646464'
66 b'T2\x04\x0b.\x1c' b'6565656565656565656565656565656565656565'
67 b'T2\x04\x0b.\x1c' b'6666666666666666666666666666666666666666'
68 b'T2\x04\x0b.\x1c' b'6767676767676767676767676767676767676767'
69 b'T2\x04\x0b.\x1c' b'6868686868686868686868686868686868686868'
70 b'T2\x04\x0b.\x1c' b'6969696969696969696969696969696969696969'
71 b'T2\x04\x0b.\x1c' b'7070707070707070707070707070707070707070'
72 b'T2\x04\x0b.\x1c' b'7171717171717171717171717171717171717171'
73 b'T2\x04\x0b.\x1c' b'7272727272727272727272727272727272727272'
74 b'T2\x04\x0b.\x1c' b'7373737373737373737373737373737373737373'
75 b'T2\x04\x0b.\x1c' b'7474747474747474747474747474747474747474'
76 b'T2\x04\x0b.\x1c' b'7575757575757575757575757575757575757575'
77 b'T2\x04\x0b.\x1c' b'7676767676767676767676767676767676767676'
78 b'T2\x04\x0b.\x1c' b'7777777777777777777777777777777777777777'
79 b'T2\x04\x0b.\x1c' b'7878787878787878787878787878787878787878'
80 b'T2\x04\x0b.\x1c' b'7979797979797979797979797979797979797979'
81 b'T2\x04\x0b.\x1c' b'8080808080808080808080808080808080808080'
82 b'T2\x04\x0b.\x1c' b'8181818181818181818181818181818181818181'
83 b'T2\x04\x0b.\x1c' b'8282828282828282828282828282828282828282'
84 b'T2\x04\x0b.\x1c' b'8383838383838383838383838383838383838383'
85 b'T2\x04\x0b.\x1c' b'8484848484848484848484848484848484848484'
86 b'T2\x04\x0b.\x1c' b'8585858585858585858585858585858585858585'
87 b'T2\x04\x0b.\x1c' b'8686868686868686868686868686868686868686'
88 b'T2\x04\x0b.\x1c' b'8787878787878787878787878787878787878787'
89 b'T2\x04\x0b.\x1c' b'8888888888888888888888888888888888888888'
90 b'T2\x04\x0b.\x1c' b'8989898989898989898989898989898989898989'
91 b'T2\x04\x0b.\x1c' b'9090909090909090909090909090909090909090'
92 b'T2\x04\x0b.\x1c' b'9191919191919191919191919191919191919191'
93 b'T2\x04\x0b.\x1c' b'9292929292929292929292929292929292929292'
94 b'T2\x04\x0b.\x1c' b'9393939393939393939393939393939393939393'
95 b'T2\x04\x0b.\x1c' b'9494949494949494949494949494949494949494'
96 b'T2\x04\x0b.\x1c' b'9595959595959595959595959595959595959595'
97 b'T2\x04\x0b.\x1c' b'9696969696969696969696969696969696969696'
98 b'T2\x04\x0b.\x1c' b'9797979797979797979797979797979797979797'
99 b'T2\x04\x0b.\x1c' b'9898989898989898989898989898989898989898'
100 b'T2\x04\x0b.\x1c' b'9999999999999999999999999999999999999999'
101 b'T2\x04\x0b.\x1c' b'end'
102</code></pre>
<p> </p>
页:
[1]