资料介绍
描述
本文遵循有关 如何 使用Zerynth创建以Python编程并连接到The Things Network的 LoRa/LoraWAN 网络的教程。
从上一个项目的相同设置开始,我们将了解如何使用 Zerynth、The Things Network 和 Matplotlib(一个非常流行的 Python 绘图库)获取和可视化 LoRa 节点的传感器数据。
您将看到如何:
- 使用Zerynth在Python中 编写LoRa 节点以获取温度 和 湿度数据;
- 通过 LoRa 网关向物联网发送数据;
- 通过MQTT从 The Things Network 控制台获取数据;
- 使用Matplotlib绘制传感器数据。
所需材料
本质上,我们需要与之前项目相同的配置,外加一个温度和湿度传感器:
- LoRa 终端节点。在本教程中,我们使用了Flip&Click作为 MCU 板,一个 LoRa Click 和一个Temp&Hum Click ,它带有 ST 的 HTS221 温度和相对湿度传感器。
- Zerynth Studio:我们的专业 IDE,它提供了一个平台,用于开发 Python 或混合 C/Python 代码和管理您的开发板。它包括编译器、调试器和编辑器,以及提供轻松学习体验的教程和示例项目。
- TTN(物联网)控制台:您需要创建/注册一个帐户,输入用户名和电子邮件地址。
在 Python 中编程 LoRa 节点以获取传感器数据
在执行 LoRa 网关配置和 LoRa 节点配置步骤后(参见之前的项目),我们将能够对设备进行编程以从 Temp&Hum Click 获取数据并将这些值发送到 The Things Network 控制台。
特别是,我们必须在 Zerynth Studio 上创建一个新项目并粘贴此代码:
# LoraWAN sensor data Logging
import streams
from microchip.rn2483 import rn2483
from stm.hts221 import hts221
streams.serial()
try:
rst = D16 # reset pin
# insert otaa credentials!
appeui = "YOUAPPEUI"
appkey = "YOUAPPKEY"
print("joining...")
if not rn2483.init(SERIAL1, appeui, appkey, rst): # LoRa Click on slot A
print("denied :(")
raise Exception
print("sending first message, res:")
print(rn2483.tx_uncnf('TTN'))
temp_hum = hts221.HTS221( I2C1,D31 ) # Temp Hum Click on slot C
while True:
temp, hum = temp_hum.get_temp_humidity()
print('temp: ', temp, 'hum: ', hum)
data = bytearray(4)
data[0:2] = bytearray([ int(temp) + 127, int((temp - int(temp)) * 100) ])
data[2:4] = bytearray([ int(hum) + 127, int((hum - int(hum)) * 100) ])
r = rn2483.tx_uncnf(data) # send data to TTN
sleep(5000)
except Exception as e:
print(e)
使用您可以在TTN 控制台的设备概述中找到的“ appeui ”和“ appkey ”值编辑行。
将代码上传到您的开发板,您就完成了!
现在单击 TTN 控制台的“数据”选项卡,您可以看到 LoRa 节点发送的传感器数据!
如您所见,此脚本与上一个项目中使用的“ping”示例非常相似。唯一的区别与Temp&Hum Click搭载的HTS221温湿度传感器的使用有关。感谢 Zerynth,您只需要几行Python ,就可以从传感器获取真实数据并将其发送到 LoRa 网络!
通过 MQTT 从 The Things Network 控制台获取数据
现在是从 TTN 控制台获取数据的时候了。为此,我们准备了一个非常简单的 Python 脚本,该脚本使用 Eclipse Paho MQTT Python 客户端库,该客户端库实现了MQTT协议的 3.1 和 3.1.1 版。
请注意,您必须在笔记本电脑上运行此脚本,因此您需要在 PC 上安装 Python (3.x)。
get_plot_data_TTN.py:
# Get and plot data from TTN Console using Python
import paho.mqtt.client as mqtt
import json
import base64
APPEUI = 'YOURAPPEUI'
APPID = 'YOUAPPID'
PSW = 'YOURPASSWORD'
import matplotlib.pyplot as plt
#import DataPlot and RealtimePlot from the file plot_data.py
from plot_data import DataPlot, RealtimePlot
fig, axes = plt.subplots()
plt.title('Data from TTN console')
data = DataPlot()
dataPlotting= RealtimePlot(axes)
count=0
def bytes_to_decimal(i,d):
xx = i - 127
dec = (-d if xx < 0 else d)/100
return xx + dec
def on_connect(client, userdata, flags, rc):
client.subscribe('+/devices/+/up'.format(APPEUI))
def on_message(client, userdata, msg):
j_msg = json.loads(msg.payload.decode('utf-8'))
dev_eui = j_msg['hardware_serial']
tmp_hum = base64.b64decode(j_msg['payload_raw'])
tmp = bytes_to_decimal(*tmp_hum[0:2])
hum = bytes_to_decimal(*tmp_hum[2:4])
# print data
print('---')
print('tmp:', tmp, ' hum:', hum)
print('dev eui: ', dev_eui)
# plot data
global count
count+=1
data.add(count, tmp , hum)
dataPlotting.plot(data)
plt.pause(0.001)
# set paho.mqtt callback
ttn_client = mqtt.Client()
ttn_client.on_connect = on_connect
ttn_client.on_message = on_message
ttn_client.username_pw_set(APPID, PSW)
ttn_client.connect("eu.thethings.network", 1883, 60) #MQTT port over TLS
try:
ttn_client.loop_forever()
except KeyboardInterrupt:
print('disconnect')
ttn_client.disconnect()
使用 Matplotlib 实时绘制传感器数据
一旦你的计算机中有了数据,你就可以用它做各种各样的事情。在这种情况下,我们想要读取这些温度和湿度值并将它们绘制为时间的函数。
因为我们喜欢 Python,所以我们准备了一个名为“ plot_data.py ”的脚本,它为此使用了Matplotlib库。
plot_data.py:
import time
import math
from collections import deque , defaultdict
import matplotlib.animation as animation
from matplotlib import pyplot as plt
import threading
from random import randint
from statistics import *
class DataPlot:
def __init__(self, max_entries = 20):
self.axis_x = deque(maxlen=max_entries)
self.axis_y = deque(maxlen=max_entries)
self.axis_y2 = deque(maxlen=max_entries)
self.max_entries = max_entries
self.buf1=deque(maxlen=5)
self.buf2=deque(maxlen=5)
def add(self, x, y,y2):
self.axis_x.append(x)
self.axis_y.append(y)
self.axis_y2.append(y2)
class RealtimePlot:
def __init__(self, axes):
self.axes = axes
self.lineplot, = axes.plot([], [], "ro-")
self.lineplot2, = axes.plot([], [], "go-")
def plot(self, dataPlot):
self.lineplot.set_data(dataPlot.axis_x, dataPlot.axis_y)
self.lineplot2.set_data(dataPlot.axis_x, dataPlot.axis_y2)
self.axes.set_xlim(min(dataPlot.axis_x), max(dataPlot.axis_x))
ymin = min([min(dataPlot.axis_y), min(dataPlot.axis_y2)])-10
ymax = max([max(dataPlot.axis_y), max(dataPlot.axis_y2)])+10
self.axes.set_ylim(ymin,ymax)
self.axes.relim();
def main():
fig, axes = plt.subplots()
plt.title('Plotting Data')
data = DataPlot();
dataPlotting= RealtimePlot(axes)
try:
count=0
while True:
count+=1
data.add(count, 30 + 1/randint(1,5) , 35 + randint(1,5))
dataPlotting.plot(data)
plt.pause(0.001)
except KeyboardInterrupt:
print('\n\nKeyboard exception received. Exiting.')
plt.close()
ser.close()
exit()
if __name__ == "__main__": main()
请注意,您必须在之前的脚本中导入此文件才能正常工作。这就是情节的样子。随着数据的不断涌入,它会向右滚动。
使用 Zerynth Studio PRO 扩展您的 LoRa 网络
以下列表包括一些LoRa 关键特性:
- 远距离:15 – 20 公里;
- 电池寿命长:超过十年;
- 百万节点!
Zerynth Studio 的免费版本允许您使用LoRa解决方案原型所需的所有功能,但您最多可以免费为每个受支持的电路板编程 5 个单元。您可以使用Zerynth Studio PRO 版本(从 6 月 28 日开始提供,预购可享受高达 50% 的折扣)解锁此限制,该 版本还将包括工业级功能,例如:
- 可选择实时操作系统;
- 无线更新开发;
- 硬件驱动的安全固件以工业规模烧录在设备上;
- …以及更多
通过Zerynth 学院
- 如何使用Python绘制PDF文件教程详细说明 12次下载
- MPLAB数据监视与控制界面开发的实时数据监视软件详细中文资料介绍
- 紫金桥实时数据库实现外置数据处理模型 5次下载
- 紫金桥实时数据库_实时数据转储功能深度剖析 8次下载
- 紫金桥实时数据库在石化领域的应用 11次下载
- Ebase实时数据库手册 25次下载
- 一种实时数据管理系统的开发 36次下载
- 基于LonWorks的DSP智能实时数据采集节点 28次下载
- 基于PC 机的多通道实时数据采集系统的设计
- 一种基于实时数据仓库的实时DSS体系结构
- 组态软件实时数据库研究
- 基于Linux的嵌入式实时数据库的设计
- 基于PHD实时数据库的电气监控系统
- 基于实时数据交换威廉希尔官方网站 的数据通信
- DCS组态软件实时数据库系统的设计
- 基于Python的地图绘制教程 919次阅读
- 物联网中的PLC如何实现实时数据采集 816次阅读
- 如何克服LoRa®终端节点设计中的挑战 491次阅读
- python日常记账本源代码 1173次阅读
- LoRa节点、LoRa服务器和终端应用之间的数据传输 4059次阅读
- 详谈Python的数据模型和对象模型 2452次阅读
- 实时数据体系建设的总体方案的三部分 6598次阅读
- Python如何爬取实时变化的WebSocket数据 3439次阅读
- 基于嵌入式Linux系统平台并可应用于监控组态软件实时数据库的设计方案详解 1794次阅读
- 基于Facebook开发的实时数据压缩程序 1175次阅读
- 根据电网特点对实时数据库的测试要点的几个方面 1746次阅读
- 如何快速学会Python?利用Python进行数据分析 1w次阅读
- python串口接收数据 4.5w次阅读
- 基于CYUSB3014的高速实时数据采集系统 1w次阅读
- 一种高速实时数据采集系统的设计方案 4671次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多