dcexpert 发表于 2024-5-24 08:46

【FireBeetle 2 ESP32 C6】espnow 测试1

<div class='showpostmsg'> 本帖最后由 dcexpert 于 2024-5-24 08:47 编辑

<p>ESP32除了支持 wifi 外,还支持乐鑫私有的 espnow 协议。按照官方解释:&ldquo;<span style="color:#8e44ad;">ESP-NOW 是一种基于数据链路层的无线通信协议,能够在没有路由器的情况下直接、快速、低功耗地控制智能设备,支持 Wi-Fi 和 Bluetooth LE 共存。ESP-NOW是基于数据链路层的无线通信协议,它将五层 OSI 上层协议精简为一层,数据传输时无需依次经过网络层、传输层、会话层、表示层、应用层等复杂的层级,也无需层层增加包头和解包,大大缓解了网络拥挤时因为丢包而导致的卡顿和延迟,拥有更高的响应速度。</span>&rdquo;</p>

<p>&nbsp;</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>&nbsp;</p>

<p>按官方的例程,使用espnow是非常容易的。先准备两个esp32开发板,除了FireBeetle 2 ESP32 C6外,还需要另外一个esp32,大部分型号都可以,注意先将固件更新,旧版本固件是不支持espnow功能的。其次还需要检查一下usb供电是否足够,因为开启wifi功能后功耗会增加,如果供电不足就会造成芯片复位。</p>

<p>&nbsp;</p>

<p>先在一个板子上输入接收端程序:</p>

<p>&nbsp;</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>&nbsp;</p>

<p>然后在另外一个板子上输入发送端程序</p>

<p>&nbsp;</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>&nbsp;</p>

<p>运行后,在接收端就会收到数据</p>

<p>&nbsp;</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>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</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>

dcexpert 发表于 2024-5-24 09:04

<p>从接收数据看,丢失了很多数据,这是因为发送太快,加上接收端使用了 print 打印数据也占用了不少时间。将程序稍微修改一下:</p>

<p>&nbsp;</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>&nbsp;</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>&nbsp;</p>

<p>这次收到数据就完整了</p>

<p>&nbsp;</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>&nbsp;</p>
页: [1]
查看完整版本: 【FireBeetle 2 ESP32 C6】espnow 测试1