使用Python繪制LoRa節(jié)點(diǎn)的實(shí)時(shí)數(shù)據(jù)
資料介紹
描述
?
本文遵循有關(guān)?如何?使用Zerynth創(chuàng)建以Python編程并連接到The Things Network的 LoRa/LoraWAN 網(wǎng)絡(luò)的教程。
從上一個(gè)項(xiàng)目的相同設(shè)置開始,我們將了解如何使用 Zerynth、The Things Network 和 Matplotlib(一個(gè)非常流行的 Python 繪圖庫(kù))獲取和可視化 LoRa 節(jié)點(diǎn)的傳感器數(shù)據(jù)。
您將看到如何:
- 使用Zerynth在Python中?編寫LoRa?節(jié)點(diǎn)以獲取溫度?和?濕度數(shù)據(jù);
- 通過(guò) LoRa 網(wǎng)關(guān)向物聯(lián)網(wǎng)發(fā)送數(shù)據(jù);
- 通過(guò)MQTT從 The Things Network 控制臺(tái)獲取數(shù)據(jù);
- 使用Matplotlib繪制傳感器數(shù)據(jù)。
所需材料
本質(zhì)上,我們需要與之前項(xiàng)目相同的配置,外加一個(gè)溫度和濕度傳感器:
- 勞拉網(wǎng)關(guān)。在本教程中,我們使用了 Link Labs BS-8,這是一種用于 LoRa 網(wǎng)絡(luò)的工業(yè)級(jí) IoT/M2M 網(wǎng)關(guān)。它能夠支持具有 8 個(gè)同步接收通道的數(shù)千個(gè)端點(diǎn)。
- LoRa 終端節(jié)點(diǎn)。在本教程中,我們使用了Flip&Click作為 MCU 板,一個(gè)?LoRa Click?和一個(gè)Temp&Hum Click ,它帶有 ST 的 HTS221 溫度和相對(duì)濕度傳感器。
- Zerynth Studio:我們的專業(yè) IDE,它提供了一個(gè)平臺(tái),用于開發(fā) Python 或混合 C/Python 代碼和管理您的開發(fā)板。它包括編譯器、調(diào)試器和編輯器,以及提供輕松學(xué)習(xí)體驗(yàn)的教程和示例項(xiàng)目。
- TTN(物聯(lián)網(wǎng))控制臺(tái):您需要?jiǎng)?chuàng)建/注冊(cè)一個(gè)帳戶,輸入用戶名和電子郵件地址。
在 Python 中編程 LoRa 節(jié)點(diǎn)以獲取傳感器數(shù)據(jù)
在執(zhí)行 LoRa 網(wǎng)關(guān)配置和 LoRa 節(jié)點(diǎn)配置步驟后(參見之前的項(xiàng)目),我們將能夠?qū)υO(shè)備進(jìn)行編程以從 Temp&Hum Click 獲取數(shù)據(jù)并將這些值發(fā)送到 The Things Network 控制臺(tái)。
特別是,我們必須在 Zerynth Studio 上創(chuàng)建一個(gè)新項(xiàng)目并粘貼此代碼:
# 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 控制臺(tái)的設(shè)備概述中找到的“ appeui ”和“ appkey ”值編輯行。
將代碼上傳到您的開發(fā)板,您就完成了!
現(xiàn)在單擊 TTN 控制臺(tái)的“數(shù)據(jù)”選項(xiàng)卡,您可以看到 LoRa 節(jié)點(diǎn)發(fā)送的傳感器數(shù)據(jù)!
如您所見,此腳本與上一個(gè)項(xiàng)目中使用的“ping”示例非常相似。唯一的區(qū)別與Temp&Hum Click搭載的HTS221溫濕度傳感器的使用有關(guān)。感謝 Zerynth,您只需要幾行Python ,就可以從傳感器獲取真實(shí)數(shù)據(jù)并將其發(fā)送到 LoRa 網(wǎng)絡(luò)!
通過(guò) MQTT 從 The Things Network 控制臺(tái)獲取數(shù)據(jù)
現(xiàn)在是從 TTN 控制臺(tái)獲取數(shù)據(jù)的時(shí)候了。為此,我們準(zhǔn)備了一個(gè)非常簡(jiǎn)單的 Python 腳本,該腳本使用?Eclipse Paho MQTT Python 客戶端庫(kù),該客戶端庫(kù)實(shí)現(xiàn)了MQTT協(xié)議的 3.1 和 3.1.1 版。
請(qǐng)注意,您必須在筆記本電腦上運(yùn)行此腳本,因此您需要在 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 實(shí)時(shí)繪制傳感器數(shù)據(jù)
一旦你的計(jì)算機(jī)中有了數(shù)據(jù),你就可以用它做各種各樣的事情。在這種情況下,我們想要讀取這些溫度和濕度值并將它們繪制為時(shí)間的函數(shù)。
因?yàn)槲覀兿矚g Python,所以我們準(zhǔn)備了一個(gè)名為“ plot_data.py ”的腳本,它為此使用了Matplotlib庫(kù)。
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()
請(qǐng)注意,您必須在之前的腳本中導(dǎo)入此文件才能正常工作。這就是情節(jié)的樣子。隨著數(shù)據(jù)的不斷涌入,它會(huì)向右滾動(dòng)。
使用 Zerynth Studio PRO 擴(kuò)展您的 LoRa 網(wǎng)絡(luò)
以下列表包括一些LoRa?關(guān)鍵特性:
- 遠(yuǎn)距離:15 – 20 公里;
- 電池壽命長(zhǎng):超過(guò)十年;
- 百萬(wàn)節(jié)點(diǎn)!
Zerynth Studio?的免費(fèi)版本允許您使用LoRa解決方案原型所需的所有功能,但您最多可以免費(fèi)為每個(gè)受支持的電路板編程 5 個(gè)單元。您可以使用Zerynth Studio PRO?版本(從 6 月 28 日開始提供,預(yù)購(gòu)可享受高達(dá) 50% 的折扣)解鎖此限制,該?版本還將包括工業(yè)級(jí)功能,例如:
- 可選擇實(shí)時(shí)操作系統(tǒng);
- 無(wú)線更新開發(fā);
- 硬件驅(qū)動(dòng)的安全固件以工業(yè)規(guī)模燒錄在設(shè)備上;
- …以及更多
通過(guò)Zerynth 學(xué)院
- 如何使用Python繪制PDF文件教程詳細(xì)說(shuō)明 12次下載
- MPLAB數(shù)據(jù)監(jiān)視與控制界面開發(fā)的實(shí)時(shí)數(shù)據(jù)監(jiān)視軟件詳細(xì)中文資料介紹
- 紫金橋實(shí)時(shí)數(shù)據(jù)庫(kù)實(shí)現(xiàn)外置數(shù)據(jù)處理模型 5次下載
- 紫金橋實(shí)時(shí)數(shù)據(jù)庫(kù)_實(shí)時(shí)數(shù)據(jù)轉(zhuǎn)儲(chǔ)功能深度剖析 8次下載
- 紫金橋實(shí)時(shí)數(shù)據(jù)庫(kù)在石化領(lǐng)域的應(yīng)用 11次下載
- Ebase實(shí)時(shí)數(shù)據(jù)庫(kù)手冊(cè) 25次下載
- 一種實(shí)時(shí)數(shù)據(jù)管理系統(tǒng)的開發(fā) 36次下載
- 基于LonWorks的DSP智能實(shí)時(shí)數(shù)據(jù)采集節(jié)點(diǎn) 28次下載
- 基于PC 機(jī)的多通道實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)
- 一種基于實(shí)時(shí)數(shù)據(jù)倉(cāng)庫(kù)的實(shí)時(shí)DSS體系結(jié)構(gòu)
- 組態(tài)軟件實(shí)時(shí)數(shù)據(jù)庫(kù)研究
- 基于Linux的嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)的設(shè)計(jì)
- 基于PHD實(shí)時(shí)數(shù)據(jù)庫(kù)的電氣監(jiān)控系統(tǒng)
- 基于實(shí)時(shí)數(shù)據(jù)交換技術(shù)的數(shù)據(jù)通信
- DCS組態(tài)軟件實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng)的設(shè)計(jì)
- 基于Python的地圖繪制教程 919次閱讀
- 物聯(lián)網(wǎng)中的PLC如何實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)采集 816次閱讀
- 如何克服LoRa?終端節(jié)點(diǎn)設(shè)計(jì)中的挑戰(zhàn) 491次閱讀
- python日常記賬本源代碼 1173次閱讀
- LoRa節(jié)點(diǎn)、LoRa服務(wù)器和終端應(yīng)用之間的數(shù)據(jù)傳輸 4059次閱讀
- 詳談Python的數(shù)據(jù)模型和對(duì)象模型 2452次閱讀
- 實(shí)時(shí)數(shù)據(jù)體系建設(shè)的總體方案的三部分 6598次閱讀
- Python如何爬取實(shí)時(shí)變化的WebSocket數(shù)據(jù) 3439次閱讀
- 基于嵌入式Linux系統(tǒng)平臺(tái)并可應(yīng)用于監(jiān)控組態(tài)軟件實(shí)時(shí)數(shù)據(jù)庫(kù)的設(shè)計(jì)方案詳解 1794次閱讀
- 基于Facebook開發(fā)的實(shí)時(shí)數(shù)據(jù)壓縮程序 1175次閱讀
- 根據(jù)電網(wǎng)特點(diǎn)對(duì)實(shí)時(shí)數(shù)據(jù)庫(kù)的測(cè)試要點(diǎn)的幾個(gè)方面 1746次閱讀
- 如何快速學(xué)會(huì)Python?利用Python進(jìn)行數(shù)據(jù)分析 1w次閱讀
- python串口接收數(shù)據(jù) 4.5w次閱讀
- 基于CYUSB3014的高速實(shí)時(shí)數(shù)據(jù)采集系統(tǒng) 1w次閱讀
- 一種高速實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)方案 4671次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多