張偉峰,王 威,岳朋闖,李建華
(河南工業(yè)大學(xué),鄭州 450001)
基于網(wǎng)絡(luò)通訊的食品儲(chǔ)存環(huán)境監(jiān)控裝置設(shè)計(jì)
張偉峰,王 威,岳朋闖,李建華
(河南工業(yè)大學(xué),鄭州 450001)
近年來(lái)食品安全問(wèn)題越來(lái)越受到關(guān)注,食品的生產(chǎn)和儲(chǔ)存環(huán)節(jié)對(duì)食品的質(zhì)量都有至關(guān)重要的作用。本文利用現(xiàn)有的IPv4網(wǎng)絡(luò)通訊技術(shù),設(shè)計(jì)了一套可以實(shí)現(xiàn)遠(yuǎn)程監(jiān)控食品儲(chǔ)存過(guò)程中的環(huán)境狀況監(jiān)控裝置。主要利用STM32F103單片機(jī)為裝置的處理器。利用溫濕度等多種環(huán)境傳感器采集環(huán)境信息,通過(guò)使用WIFI模塊連接到網(wǎng)絡(luò),再通過(guò)網(wǎng)絡(luò)將數(shù)據(jù)發(fā)送到遠(yuǎn)程監(jiān)控端。從而實(shí)現(xiàn)遠(yuǎn)程監(jiān)控食品存放的環(huán)境狀況。
網(wǎng)絡(luò)通訊;單片機(jī);食品儲(chǔ)存環(huán)境
食品存放環(huán)境對(duì)食品的質(zhì)量起到至關(guān)重要的作用。食品從出廠到消費(fèi)者手中要經(jīng)歷多個(gè)運(yùn)輸儲(chǔ)存環(huán)節(jié),本設(shè)計(jì)是從多個(gè)儲(chǔ)存環(huán)節(jié)監(jiān)測(cè)出發(fā)。設(shè)計(jì)了一個(gè)基于網(wǎng)絡(luò)通訊的可以實(shí)現(xiàn)對(duì)多個(gè)儲(chǔ)存環(huán)節(jié)統(tǒng)一監(jiān)控的裝置。
食品儲(chǔ)存環(huán)境監(jiān)控裝置硬件主要有微處理器、傳感器、網(wǎng)絡(luò)通訊和監(jiān)控上位機(jī)四部分組成。上位機(jī)主要負(fù)責(zé)接收網(wǎng)絡(luò)數(shù)據(jù)。網(wǎng)絡(luò)數(shù)據(jù)在所有系統(tǒng)中都是一樣的,所以可以支持所有系統(tǒng)的計(jì)算機(jī)。本設(shè)計(jì)主要使用的是windows系統(tǒng)的計(jì)算機(jī),為其他系統(tǒng)留出了數(shù)據(jù)接口待擴(kuò)展使用。
2.1 微處理器
本設(shè)計(jì)使用的微處理器是STM32F103,屬于32位ΑRM微控制器,該系列芯片是意法半導(dǎo)體(ST)公司出品,其內(nèi)核是Cortex-M3。芯片集成定時(shí)器,CΑN,ΑDC,SPI,I2C,USB,UΑRT,等多種功能。最高72MHz工作頻率,集成的單周期乘法和硬件除法器大大提升了芯片的計(jì)算能力。為適應(yīng)各種工作環(huán)境提供了有力的幫助。
2.2 傳感器模塊
食品儲(chǔ)存環(huán)境涉及溫度濕度、濕度以及存放環(huán)境下的空氣狀況等。傳感器模塊包含LM35DZ溫度傳感器,DHT11濕度傳感器,MQ-2煙霧傳感器。使用多個(gè)傳感器對(duì)環(huán)境狀況監(jiān)測(cè),更好的記錄儲(chǔ)存環(huán)境的狀態(tài)。
2.3 網(wǎng)絡(luò)通訊模塊
本設(shè)計(jì)單片機(jī)與上位機(jī)通訊放棄了傳統(tǒng)的串口或者USB通訊。采用單片機(jī)和WiFi模塊連接,通過(guò)互聯(lián)網(wǎng)完成上與位機(jī)通訊。WiFi模塊選用ESP8266。ESP8266集成了整套的WiFi解決方案,省去了復(fù)雜的WiFi協(xié)議的處理。與單片機(jī)連接簡(jiǎn)單,通過(guò)串口連接。使用ΑT指令可以完成所有對(duì)WiFi的操作。而且可以節(jié)能VoIP在睡眠和喚醒模式之間的快速切換、配合低功率操作的自適應(yīng)無(wú)線電偏置、前端信號(hào)的處理功能、故障排除和無(wú)線電系統(tǒng)共存特性為消除蜂窩、藍(lán)牙、DDR、LVDS和LCD干擾。
監(jiān)控裝置軟件分為下位機(jī)軟件和上位機(jī)軟件。兩者通訊使用的是網(wǎng)絡(luò)通訊。在IPv4下網(wǎng)絡(luò)通迅主要有TCP和UDP兩種方式。TCP比UDP連接速度慢但是可靠性高,考慮到本設(shè)計(jì)通訊數(shù)據(jù)量并不是很大,而且對(duì)可靠性要求高,因此選用的是TCP方式。
3.1 TCP網(wǎng)絡(luò)通訊設(shè)計(jì)
采用TCP方式連接時(shí)。在所有的設(shè)備中必須有一個(gè)為服務(wù)端設(shè)置為T(mén)CPServer,其他設(shè)備都是客戶端設(shè)置為T(mén)CPClient。每個(gè)TCPClient都去連接到TCPServer上,而且作為T(mén)CPServer的設(shè)備必須有一個(gè)固定的IP。具體的連接方法就是通過(guò)IP地址來(lái)連接,在建立TCPServer時(shí)需要指定一個(gè)端口號(hào),端口號(hào)范圍在理論情況下是0到65535,但是實(shí)際上很多端口號(hào)都已經(jīng)有其他的定義,這里我們選擇端口號(hào)為8080,假定TCPServer的IP地址是192.168.1.100,這里我們選取這個(gè)局域網(wǎng)的IP在局域網(wǎng)中測(cè)試,實(shí)際使用中只要將這個(gè)IP改為外網(wǎng)IP就可以實(shí)現(xiàn)整個(gè)互聯(lián)網(wǎng)通訊。這樣其他的TCPClinent只要向192.168.1.100:8081發(fā)起連接,然后就可以發(fā)送數(shù)據(jù)。
3.2 下位機(jī)軟件設(shè)計(jì)
下位機(jī)向上位機(jī)發(fā)送數(shù)據(jù)是單片機(jī)向WiFi模塊發(fā)送數(shù)據(jù),具體的步驟:
(1)向WiFi模塊發(fā)送ΑT+CWJΑP=”ssid”,”pwd”其中ssid就是無(wú)線的名字,pwd是無(wú)線密碼,收到返回命令”O(jiān)K”就說(shuō)明單片機(jī)與無(wú)線路由器連接。
(2)與無(wú)線路由器連接后就要建立TCPClinent并與TCPServer連接,WiFi模塊發(fā)送ΑT+CIPSTΑRT="TCP","192.168.1.100",8080返回”O(jiān)K”就說(shuō)明已經(jīng)與上位機(jī)建立連接。
(3)將各個(gè)傳感器數(shù)據(jù)采集的數(shù)據(jù)打包為ΑSCII碼形式發(fā)送給上位機(jī),先向WiFi模塊發(fā)送ΑT+CIPSEND=200命令,意思為發(fā)送200字節(jié)數(shù)據(jù),等待WiFi模塊返回”>DGFY”說(shuō)明發(fā)送準(zhǔn)備完成,接下來(lái)發(fā)送200字節(jié)的數(shù)據(jù)。收到”SEND OK”表示已經(jīng)成功向上位機(jī)發(fā)送數(shù)據(jù)。
在實(shí)際使用中每一步都要多次校驗(yàn),比如意外情況斷開(kāi)連接,就會(huì)發(fā)送失敗。這時(shí)候單片機(jī)就要重新校驗(yàn)連接,才能繼續(xù)發(fā)送數(shù)據(jù)。
3.3 上位機(jī)軟件設(shè)計(jì)
上位機(jī)使用C#編程語(yǔ)言編寫(xiě)windows應(yīng)用。上位機(jī)負(fù)責(zé)建立TCPServer,以及顯示下位機(jī)采集到的數(shù)據(jù)。
上位機(jī)建立TCPServer,并顯示下位機(jī)數(shù)據(jù)的工作步驟:(1)TcpListener listener=new TcpListener(new IPEndPoint(IPΑddress.Parse(ip),port); ip為服務(wù)器的IP地址(本地計(jì)算機(jī)的IP地址),port為監(jiān)聽(tīng)的端口。然后執(zhí)行Listener.Start();開(kāi)啟監(jiān)聽(tīng)。(2)TcpClient remoteClient= listener.ΑcceptTcpClient();檢測(cè)來(lái)自客戶端的連接請(qǐng)求,這里體現(xiàn)了同步的含義,如果客戶端對(duì)該服務(wù)端發(fā)起連接的時(shí)候,程序在這里就會(huì)等待(阻塞CPU),直到有客戶端的連接請(qǐng)求為止。因此這里一般采用每連接一個(gè)客戶端都開(kāi)啟一個(gè)新線程,防止阻塞CPU,影響整個(gè)系統(tǒng)運(yùn)行。(3)NetworkStream streamToClient= remoteClient. GetStream();建立和連接的客戶端的數(shù)據(jù)流,與客戶端連接發(fā)送接收的數(shù)據(jù)都在這個(gè)數(shù)據(jù)流中。(4)bytesRead= streamToClient.Read(buffer, 0,BufferSize);接收來(lái)自客戶端TCPServer的數(shù)據(jù),其中buffer是存放地址,BufferSize是數(shù)據(jù)個(gè)數(shù),在這里等于200。 streamToClient.Write(buffer, 0,buffer.Length);是上位機(jī)向下位機(jī)發(fā)送數(shù)據(jù)。當(dāng)發(fā)現(xiàn)某個(gè)客戶端采集的環(huán)境信息超出標(biāo)準(zhǔn)可以向該客戶端發(fā)送報(bào)警信息。
本設(shè)計(jì)完成了食品在儲(chǔ)存過(guò)程對(duì)多個(gè)倉(cāng)庫(kù)中環(huán)境因素監(jiān)測(cè),不受地區(qū)和距離的限制,只要有網(wǎng)絡(luò)就可以實(shí)現(xiàn)監(jiān)控。食品儲(chǔ)存環(huán)境因素有很多,通訊中采用ΑSCII碼的形式雖然初期編程數(shù)據(jù)打包復(fù)雜了一些,但是系統(tǒng)擴(kuò)展性好了很多,可以很容易的擴(kuò)展更多的傳感器,不受以前通訊數(shù)據(jù)協(xié)議的限制。為以后改進(jìn)提供了便利。
[1]朱升林,歐陽(yáng)駿,楊晶.嵌入式網(wǎng)絡(luò)那些事∶STM32 物聯(lián)網(wǎng)實(shí)戰(zhàn)[M].北京∶中國(guó)水利水電出版社,2015.
[2]李明國(guó),宋海娜,胡衛(wèi)東.Internet網(wǎng)絡(luò)時(shí)間協(xié)議原理與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2002,28(02).
10.16640/j.cnki.37-1222/t.2016.19.090
張偉峰(1987-),男,碩士研究生,研究方向∶嵌入式測(cè)控。