在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

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

2025-09   阅读(405)   评论(0)
 标签: 创客电子 ESP32 MicroPython

涨知识
PID

PID控制算法是结合比例、积分和微分三种环节于一体的控制算法,它是连续系统中技术最为成熟、应用最为广泛的一种控制算法。

评论:
相关文章
MimiClaw应用与开发教程1:部署和测试

MimiClaw‌ 是一款基于 ‌ESP32-S3‌ 芯片的超轻量级AI助手,适合嵌入式AI与物联网开发者快速部署本地化AI代理。本系列教程基于MimiClaw的Arduino移植版本进行讲解,小节主要讲解部署和测试。


ESP32扫描wifi 热点列表

就像我们用手机打开WiFi功能后可以浏览附近的可用WiFi。要将手机连接到热点,通常需要打开Wi-Fi设置应用程序,列出可用的网络,然后选择所需的热点。然后输入密码(或不输入密码),可以使用ESP32进行相同的操作。


MimiClaw 配置飞书机器人和添加硬件控制技能

本文本介绍配置飞书机器人为MimiClaw的一个输入/输出端,和添加一个控制WS2812与LED的控制技能。


ESP32-S3 部署 MimicLaw 完整教程:从零到成功调用 DeepSeek

一块 30 块钱的开发板 + 一个大模型 API,就能做出可以听懂人话的智能硬件。 本文记录完整安装过程和踩坑经验,确保你跟着做就能跑通。


MimiClaw 架构全解析,把 “智能龙虾” 跑在 ESP32 上

本文将从手绘架构图入手,逐层拆解 MimiClaw 的分层设计、核心模块、数据流转与底层实现,带你解剖这只“智能虾”的技术骨架,看懂在 C 语言加持下,AI 智能体如何以可穿戴设备的形态,在你身边稳稳运行、离线服务、主动响应。


如何用 platform.local.txt 深度定制 ESP32 编译流程?

本文介绍如何在不脱离 ArduinoIDE 可视化开发的前提下,通过一个名为 platform.local.txt 的小文件,实现对 ESP32 编译流程的精准控制。


优化Arduino-ESP32程序体积

本文将系统分析程序体积增长的五大根源,并提供经过验证的优化方案,帮助减小固件大小。


开发ESP32大模型AI语音助手-从软件到硬件

本文所DIY的语音助手设备端使用的是MicroPython、服务端是Python,对于很多开发者来说MicroPython入门没难度。


【ESP32 C++教程】Unit10-2:音频录制

本小节使用音频开发框架实现一个音频录制到文件的示例。


ESP32 I2S 接口深度解析:从时序、格式到 ESP-IDF 驱动实战

I2S协议通过BCLK、LRCLK和DATA三线精准传输音频数据,但时序边沿、帧格式、时钟源等细节常引发噪声或断连。本文详解ESP32的I2S实现,从协议原理到ESP-IDF v5.x代码配置,助你避开常见陷阱,确保音频稳定传输。