电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>电子资料>使用Python绘制LoRa节点的实时数据

使用Python绘制LoRa节点的实时数据

2022-12-22 | zip | 0.34 MB | 次下载 | 免费

资料介绍

描述

 

 

本文遵循有关 如何 使用Zerynth创建以Python编程并连接到The Things Network的 LoRa/LoraWAN 网络教程

从上一个项目的相同设置开始,我们将了解如何使用 Zerynth、The Things Network 和 Matplotlib(一个非常流行的 Python 绘图库)获取和可视化 LoRa 节点的传感器数据。

您将看到如何:

  • 使用Zerynth在Python中 编写LoRa 节点以获取温度 和 湿度数据;
  • 通过 LoRa 网关向物联网发送数据;
  • 通过MQTT从 The Things Network 控制台获取数据
  • 使用Matplotlib绘制传感器数据

所需材料

本质上,我们需要与之前项目相同的配置,外加一个温度和湿度传感器

  • 劳拉网关在本教程中,我们使用了 Link Labs BS-8,这是一种用于 LoRa 网络的工业IoT/M2M 网关。它能够支持具有 8 个同步接收通道的数千个端点。
  • LoRa 终端节点在本教程中,我们使用了Flip&Click作为 MCU 板,一个 LoRa Click 和一个Temp&Hum Click ,它带有 ST 的 HTS221 温度和相对湿度传感器。
  • Zerynth Studio:我们的专业 IDE,它提供了一个平台,用于开发 Python 或混合 C/Python 代码和管理您的开发板。它包括编译器、调试器和编辑器,以及提供轻松学习体验的教程和示例项目。

在 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 学院

下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费