在Micropython下使用ESPNow功能进行数据传输

本文讲解如何在Micropython环境下使用ESP32的ESPNow功能进行数据传输。

ESPNow是一种轻量级的无线通信协议,适用于ESP32芯片,它可以实现低功耗、高效率的设备间通讯,不需要路由器,也不需要wifi,同时,在使用ESPNow的时候不影响wifi 和蓝牙

在文章中,我们将学习如何在Micropython环境下使用ESP32的ESPNow功能进行数据传输。ESPNOW支持一对一,一对多,多对多的各种通讯方式,在这里不做更多的说明。

准备工作

在开始之前,确保你已经做好了以下准备工作:

1.安装Micropython固件到ESP32模块上(1.20.0 以后的版本)。
2.确保你有两个或更多的ESP32模块,它们将用于数据通讯(我用的两块ESP32-S3进行的测试,实际ESP8266也是支持的,但是某些函数略有差异)。

获取ESP32的MAC地址

ESPNOW发送数据需要知道目标ESP32的MAC地址。有两种简单的方法获取MAC地址,一种是在烧录完成后可以看到,另一个是通过程序来获得

在Micropython下使用ESPNow功能进行数据传输

在上图中烧录完成后可以看到AP和STA状态下的MAC地址

下面是通过代码获取MAC地址的方法:

在Micropython下使用ESPNow功能进行数据传输

获取到MAC地址后,一切都简单了,当然,还有一种不获取MAC地址的方法就是广播0xFF*6的方式,废话不多说,直接上代码

发送端

import network
import espnow
import time

sta = network.WLAN(network.STA_IF)    # Enable station mode for ESP
sta.active(True)
sta.disconnect()        # Disconnect from last connected WiFi SSID

e = espnow.ESPNow()     # Enable ESP-NOW
e.active(True)

peer1 = b'x34x85x18x90x86x38'   # MAC address of peer1's wifi interface
e.add_peer(peer1)                     # add peer1 (receiver1)
#如果有多个接收都就在这下面接着增加peer2...

print("Starting...")            # Send to all peers

def main():
    while True:
        e.send(peer1, "这是Slave发送过来的数据", True)     # send commands to pear 1
        time.sleep(2)

if __name__ == "__main__":
    main()

代码很简单,直接官方代码小改,注意使用时改MAC地址即可。

#### 接收端的代码
import network
import espnow
# A WLAN interface must be active to send()/recv()
sta = network.WLAN(network.STA_IF)
sta.active(True)
sta.disconnect()                # Disconnect from last connected WiFi SSID

e = espnow.ESPNow()                  # Enable ESP-NOW
e.active(True)

peer = b'x34x85x18x46x3dx28'   # MAC address of peer's wifi interface
#这个MAC地址是发送端的
e.add_peer(peer)                     # Sender's MAC registration

def espnow_rx():
    while True:
        host, msg = e.recv()
        if msg:                          # wait for message
            print(msg)

if __name__ == "__main__":
    espnow_rx()

代码简单,不多赘述,注册完设备后就收发信息即可。

通过以上步骤,你就可以在Micropython环境下使用ESPNow进行简单而高效的数据通讯了。记得根据你的实际需求调整代码和配置信息。

几个说明

在Micropython控制硬件主要就分几步走,首先导入相关的库,然后构建对象,接下来定义相关的函数,最后调用定义好的函数。

1.在这里,导入espnow之后,先实例化一个对象并激活。

2.在使用espnow收发数据之前必须先启用Network.STA_IF或者Network.AP_IF,如果不需要wifi转发那就不需要连接或者配置

3.ESPNow.send(mac,msg)注意消息发送消息长度不大于250bytes,如是长度大于250bytes时切包再合包。

4.ESPNow.recv([timeout_ms])接收数据

5.ESPNow.any()检查数据是否可用

6.其它函数简说:

ESPNow.set_pmk(pmk) 设置用于加密本地主密钥的主密钥 (PMK) 用于加密消息的密钥 (LMK)。如果未设置,则默认 PMK 为 由底层乐鑫 ESP-NOW 软件堆栈使用

ESPNow.add_peer(mac[, lmk][, channel][, ifidx][, encrypt])

ESPNow.add_peer(mac, param=value, …)

添加/注册提供的 mac 地址作为对等方。其他参数可以 也被指定为位置或关键字参数(任何设置为 的参数都将设置为其默认值)

ESPNow.del_peer(mac) 取消注册与提供的 mac 地址关联的对等方

ESPNow.get_peer(mac) (ESP32 only) 已注册的对等体上转换信息

ESPNow.get_peers() (ESP32 only) 返回所有已注册对等方的“对等信息”参数(作为元组 元组)。

ESPNow.peer_count() (ESP32 only) 查看已注册对等方的数量

ESPNow.mod_peer(mac, lmk, [channel], [ifidx], [encrypt]) (ESP32 only) ESPNow.mod_peer(mac, ‘param’=value, …) (ESP32 only)

修改与提供的 mac 地址关联的对等方的参数。参数可以作为位置或关键字参数提供 (请参阅)。任何未设置(或设置为 )的参数都将保留该参数的现有值。

ESPNow.irq(callback) (ESP32 only)

设置回调函数,在消息有消息后尽快调用 从另一个 ESPNow 设备接收。将调用回调函数 以实例对象作为参数。

为了更可靠的运行, 建议在以下情况下读出尽可能多的可用消息 调用回调并将读取超时设置为零,例如:

def recv_cb(e):
    while True:  # Read out all messages waiting in the buffer
        mac, msg = e.irecv(0)  # Don't wait if no messages left
        if mac is None:
            return
        print(mac, msg)

e.irq(recv_cb)

广播消息的方法:
bcast = b'xff' * 6
e.add_peer(bcast)
e.send(bcast, "Hello World!")


来源:https://www.elecfans.com/d/2306282.html

- 本文内容来自网络,如有侵权,请联系本站处理。

11:45   阅读(1)   评论(0)
 标签: 创客 ESP32 MicroPython

涨知识
LED

发光二极管,简称为LED,是一种常用的发光器件,通过电子与空穴复合释放能量发光, 发光二极管可高效地将电能转化为光能,在现代社会具有广泛的用途,如照明、平板显示、医疗器件等。

评论:
相关文章
ESP-Hosted 入门介绍 &使用指南

ESP-Hosted 解决方案提供了将 ESP 板用作 Wi-Fi 和 Bluetooth/BLE 连接的通信处理器的方法。


设备上云太麻烦?ESP-Hosted一站触达!

ESP-Hosted 提供了一种将ESP芯片和模组用作通信协处理器的解决方案,该解决方案为主机微处理器或微控制器提供无线连接,使主机能够与其他设备通信。简单来说为网卡方案。


ESP32 + Arduino使用TFT_eSPI库

Arduino+ESP32上使用TFT_eSPI库快速点亮这个屏幕,驱动芯片ST7789


ESP32 利用 SPI 连通 TFT 彩屏

本文给出了一个ESP32与SPI 接口TFT显示屏接线的详细说明,供大家参考。


用 ESP32-S3 打造多功能 USB Dongle

ESP-Dongle 是一款基于 ESP32-S3 芯片开发的多功能 USB Device 解决方案。它不仅外形小巧,功能齐全,更集成了无线 U 盘、SD 卡读取以及 USB 无线网卡等多项功能。


利用 ESP32-S3 和 CSI 技术打造智能家居

ESP32 系列芯片可以利用 CSI 数据实现动作检测和存在检测。无论是自动调节灯光、风扇,还是节能控制,CSI 技术为智能家居带来了新的可能性。随着 CSI 技术的发展,未来的智能家居将能够更精确地感知和响应我们的行为,实现更高效、更人性化的控制。


ESP32-FreeRTOS:大量FreeRTOS实例,供参考学习

ESP32-FreeRTOS项目提供了丰富的示例,帮助开发者快速掌握ESP32的硬件功能和FreeRTOS实时操作系统。


物联网项目开发实战-第3章-自动浇花项目迭代3

本节我们在迭代二的基础上使用四位数码管和OLED显示屏显示相关交互信息。


物联网项目开发实战-第3章-自动浇花项目迭代2

本节我们在迭代一的基础上增加采集土壤湿度数据,并根据湿度数据来决定是否自动进行浇水动作。


物联网项目开发实战-第3章-自动浇花项目迭代1

本节我们实现一个基本能工作的手动浇水装置,即通过按下按键来闭合继发器让小水泵进行浇水。