国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于ESP32平臺(tái)和MQTT協(xié)議的遠(yuǎn)程控制系統(tǒng)設(shè)計(jì)

2020-08-31 01:38王浩
軟件工程 2020年8期

摘 ?要:隨著工業(yè)互聯(lián)網(wǎng)的快速發(fā)展,智能化遠(yuǎn)程控制成為現(xiàn)代工業(yè)發(fā)展的必然趨勢(shì),目前主流的基于TCP/IP網(wǎng)絡(luò)連接方式是一種MQTT通信協(xié)議,它可以通過(guò)發(fā)布和訂閱方式進(jìn)行數(shù)據(jù)雙向通信,是面向物聯(lián)網(wǎng)遠(yuǎn)程通信的輕量級(jí)連接協(xié)議。本文設(shè)計(jì)一種基于MQTT通信協(xié)議在ESP32硬件平臺(tái)上的遠(yuǎn)程控制設(shè)計(jì)方案,利用Python語(yǔ)言編程實(shí)現(xiàn)遠(yuǎn)程控制功能,并通過(guò)MQTT通信協(xié)議方式實(shí)現(xiàn)遠(yuǎn)程控制風(fēng)扇。實(shí)驗(yàn)結(jié)果表明:該系統(tǒng)數(shù)據(jù)通信穩(wěn)定和可靠性強(qiáng),具有一定的應(yīng)用前景。

關(guān)鍵詞:ESP32;MQTT;Python

中圖分類號(hào):TP323 ? ? 文獻(xiàn)標(biāo)識(shí)碼:A

Abstract: With the fast development of the industrial Internet, intelligent remote control has become the inevitable trend of the modern industry development. At present, the main TCP/ IP-based network connection mode is an MQTT (Message Queuing Telemetry Transport) communication protocol. As a lightweight connection protocol for Internet of Things telecommunication, it allows two-way data communication via publishing and subscription. This paper designs a remote control plan on the ESP32 hardware platform based on MQTT communication protocol. It uses Python as the programming language to realize remote control and remote control fans through MQTT communication protocol. The experiment result shows that the data communication of this system is stable with higher reliability, and has a certain application prospect.

Keywords: ESP32; MQTT; Python

1 ? 引言(Introduction)

隨著工業(yè)互聯(lián)網(wǎng)技術(shù)和無(wú)線網(wǎng)絡(luò)通信技術(shù)的迅速發(fā)展,智能制造產(chǎn)業(yè)對(duì)遠(yuǎn)程智能化控制工業(yè)設(shè)備的開(kāi)發(fā)和應(yīng)用不斷加大力度,使得對(duì)工業(yè)嵌入式設(shè)備和PC端之間相互通信提出了更高的要求,如果采用原始的socket網(wǎng)絡(luò)通信,并不能保障數(shù)據(jù)通信可以準(zhǔn)確到達(dá)接收方,同時(shí)數(shù)據(jù)的可靠性和實(shí)時(shí)性也會(huì)有一定的影響[1]。為了保障數(shù)據(jù)信息傳遞的服務(wù)質(zhì)量,本文提出一種在ESP32硬件平臺(tái)上基于MQTT通信協(xié)議方式,使用Python語(yǔ)言實(shí)現(xiàn)遠(yuǎn)程通信控制風(fēng)扇設(shè)計(jì)方案。首先啟動(dòng)PC端MQTT云服務(wù)器,然后利用ESP32硬件模塊的WIFI功能連接MQTT云服務(wù)器,并作為MQTT通信客戶端,向MQTT云服務(wù)器進(jìn)行訂閱消息,一旦有PC端向MQTT云服務(wù)器進(jìn)行發(fā)布消息,就可以實(shí)現(xiàn)雙方消息的相互推送[2],并達(dá)到遠(yuǎn)程控制硬件設(shè)備。

2 ? 總體設(shè)計(jì)(Overall design)

為了提高PC終端對(duì)智能制造產(chǎn)業(yè)中的執(zhí)行機(jī)構(gòu)實(shí)現(xiàn)遠(yuǎn)程控制的靈活性和可擴(kuò)展性,本系統(tǒng)以ESP32硬件平臺(tái)為載體,一方面利用Python語(yǔ)言編程構(gòu)建MQTT的客戶端,通過(guò)訂閱的通信方式與MQTT云服務(wù)器進(jìn)行數(shù)據(jù)通信,另一方面PC終端也通過(guò)MQTT云服務(wù)器進(jìn)行發(fā)布相關(guān)信息,這樣雙方就可以通過(guò)云服務(wù)器作為中間橋梁,實(shí)現(xiàn)遠(yuǎn)程控制硬件設(shè)備,如圖1所示系統(tǒng)的整體架構(gòu)。

3 ? 系統(tǒng)的硬件設(shè)計(jì)(Hardware design of the system)

3.1 ? ESP32平臺(tái)的硬件設(shè)計(jì)

ESP32硬件平臺(tái)中的MCU芯片是一款可作為獨(dú)立運(yùn)行應(yīng)用程序的設(shè)備模塊,其主要載體可以通過(guò)SPI/SDIO或I2C/UART接口提供WiFi和藍(lán)牙功能[3]。另外ESP32模塊只需極少的外圍器件,即可實(shí)現(xiàn)安全可靠數(shù)據(jù)通信處理功能。本文主要使用GPIO輸出功能和WIFI通信的STA客戶端模式,通過(guò)ESP32模塊提供的WiFi功能連接至MQTT云服務(wù)器端實(shí)現(xiàn)對(duì)風(fēng)扇的遠(yuǎn)程控制,ESP32硬件平臺(tái)電路如圖2所示。

3.2 ? 風(fēng)扇控制硬件設(shè)計(jì)

為了能夠通過(guò)ESP32硬件模塊驅(qū)動(dòng)大功率的風(fēng)扇設(shè)備運(yùn)行,需要將ESP32硬件模塊的GPIO19引腳連接L9110直流電機(jī)驅(qū)動(dòng)芯片,這里L(fēng)9110芯片是為控制和驅(qū)動(dòng)電機(jī)設(shè)計(jì)的兩通道推挽式功率放大專用集成電路器件[4],該芯片有兩個(gè)TTL/CMOS兼容電平的輸入,具有較大的電流驅(qū)動(dòng)能力,每通道能通過(guò)750—800mA的持續(xù)電流,它的兩個(gè)輸出端能直接驅(qū)動(dòng)直流風(fēng)扇電機(jī)的運(yùn)行和停止,風(fēng)扇控制硬件電路如圖3所示。

4 ? 系統(tǒng)的軟件設(shè)計(jì)(Software design of the system)

4.1 ? 無(wú)線連接WiFi功能程序設(shè)計(jì)

ESP32設(shè)備端系統(tǒng)軟件部分主要是利用Python語(yǔ)言在VSCode開(kāi)發(fā)平臺(tái)上進(jìn)行功能代碼編寫(xiě),實(shí)現(xiàn)MQTT通信控制功能[5],這里包括無(wú)線連接WiFi功能、MQTT客戶端與MQTT云服務(wù)器端數(shù)據(jù)通信功能。

為了能夠讓ESP32硬件平臺(tái)連接WIFI的AP熱點(diǎn),需要將WIFI啟動(dòng)為STA模式,這里首先從JSON配置文件中讀取熱點(diǎn)名稱和密碼,如果沒(méi)有產(chǎn)生配置文件,用戶需要從終端輸入熱點(diǎn)和密碼,然后保存,接著連接當(dāng)前環(huán)境AP熱點(diǎn),在連接網(wǎng)絡(luò)成功之后,顯示ESP32設(shè)備平臺(tái)IP、子網(wǎng)掩碼、網(wǎng)關(guān)和DNS信息,如圖4所示ESP32硬件平臺(tái)連接WiFi功能流程。

無(wú)線連接WiFi主要功能代碼如下:

def do_connect():

import json

import network

# 嘗試讀取配置文件wifi_confi.json,這里以json的方式來(lái)存儲(chǔ)WIFI配置

# wifi_config.json在根目錄下

# 若不是初次運(yùn)行,則將文件中的內(nèi)容讀取并加載到字典變量config

try:

with open('wifi_config.json','r') as f:

config = json.loads(f.read())

# 若初次運(yùn)行,則將進(jìn)入except執(zhí)行配置文件的創(chuàng)建

except:

essid = input('wifi name:') # 輸入essid

password = input('wifi passwrod:') # 輸入password

config = dict(essid=essid, password=password) # 創(chuàng)建字典

with open('wifi_config.json','w') as f:

f.write(json.dumps(config)) # 將字典序列化為json字符串,存入wifi_config.json

#以下為正常的WIFI連接流程

wifi = network.WLAN(network.STA_IF)

if not wifi.isconnected():

print('connecting to network...')

wifi.active(True)

wifi.connect(config['essid'], config['password'])

while not wifi.isconnected():

pass

print('network config:', wifi.ifconfig())

if __name__ == '__main__':

do_connect()

4.2 ? MQTT客戶端連接MQTT云服務(wù)器功能程序設(shè)計(jì)

4.2.1 ? MQTT協(xié)議通信流程

MQTT通信協(xié)議是一種基于發(fā)布和訂閱模型的輕量級(jí)消息傳輸網(wǎng)絡(luò)協(xié)議,這個(gè)輕量級(jí)協(xié)議可在設(shè)備硬件資源受限、高延遲以及帶寬有限的網(wǎng)絡(luò)上實(shí)現(xiàn)。它可以為物聯(lián)網(wǎng)設(shè)備的多樣化應(yīng)用場(chǎng)景提供適當(dāng)?shù)馁Y源平衡和靈活性服務(wù)。另外在基于MQTT協(xié)議的IOT網(wǎng)絡(luò)里面有發(fā)布者Publisher負(fù)責(zé)發(fā)布消息,訂閱者Subscriber訂閱消息,以及MQTT云服務(wù)器中轉(zhuǎn)站負(fù)責(zé)將信息從發(fā)布者傳遞到訂閱者[6]。這里在進(jìn)行MQTT異步消息通信前,需要建立可靠的TCP網(wǎng)絡(luò)通信連接,整個(gè)通信過(guò)程大致分成三個(gè)部分。

(1)PC端MQTT云服務(wù)器開(kāi)啟Server模式

MQTT云服務(wù)器是整個(gè)網(wǎng)絡(luò)通信的核心,這里采用Mosquitto作為整個(gè)系統(tǒng)MQTT云服務(wù)端,當(dāng)開(kāi)啟Server模式之后,所有MQTT報(bào)文都是通過(guò)Mosquitto進(jìn)行管理和轉(zhuǎn)發(fā)的,首先ESP32硬件平臺(tái)利用PC端MQTT云服務(wù)器IP地址和端口號(hào)作為參數(shù),創(chuàng)建一個(gè)訂閱信息的MQTT客戶端,然后PC端再創(chuàng)建一個(gè)可以發(fā)布消息的MQTT客戶端,這樣通過(guò)MQTT云服務(wù)器的中轉(zhuǎn)站可以實(shí)現(xiàn)ESP32設(shè)備端和PC端之間信息的訂閱和發(fā)布。

(2)ESP32設(shè)備平臺(tái)訂閱主題過(guò)程

當(dāng)MQTT云服務(wù)器開(kāi)啟Server模式之后,ESP32設(shè)備平臺(tái)通過(guò)設(shè)置PC端MQTT云服務(wù)器IP地址和端口號(hào),啟動(dòng)與MQTT云服務(wù)端進(jìn)行長(zhǎng)連接,然后向MQTT云服務(wù)端訂閱TOPIC_ID的主題為Fan_Control,以實(shí)現(xiàn)一個(gè)MQTT客戶端創(chuàng)建。

(3)PC端發(fā)布主題

首先PC端上通過(guò)MQTT云服務(wù)器IP地址和端口號(hào)與MQTT云服務(wù)端進(jìn)行長(zhǎng)連接,實(shí)現(xiàn)PC端的MQTT客戶端創(chuàng)建,然后發(fā)送數(shù)據(jù)幀TOPIC_ID+消息指令,這里TOPIC_ID: Fan_Control, MESSAGE: Fan_on或者Fan_off。這樣就實(shí)現(xiàn)了向MQTT云服務(wù)端發(fā)布主題。

一旦MQTT云服務(wù)端收到發(fā)送過(guò)來(lái)數(shù)據(jù)幀之后,發(fā)現(xiàn)ESP32設(shè)備平臺(tái)訂閱了Fan_Control這個(gè)主題,立即將數(shù)據(jù)幀轉(zhuǎn)發(fā)至ESP32設(shè)備平臺(tái),最后根據(jù)消息指令Fan_on或者Fan_off實(shí)現(xiàn)對(duì)風(fēng)扇的開(kāi)啟和關(guān)閉操作,如圖5所示系統(tǒng)訂閱與發(fā)布流程。

4.2.2 ? ESP32設(shè)備平臺(tái)的MQTT客戶端實(shí)現(xiàn)

為了使ESP32硬件平臺(tái)能夠創(chuàng)建MQTT客戶端對(duì)象,并連接MQTT云服務(wù)器,實(shí)現(xiàn)訂閱控制風(fēng)扇的功能。這里使用Python編程語(yǔ)言在VSCode開(kāi)發(fā)平臺(tái)上,調(diào)用針對(duì)ESP32平臺(tái)的MQTT通信功能庫(kù),實(shí)現(xiàn)MQTT客戶端連接MQTT云服務(wù)器訂閱功能[7],主要功能代碼如下:

from umqtt.simple import MQTTClient

import time

from machine import Pin

fan = Pin(19, Pin.OUT) ?#設(shè)置控制風(fēng)扇的GPIO19引腳

SERVER = '云服務(wù)器IP地址'

TOPIC = b'Fan_Control'

def mqtt_callback(topic, msg):

if msg==b"Fan_on":

fan.value(1) #風(fēng)扇運(yùn)行

if msg==b"Fan_off":

fan.value(0) #風(fēng)扇停止

def connmqtt():

client = MQTTClient(CLIENT_ID, SERVER)

client.set_callback(mqtt_callback)

client.connect()

client.subscribe(TOPIC)#訂閱主題

5 ? 系統(tǒng)測(cè)試(System testing)

為了驗(yàn)證ESP32硬件平臺(tái)和PC端之間通過(guò)MQTT云服務(wù)器作為中轉(zhuǎn)站,實(shí)現(xiàn)雙方數(shù)據(jù)信息的訂閱和發(fā)布,這里采用第三方Mosquitto作為MQTT云服務(wù)器,當(dāng)雙方連接MQTT云服務(wù)器成功之后,一旦ESP32硬件平臺(tái)向MQTT云服務(wù)器訂閱主題為Fan_Control,如果PC端向MQTT云服務(wù)器發(fā)布主題信息和控制風(fēng)扇的命令消息之后,ESP32硬件平臺(tái)通過(guò)訂閱主題的信息獲得PC端發(fā)來(lái)的數(shù)據(jù)幀,最后通過(guò)數(shù)據(jù)幀中包含F(xiàn)an_on或者Fan_off命令信息實(shí)現(xiàn)對(duì)風(fēng)扇設(shè)備的遠(yuǎn)程控制操作,如圖6所示基于MQTT客戶端運(yùn)行界面。

6 ? 結(jié)論(Conclusion)

文中采用ESP32硬件平臺(tái)和PC端通過(guò)MQTT通信協(xié)議連接MQTT云服務(wù)器之后,實(shí)現(xiàn)數(shù)據(jù)雙方的相互推送,并利用Python語(yǔ)言編程實(shí)現(xiàn)ESP32硬件平臺(tái)的MQTT數(shù)據(jù)訂閱通信功能,PC端設(shè)備通過(guò)MQTT發(fā)布數(shù)據(jù)信息實(shí)現(xiàn)對(duì)ESP硬件平臺(tái)的風(fēng)扇設(shè)備進(jìn)行遠(yuǎn)程控制。實(shí)驗(yàn)結(jié)果表明:該系統(tǒng)操作方便和通信可靠,具有一定的應(yīng)用前景。

參考文獻(xiàn)(References)

[1] 張玉杰,張海濤,張婷婷.基于MQTT的物聯(lián)網(wǎng)系統(tǒng)消息發(fā)布/訂閱方法研究[J]電視技術(shù),2017(Z3):23-25.

[2] 崔自賞,陳冰,艾武,等.基于MQTT協(xié)議的物聯(lián)網(wǎng)電梯監(jiān)控系統(tǒng)設(shè)計(jì)[J].電子測(cè)量技術(shù),2018(07):15-17.

[3] 范興隆.ESP8266在智能家居監(jiān)控系統(tǒng)中的應(yīng)用[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2016,16(9):47-50.

[4] 王浩.基于Esp8266WIFI平臺(tái)和MQTT協(xié)議的遠(yuǎn)程設(shè)備數(shù)據(jù)采集與控制設(shè)計(jì)[J].泰山學(xué)院學(xué)報(bào),2017,39(06):86-91.

[5] 姚丹謝.雪松.基于MQTT協(xié)議的物聯(lián)網(wǎng)通信系統(tǒng)的研究與實(shí)訓(xùn)[J].信息通信,2016,3(20):33-35.

[6] 蔣鵬,袁嵩.基于MQTT協(xié)議的綜合消息推送[J].現(xiàn)代計(jì)算機(jī),2015,4(16):20-22.

[7]吳俊輝,吳桂初,陳沖,等.基于MQTT協(xié)議的物聯(lián)網(wǎng)網(wǎng)關(guān)設(shè)計(jì)[J].溫州大學(xué)學(xué)報(bào)(自然科學(xué)版),2019,40(04):54-61.

作者簡(jiǎn)介:

王 ?浩(1971-),男,碩士,副教授.研究領(lǐng)域:物聯(lián)網(wǎng)工程應(yīng)用.