使用 Micropython 的 Wio E5 与 Things Network

ChangeCode
转载
发布时间: 2025-06-10 15:23:46 | 阅读数 0收藏数 0评论数 0
封面
在这个详细的教程中,我们将介绍使用 MicroPython 和小 ESP32-S3 将 Wio LoRa-E5 模块与 The Things Network (TTN) 集成的过程。该项目将使您能够使用 TTN 作为处理 LoRa 数据的后端,通过 LoRaWAN 传输数据。

准备工作:

材料:

材料名称
数量
备注
Wio LoRa-E5 模块
1
/
XIAO ESP32-S3
1
/
面包板
1
/
USB线
1
/
跳线
1
/
电源
1
/

工具:

工具名称
数量
备注
Python 3.x
1
/
Thonny IDE
1
(或您选择的任何 MicroPython IDE)
MicroPython 固件
1
/
1

前置

为您的项目制造 PCB

您必须查看 PCBWAY 以便宜的价格在线订购 PCB!

您可以以便宜的价格制造 10 个优质 PCB 并运送到您家门口。您还将在第一笔订单中获得运费折扣。将您的 Gerber 文件上传到 PCBWAY,以良好的质量和快速的周转时间制造它们。PCBWay 现在可以提供完整的产品解决方案,从设计到外壳生产。查看他们的在线 Gerber 查看器功能。使用奖励积分,您可以从他们的礼品店获得免费的东西。另外,请从这里查看这个关于 KiCad 的 PCBWay 插件的有用博客。使用这个插件,在 KiCad 中完成设计后,只需单击一下即可直接订购 PCB。

2

在 XIAO ESP32-S3 和 Wi

🔥 在 XIAO ESP32-S3 上刷写 MicroPython:

1. 从 (https://micropython.org/download/esp32/) 下载适用于 ESP32-S3 的 MicroPython 固件。请务必下载 ESP32-S3 专用固件。


2. 安装 esptool:

您需要 esptool 包才能在 ESP32-S3 上刷写 MicroPython。使用以下方式安装它:

pip 安装 esptool


3. 将 XIAO ESP32-S3 连接到 PC 并执行以下命令,擦除 XIAO ESP32-S3 上的现有固件:

esptool.py --chip esp32s3 --port <your-port> erase_flash


4. 刷写 MicroPython 固件:

将 '<your-port>' 替换为 ESP32-S3 连接的端口(例如,Windows 上的“COM4”或 Linux 上的“/dev/ttyUSB0”)。

然后,运行:

esptool.py --chip esp32s3 --port <your-port> write_flash -z 0x1000 esp32s3-<your-firmware>.bin


🚀 闪烁的 Wio LoRa-E5:

Wio LoRa-E5 模块主要使用 AT 命令通过 UART 进行通信。您不会将 MicroPython 烧录到它上面,而是通过来自 XIAO ESP32-S3 的 AT 命令与它通信。

有关使用固件设置 Wio-E5 的详细说明,请参阅 [Seeed Studio 文档]


3

接线连接

以下是使用 UART 将 XIAO ESP32-S3 连接到 Wio LoRa-E5 模块的方法:

确保正确连接引脚,尤其是 TX 和 RX,因为这将促进设备之间的通信。

4

为 ESP32-S3 设置 Thonny

1. 下载并安装 Thonny IDE(如果尚未安装)。

2. 选择 ESP32 作为您的 MicroPython 解释器。

3. 插入 XIAO ESP32-S3,在 Thonny 中,进入 Tools > Options > Interpreter,然后选择与您的设备对应的正确端口(例如,Windows 上的“COM3”或 Linux 上的“/dev/ttyUSB0”)。

通过运行以下命令验证连接:

print(“XIAO ESP32-S3 问候!

如果消息打印到终端,则表示您已连接!

5

与 LoRaWAN 网络通信的 Micr

现在,我们将在 Xiao ESP32-S3 上编写 MicroPython 代码,以向 Wio-E5 发送和接收数据以进行 LoRa 通信。

# Connect to The Things Network (TTN) and publish some test data
# Put your key here (string). This should match the AppKey generated by your application.
#For example: app_key = 'E08B834FB0866939FC94CDCC15D0A0BE'
app_key = 'E08B834FB0866939FC94CDCC15D0A0BE'
# Regional LoRaWAN settings. You may need to modify these depending on your region.
# If you are using AU915: Australia
# band='AU915'
# channels='8-15'
# If you are using US915
# band='US915'
# channels='8-15'
#
# If you are using EU868
band='EU868'
channels='0-2'
from machine import UART, Pin
from utime import sleep_ms
from sys import exit
uart1 = UART(1, baudrate=9600, tx=Pin(43), rx=Pin(44))
join_EUI = None # These are populated by this script
device_EUI = None
### Function Definitions
def receive_uart():
'''Polls the uart until all data is dequeued'''
rxData=bytes()
while uart1.any()>0:
rxData += uart1.read(1)
sleep_ms(2)
return rxData.decode('utf-8')
def send_AT(command):
'''Wraps the "command" string with AT+ and \r\n'''
buffer = 'AT' + command + '\r\n'
uart1.write(buffer)
sleep_ms(300)
def test_uart_connection():
'''Checks for good UART connection by querying the LoRa-E5 module with a test command'''
send_AT('') # empty at command will query status
data = receive_uart()
if data == '+AT: OK\r\n' : print('LoRa radio is ready\n')
else:
print('LoRa-E5 detected\n')
exit()
def get_eui_from_radio():
'''Reads both the DeviceEUI and JoinEUI from the device'''
send_AT('+ID=DevEui')
data = receive_uart()
device_EUI = data.split()[2]
send_AT('+ID=AppEui')
data = receive_uart()
join_EUI = data.split()[2]
print(f'JoinEUI: {join_EUI}\n DevEUI: {device_EUI}')
def set_app_key(app_key):
if app_key is None or app_key == 'None':
print('\nGenerate an AppKey on cloud.thethings.network and enter it at the top of this script to proceed')
exit()
send_AT('+KEY=APPKEY,"' + app_key + '"')
receive_uart()
print(f' AppKey: {app_key}\n')
def configure_regional_settings(band=None, DR='0', channels=None):
''' Configure band and channel settings'''
send_AT('+DR=' + band)
send_AT('+DR=' + DR)
send_AT('+CH=NUM,' + channels)
send_AT('+MODE=LWOTAA')
receive_uart() # flush
send_AT('+DR')
data = receive_uart()
print(data)
def join_the_things_network():
'''Connect to The Things Network. Retry on failure.'''
max_retries = 5
retry_count = 0
while retry_count < max_retries:
send_AT('+JOIN')
data = receive_uart()
print(data)
status = 'not connected'
while status == 'not connected':
data = receive_uart()
if len(data) > 0: print(data)
if 'joined' in data.split():
status = 'connected'
break
if 'failed' in data.split():
print('Join Failed. Retrying...')
break
sleep_ms(1000)
if status == 'connected':
break
else:
retry_count += 1
print(f"Retry {retry_count}/{max_retries} in 5 seconds...")
sleep_ms(5000)
if retry_count >= max_retries:
print("Max retries exceeded. Giving up.")
exit()
def send_message(message):
'''Send a string message'''
send_AT('+MSG="' + message + '"')
done = False
while not done:
data = receive_uart()
if 'Done' in data or 'ERROR' in data:
done = True
if len(data) > 0: print(data)
sleep_ms(1000)
def send_hex(message):
send_AT('+MSGHEX="' + message + '"')
done = False
while not done:
data = receive_uart()
if 'Done' in data or 'ERROR' in data:
done = True
if len(data) > 0: print(data)
sleep_ms(1000)
test_uart_connection()
get_eui_from_radio()
set_app_key(app_key)
configure_regional_settings(band=band, DR='0', channels=channels)
join_the_things_network()
while True:
# Send example data
print("sending test messages")
# Convert the random number to a hexadecimal string
temp=100
payload = '{:04x}'.format(temp)
payload1 = '{:04x}'.format(temp)
CP = payload + payload1
print("payload : ", CP)
# send_message("Hello World!")
send_hex(CP)
sleep_ms(5000)

设备将尝试加入 LoRaWAN 网络。响应应确认联接是否成功.

6

设置 The Things Networ

在开始硬件设置之前,让我们在 The Things Network (TTN) 上配置应用程序。TTN 是一个免费的、社区驱动的 LoRaWAN 网络服务平台。

🛠️ 5.1 创建 TTN 帐户

1. 前往 [TTN 控制台](https://console.thethingsnetwork.org/),然后注册或登录。

2. 根据您的区域选择您的集群(例如,**EU1**、**US1**)。


🛠️ 5.2 创建应用程序

1. 在 TTN 控制台中,单击应用程序,然后单击创建应用程序。


2. 填写详细信息:

3. 创建后,导航到应用程序概述页面。

🛠️ 5.3 注册您的设备

1. 在您的应用程序下,单击 Devices → Register end device。

2. 选择 Manually registered device(手动注册的设备)。

3. 填写字段:


7

通过 TTN 接收数据

现在查看 TTN 控制台,您可以看到您的设备响应。


function Decoder(bytes, port) {
var decoded = {};
if (port === 8) {
decoded.temp = bytes[0] <<8 | bytes[1];
decoded.humi = bytes[2] <<8 | bytes[3];
}
return decoded;
}


最后,您可以在 TTN 控制台中查看您的实际数据。



🚀 未来扩展包:

添加传感器:将温度、湿度或 GPS 等传感器连接到您的小 ESP32-S3 并将这些数据发送到 TTN.Cloud 集成:将数据从 TTN 转发到 AWS、Azure 或 Google Cloud 等云平台进行进一步处理。数据可视化:使用 Qubitro 等平台可视化来自 TTN 的传入数据。

🎉 结论

您已成功使用 MicroPython 将 Wio LoRa-E5 与 The Things Network (TTN) 和小 ESP32-S3 集成。您现在可以通过 LoRaWAN 将数据发送到 TTN,在那里数据可以转发到云服务、存储在数据库中或在仪表板上可视化。

祝您编码和构建 LoRaWAN 物联网应用愉快!🌍📡


阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载