


摘? 要:為了突破物聯網實訓教學受物理設備的限制,保證每個學生的實訓效果,幫助學生更好的理解網絡協議工作原理和工作方式,文章對Packet Tracer物聯網模塊進行研究。通過設計一個溫濕度傳感器監控系統,實現設備之間TCP連接傳輸數據且上傳數據到OneNet平臺并通過OneNet下發數據遠程控制,為網絡技術專業教師提供新的實訓設計思路及提升學生的實踐能力和相關技能。
關鍵詞:物聯網實訓;Packet Tracer模擬器;溫濕度傳感器;OneNet平臺;組網
中圖分類號:TP212.6;TP315.69? ? ? 文獻標識碼:A 文章編號:2096-4706(2020)20-0166-04
Training Design of Temperature and Humidity Sensor Based on Packet Tracer
YU Zhenyang
(Guangdong Polytechnic of Science and Technology,Zhuhai? 519090,China)
Abstract:In order to break through the limitations of physical equipment in IoT training and teaching,ensure that each students training effect,help students better understand the working principle of the network protocol and the way of work,the Packet Tracer IoT modules are studied in this paper. By designing a temperature and humidity sensor monitoring system to realize the TCP connection between devices to transmit data and upload the data to the OneNet platform and remotely control the data through OneNet,provide new training design ideas for network technology teachers and improve studentspractical ability and related skills.
Keywords:IoT training;Packet Tracer simulator;temperature and humidity sensor;OneNet platform;networking
0? 引? 言
當前物聯網理論教學已基本成熟,而物聯網實訓教學在以往教學中受到設備的限制,學生需要分組才可以進行實訓,小組教學中各個同學的積極性不同,難以保證每個學生的實訓效果,也難以很好地幫助學生理解相關協議的工作原理和工作方式,最新版本的Packet Tracer 7.0以上軟件新添加的物聯網功能,可仿真智能家居的組網,并實現組網過程中的幾項關鍵技術。通過設計智能家居組網實驗與實踐課程,可幫助物聯網工程專業學生理解和掌握物聯網基礎理論,將理論應用到實踐,從而激發學生學習興趣和創新思維。[1-4]Packet Trace是一款網絡模擬平臺,利用該平臺可以進行網絡和通信仿真實驗,以及物聯網仿真實驗[5]。筆者利用該平臺7.2版本,設計了基于溫濕度的環境監測系統的物聯網綜合實驗,對實驗教學起到很好的支撐作用,并可以輔助學生完成對于產品原型的構建,拓展學生的創新能力[6]。
1? 實驗系統整體設計
本項目使用Packet Tracer中虛擬傳感器和執行設備構建一個智能家居系統,通過控制器接入OneNet平臺,實現設備間的聯動及設備的遠程控制[7]。整體設計采用了物聯網三層架構模式,即系統由感知層、傳輸層和應用層組成[8],如圖1所示。感知層由溫濕度傳感器組成,傳輸層中的MCU0、MCU1、SBC0作為控制單元負責采集和處理溫濕度傳感器傳輸數據。應用層包括PC終端、移動終端和OneNet服務器,可通過上述終端登錄IoT服務器觀察和監控被控設備工作狀態,并可在登錄界面通過手工發出控制信號,本項目使用了OneNet來進行控制,可在OneNet上下發閾值,來控制MCU0中的LED燈的開關情況。
2? 實驗設計
2.1? 構建實驗拓撲
根據實驗需求,規劃了MCU控制板、溫濕度傳感器、SBC控制板、LED燈等不同的物聯網物件對象,各對象的構建的實驗拓撲圖如圖2所示。
2.2? 地址規劃及連線
MCU0、MCU1、SBC0默認不帶網絡接口,雙擊MCU設備,在Physical頁面,點擊PT-IOT-NM-1CFE,在這完成設備網絡接口的添加;按照相同步驟為MCU0、MCU1、SBC0分別添加一個網絡接口,其地址規劃如表1所示。
3? 實驗系統物件功能設計
完成拓撲圖和地址規劃之后,需要對實驗系統的物件進行Python編程,以實現實驗要求,系統各個功能要求如下。
3.1? MCU與SBC進行TCP組網
MCU0、MCU1、SBC0在設置好以太網的IP地址信息后,在設備的Programming頁面通過New按鈕新建TCP應用,MCU0、MCU1通過TCP-Client-Python模塊創建TCP客戶端,SBC0通過TCP-Server-Python模塊創建TCP服務器端。
TCP應用添加完畢,修改MCU0、MCU1代碼把serverIP值設置為服務端的IP,使用默認的1234作為端口,在本項目的TCP網絡中,SBC0作為服務端,監聽1234端口,MUC0、MCU1作為客戶端,連接至SBC0的TCP套接字172.16.1.250:1234。以下為MUC1的代碼,修改serverIP、ServerPort,使得MCU1與SBC0模塊進行TCP連接。以下為MCU1的代碼實現:
from tcp import *
from time import *
serverIP = "172.16.1.250"
serverPort = 1234
client = TCPClient()
def onTCPConnectionChange(type):
print("connection to " + client.remoteIP() + " changed to state " + str(type))
def onTCPReceive(data):
print("received from " + client.remoteIP() + " with data: " + data)
from gpio import*
def main():
client.onConnectionChange(onTCPConnectionChange)
client.onReceive(onTCPReceive)
print(client.connect(serverIP, serverPort))
count = 0
while True:
count += 1
data = "hello " + str(count)
client.send(data)
sleep(5)
if __name__ == "__main__":
main()
3.2? MCU1將讀取的溫濕度數據傳輸給SBC0
修改MCU1代碼,引入GPIO模塊,新建getHumiture()函數使用analogRead(A0)讀取溫濕度數值,在getHumiture()函數中根據溫濕度設備說明進行數值轉換。然后在main()函數while部分加入創建的讀溫濕度函數,之后使用send方法把溫濕度數據作為字符串直接發給SBC0,以下為代碼實現:
def getHumiture():
humiture=analogRead(A0)
humiture=humiture*100/1023
return humiture
def main():
client.onConnectionChange(onTCPConnectionChange)
client.onReceive(onTCPReceive)
print(client.connect(serverIP, serverPort))
while True:
humiture=getHumiture()
client.send(humiture)
sleep(5)
if __name__ == "__main__":
main()
3.3? SBC0聯動MCU0進行LED燈的開關
修改MCU0的代碼,獲取來自SBC0的溫濕度數值信息,在while部分把實時溫濕度數值humiture和閾值進行比較,大于則向所有的在線用戶廣播發送字符串control:open用于通知MCU0打開LED,小于廣播發送字符串control:close用于通知MCU0關閉LED燈。以下為MCU0的代碼實現:
from tcp import *
from time import *
from gpio import *
serverIP = "172.16.1.250"
serverPort = 1234
client = TCPClient()
def onTCPConnectionChange(type):
print("connection to " + client.remoteIP() + " changed to state " + str(type))
from gpio import *
def onTCPReceive(data):
print("received from " + client.remoteIP() + " with data: " + data)
if ':' in data:
cmd = data.split(':')[-1]
if cmd == "open":
digitalWrite(0, HIGH)
if cmd == "close":
digitalWrite(0, LOW)
def main():
client.onConnectionChange(onTCPConnectionChange)
client.onReceive(onTCPReceive)
print(client.connect(serverIP, serverPort))
count = 0
while True:
sleep(5)
if __name__ == "__main__":
main()
3.4? OneNet下發閾值與SBC0聯動
SBC0作為MCU0、MCU1的服務器,接收來自MCU1的數值并比較設置的閾值,如果大于閾值則轉發給MCU0開燈信息,否則轉發關燈信息;又作為OneNet平臺的客戶端,將數值上傳至OneNet平臺,并可以接受OneNet平臺下發的數據,下發的數值如果大于閾值則轉發給MCU0開燈信息,否則轉發關燈信息。以下為SBC0的代碼實現:
from realtcp import *
from time import *
from tcp import *
from realhttp import*
serverIP = "183.230.40.40"
serverPort = 1811
auth = '*346995#humiture#humiture*'
oneNetclient = RealTCPClient()
port = 1234
server = TCPServer()
def onTCPConnectionChange(type):
if type == 3:
oneNetclient.send(auth)
from gpio import *
def onTCPReceive(data):
print("received: " + data);
if ':' in data:
value = int(data.split(':')[-1])
if value:
global humitureSplit
humitureSplit = value
humitureSplit = 50
humiture = 0
clients = []
def onTCPNewClient(client):
clients.append(client)
def onTCPConnectionChange(type):
print("connection to " + client.remoteIP() + " changed to state " + str(type))
if type ==3:
clients.remove(client)
def onTCPReceive(data):
print("received from " + client.remoteIP() + " with data: " + data)
global humiture
humiture = int(data)
print(humiture)
client.onConnectionChange(onTCPConnectionChange)
client.onReceive(onTCPReceive)
def main():
server.onNewClient(onTCPNewClient)
server.listen(port)
oneNetclient.onConnectionChange(onTCPConnectionChange)
oneNetclient.onReceive(onTCPReceive)
oneNetclient.connect(serverIP, serverPort)
while True:
sleep(5)
print(humiture)
if (humiture >= humitureSplit):
for _client in clients:
_client.send("control: open")
else:
for _client in clients:
_client.send("control: close")
if __name__ == "__main__":
main()
4? 結? 論
溫濕度監控實驗系統融合了硬件技術、網絡工程技術和軟件編程技術,具有開放、靈活、二次開發方便的特點。基于現有的實驗系統,除了當前實驗的功能拓展,也可以改變感知、傳輸或者控制設備來創建新的實驗項目:
(1)感知層實驗:可以將Packet Tracer平臺已有的環境傳感器(CO2、光照、風速、濕度、溫度等)結合到該系統,也可自行創建新的傳感器融合到系統中。
(2)傳輸層實驗:可以擴展傳輸方式為HTTP連接、UDP連接等等,也可以設計為無線連接或者無線與有限混合連接等組網方式。
基于Packet Tracer平臺的物聯網原型仿真不受實驗環境物理條件限制,可以最大限度地提高學生的動手能力,加強學生的組網、編程的實踐能力,拓展學生的創新能力。
參考文獻:
[1] 王彩霞,高玉勵.探析《計算機網絡技術》實驗課程的教學改革 [J].教育,2016(12):120.
[2] 王楊,任永,殷曉斌,等.物聯網專業網絡課程實驗教學研究與實踐 [J].杭州電子科技大學學報(自然科學版),2015,35(2):88-92.
[3] 喬焰,馬慧敏.基于Packet Tracer的智能家居組網教學設計 [J].電腦知識與技術,2018,14(6):150-153.
[4] 王志英,周興社,袁春風,等.計算機專業學生系統能力培養和系統課程體系設置研究 [J].計算機教育,2013(9):1-6.
[5] CISCO. Cisco Packet Tracer [EB/OL].[2020-09-02].https://cn.netacad.com/courses/packet-tracer.
[6] 胡文輝,王麗.談物聯網專業課堂教學的幾點思考 [J].中文信息,2015,(1):129-130.
[7] OneNet.開發文檔 [EB/OL].[2020-09-02].https://open.iot.10086.cn/devdoc/.
[8] 中國電子政務網.物聯網的十三五規劃(2016-2020年) [EB/OL].(2017-07-26).http://www.e-gov.org.cn/egov/web/article_detail.php?id=164273.
作者簡介:余振養(1989—),男,漢族,廣東廉江人,碩士研究生,研究方向:網絡安全。