FireBeetle 2 ESP32-S3 使用Esp-Now
FireBeetle 2 ESP32-S3是一款基于ESP32-S3的开发板,支持使用Esp-Now进行通信。Esp-Now是Espressif Systems开发的一种低功耗、快速、可靠的无线通信协议,旨在在ESP32和ESP8266芯片之间或者在ESP32芯片之间进行直接通信。使用Esp-Now进行通信的基本步骤如下:
1. 初始化Esp-Now:在FireBeetle 2 ESP32-S3上,用`esp_now`库初始化Esp-Now功能。这包括初始化WiFi和ESP-Now,并设置回调函数来处理接收到的数据。
2. 注册Peers:在Esp-Now通信中,有一个发送方(Sender)和一个或多个接收方(Receiver),也称为Peers。在FireBeetle 2 ESP32-S3上,您可以使用`esp_now`库的`esp_now_add_peer()`函数注册其他设备作为Peers。
3. 发送数据:作为发送方,您可以使用`esp_now`库的`esp_now_send()`函数将数据发送给已注册的Peers。您可以将数据以任何格式发送,例如字符串、字节数组等。
4. 接收数据:作为接收方,您需要设置回调函数来处理接收到的数据。当FireBeetle 2 ESP32-S3接收到来自Peers的数据时,Esp-Now会调用回调函数,并将数据传递给它。
首先我们以下代码获取当前开发板的Mac
import network
# A WLAN interface must be active to send()/recv()
sta = network.WLAN(network.STA_IF)
sta.active(True)
print("Mac:", sta.config("mac"))
这里我们是不需要提供Wifi的ssid和密码的。这也是EspNow的一大优势之一
下面是一个简单的示例代码,演示了如何在FireBeetle 2 ESP32-S3上使用Esp-Now进行通信:
import esp_now
import network
from machine import Pin
# 初始化WiFi和Esp-Now
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
esp_now.init()
# 回调函数来处理接收到的数据
def on_data_received(data):
print("Received data:", data)
# 设置回调函数
esp_now.on_recv(on_data_received)
# 注册接收方设备作为Peer
receiver_mac = b'\x12\x34\x56\x78\x90\xAB'# 用上面的代码获得接收方的mac
esp_now.add_peer(receiver_mac)
# 发送数据给接收方
data = b"Hello, Esp-Now!"
esp_now.send(receiver_mac, data)
# 延迟一段时间以等待接收方处理数据
time.sleep(1)
# 关闭Esp-Now
esp_now.deinit()
在上述示例代码中,我们首先导入`esp_now`和`network`库,并初始化WiFi和Esp-Now。
我们定义了一个回调函数`on_data_received`,它用于处理接收到的数据。当FireBeetle 2 ESP32-S3接收到来自Peers的数据时,Esp-Now会调用此回调函数,并将数据传递给它。
然后,我们使用`esp_now.add_peer()`函数注册接收方设备的MAC地址作为Peer。您需要将`receiver_mac`替换为实际的接收方设备的MAC地址。
接下来,我们使用`esp_now.send()`函数将数据发送给接收方。在示例中,我们发送了一个简单的字符串。
最后,我们使用`esp_now.deinit()`关闭Esp-Now。
下面是完整的异步esp-now代码
import network
import aioespnow
import uasyncio as asyncio
# A WLAN interface must be active to send()/recv()
sta = network.WLAN(network.STA_IF)
sta.active(True)
print("Mac:", sta.config("mac"))
e = aioespnow.AIOESPNow()# Returns AIOESPNow enhanced with async support
e.active(True)
peer = b'\xdcTu\x93q\x8c'
#peer = b'`U\xf9y\xbc\xfc' #LUATOS
e.add_peer(peer)
# Send a periodic ping to a peer
async def heartbeat(e, peer, period=30):
while True:
if not await e.asend(peer, b'ping'):
print("Heartbeat: peer not responding:", peer)
else:
print("Heartbeat: ping", peer)
await asyncio.sleep(period)
# Echo any received messages back to the sender
async def echo_server(e):
async for mac, msg in e:
print("Echo:", msg)
try:
await e.asend(mac, msg)
except OSError as err:
if len(err.args) > 1 and err.args == 'ESP_ERR_ESPNOW_NOT_FOUND':
e.add_peer(mac)
await e.asend(mac, msg)
async def main(e, peer, timeout, period):
asyncio.create_task(heartbeat(e, peer, period))
asyncio.create_task(echo_server(e))
await asyncio.sleep(timeout)
asyncio.run(main(e, peer, 120, 10))
https://www.bilibili.com/video/BV1kF411Z7Sd/
向大佬学习{:5_116:}
页:
[1]