閆施錦,陳 淼,劉靜波
(南京工程學(xué)院 信息與通信工程學(xué)院,江蘇 南京 211167)
當(dāng)今時(shí)代,物聯(lián)網(wǎng)技術(shù)應(yīng)用有了很大的發(fā)展。網(wǎng)絡(luò)通信的發(fā)展和智能手機(jī)、平板等終端設(shè)備的普及以及更廣的WiFi信號覆蓋范圍,為智能設(shè)備的遠(yuǎn)程控制應(yīng)用提供了良好基礎(chǔ)。同時(shí),物聯(lián)網(wǎng)云平臺(tái)的推廣應(yīng)用也極大地促進(jìn)了各種遠(yuǎn)程控制的實(shí)現(xiàn),遠(yuǎn)程控制開關(guān)系統(tǒng)在智能家居和其他工程控制中有較廣闊的應(yīng)用空間,在控制方式上一般為智能芯片控制(GSM模塊)或WiFi模塊遠(yuǎn)程控制。采用GSM短信控制方式時(shí),系統(tǒng)接收手機(jī)發(fā)送的短信,匹配短信內(nèi)容的關(guān)鍵字,對遠(yuǎn)程開關(guān)進(jìn)行控制;采用WiFi遠(yuǎn)程控制得到了更廣泛的應(yīng)用,主要實(shí)現(xiàn)智能插座一路或多路開關(guān)的通斷控制。本文設(shè)計(jì)一種以WiFi方式遠(yuǎn)程控制的開關(guān)系統(tǒng),以多模式方式實(shí)現(xiàn)按鍵模式控制、定時(shí)模式控制、循環(huán)模式控制、溫控模式控制。相比傳統(tǒng)遠(yuǎn)程開關(guān)單一的開關(guān)控制方式,更加適用于不同的應(yīng)用場合。選擇中國移動(dòng)OneNET云平臺(tái)構(gòu)建手機(jī)端可視化用戶界面,可以方便地對開關(guān)裝置實(shí)現(xiàn)遠(yuǎn)程控制。模式設(shè)定、參數(shù)設(shè)置均在手機(jī)端完成,并發(fā)送到開關(guān)裝置,開關(guān)裝置根據(jù)不同模式執(zhí)行不同的功能,根據(jù)設(shè)置的參數(shù)控制開關(guān)的運(yùn)行狀態(tài)。
多模式遠(yuǎn)程開關(guān)控制系統(tǒng)包括開關(guān)裝置部分和OneNET云平臺(tái)構(gòu)建的遠(yuǎn)程訪問控制部分。開關(guān)裝置部分包括STM32F103RCT6單片機(jī)、WiFi模塊ESP8266、時(shí)鐘芯片DS3231、繼電器驅(qū)動(dòng)、溫度傳感器DS18B20等。系統(tǒng)組成如圖1所示。手機(jī)端采用OneNET云平臺(tái)提供各種控件,例如旋鈕、文本框、按鍵等,創(chuàng)建可視化用戶界面,通過調(diào)節(jié)控件參數(shù),設(shè)定模式選項(xiàng)以及各模式下的運(yùn)行參數(shù)。
圖1 系統(tǒng)組成框圖
基本原理:系統(tǒng)接入OneNET后,單片機(jī)讀取DS3231的時(shí)鐘數(shù)據(jù)作為系統(tǒng)定時(shí)模式或循環(huán)模式下的時(shí)間信息。讀取溫度傳感器的溫度測量數(shù)據(jù),當(dāng)系統(tǒng)處于溫控模式時(shí),與設(shè)定的溫度閾值進(jìn)行比較,從而控制開關(guān)的運(yùn)作狀態(tài)。單片機(jī)通過ESP8266訪問OneNET云平臺(tái),把開關(guān)裝置的運(yùn)行時(shí)間和溫度測量值等數(shù)據(jù)發(fā)送到手機(jī)端。在云平臺(tái)創(chuàng)建手機(jī)端可視化用戶界面,實(shí)現(xiàn)開關(guān)控制的4種模式切換。手機(jī)端通過發(fā)送指令隨時(shí)控制開關(guān)裝置的運(yùn)作模式,使開關(guān)裝置能夠按照預(yù)設(shè)功能對開關(guān)進(jìn)行有效控制。
手機(jī)端模式選擇設(shè)定,設(shè)置旋鈕0~3對應(yīng)表示4種模式:
(1)模式0為按鍵模式,用戶在手機(jī)端操作按鍵控制開關(guān)通斷;
(2)模式1為定時(shí)模式,手機(jī)設(shè)置一組定時(shí)開關(guān)時(shí)間,例如18:00開、18:30關(guān),設(shè)置的參數(shù)發(fā)送到開關(guān)裝置,當(dāng)系統(tǒng)運(yùn)行到相應(yīng)時(shí)間后,實(shí)現(xiàn)開關(guān)的通斷;
(3)模式2為循環(huán)模式,開關(guān)裝置接收手機(jī)端設(shè)定的開、關(guān)分鐘數(shù)值,循環(huán)實(shí)現(xiàn)當(dāng)前開、關(guān)狀態(tài),例如開5 min,關(guān)3 min的循環(huán)模式狀態(tài);
(4)模式3為溫控模式,手機(jī)端設(shè)定溫度閾值并發(fā)送到開關(guān)裝置,當(dāng)開關(guān)裝置的溫度測量值大于閾值時(shí),開關(guān)裝置處于接通狀態(tài),反之?dāng)嚅_。
開關(guān)裝置配置有EPROM存儲(chǔ)芯片AT24C02,用以保存手機(jī)端下發(fā)指令所包含的各項(xiàng)參數(shù),包括定時(shí)時(shí)間、循環(huán)開/關(guān)時(shí)間、溫度閾值等。開關(guān)裝置接有320×240分辨率的TFT顯示屏,用以顯示各項(xiàng)參數(shù)和當(dāng)前模式。
圖2所示為開關(guān)裝置的硬件電路。以STM32F103RCT6為核心,合理分配單片機(jī)的資源,把各模塊應(yīng)用于系統(tǒng)電路中。STM32F103RCT6是基于Cortex-M3架構(gòu)的高性能處理器,內(nèi)含串口、外中斷、DMA控制器、定時(shí)器等,可滿足系統(tǒng)的應(yīng)用需求。
圖2 硬件電路設(shè)計(jì)
ESP8266作為一款高集成度的WiFi模塊,可以獨(dú)立訪問網(wǎng)絡(luò),也可以幫助其他主控芯片訪問網(wǎng)絡(luò)。ESP8266提供一組串口,接單片機(jī)串口引腳PA2和PA3,訪問OneNET云平臺(tái)。ESP8266配置為客戶端模式(STA),連接到路由器訪問網(wǎng)絡(luò),單片機(jī)的PA12連接ESP8266的復(fù)位管腳,初始化ESP8266時(shí)用以復(fù)位模塊。
單片機(jī)的PC10和PC11為IC總線,PC10為SDA數(shù)據(jù)線、PC11為SCL時(shí)鐘線。IC總線接入時(shí)鐘芯片DS3231和EPROM存儲(chǔ)芯片AT24C02,接10 kΩ上拉電阻保證電平信號。單片機(jī)通過訪問不同的器件地址讀取掛載于同一組總線上時(shí)鐘芯片和存儲(chǔ)芯片的數(shù)據(jù)。DS3231芯片器件地址為0xD0(寫)、0xD1(讀),圖2中AT24C02芯片器件地址為0xA0(寫)、0xA1(讀)。
DS3231時(shí)鐘芯片是一款內(nèi)置溫補(bǔ)晶振的時(shí)鐘芯片,供電電壓為3.3 V,DS3231的INT/SQW引腳接入單片機(jī)的PC6,該引腳是1 Hz信號輸出端,需外接10 kΩ上拉電阻。初始化DS3231時(shí),配置其控制寄存器0EH為00H,則INT/SQW輸出1 Hz方波,該信號可作為外中斷信號,接入單片機(jī)PC6,在中斷服務(wù)程序中完成處理讀取數(shù)據(jù)、讀取溫度、顯示數(shù)據(jù)等任務(wù),不占用主程序,提高了系統(tǒng)運(yùn)行效率。
DS18B20是單總線數(shù)字溫度傳感器,連接于單片機(jī)的PA11。DS18B20具備體積小、精度高、測溫范圍廣等特點(diǎn),在-10~85 ℃測量范圍內(nèi),測溫精度為±0.5 ℃,采用T0-92封裝,廣泛應(yīng)用于溫度測量、溫度調(diào)節(jié)控制等場合。圖2中,DS18B20的3腳電源接入3.3 V電壓,2腳是DQ數(shù)據(jù)輸入/輸出端,通過10 kΩ上拉電阻接3.3 V電壓,與單片機(jī)之間以單總線方式進(jìn)行數(shù)據(jù)讀寫。
單片機(jī)的PA8是繼電器的驅(qū)動(dòng)信號,PA8低電平時(shí)觸發(fā)繼電器動(dòng)作。本系統(tǒng)選用型號為SRD-05VDC-SL-C的繼電器,其觸點(diǎn)最大切換電壓為250 V AC,最大切換電流為15 A,線圈額定電壓為5 V DC。圖2中加入了三極管驅(qū)動(dòng)電路,起到了電平匹配轉(zhuǎn)換的作用,當(dāng)PA8為低電平時(shí),三極管9012、9013導(dǎo)通,5 V繼電器吸合;當(dāng)PA8為高電平時(shí),三極管9012、9013截止,繼電器斷開。
開關(guān)裝置與OneNET之間以MQTT協(xié)議方式傳輸數(shù)據(jù),具備支持雙向數(shù)據(jù)傳輸,實(shí)時(shí)性高,長時(shí)間穩(wěn)定連接等優(yōu)點(diǎn)。在OneNET用戶登錄后,選擇多協(xié)議接入,在MQTT協(xié)議下創(chuàng)建“遠(yuǎn)程開關(guān)”產(chǎn)品,添加設(shè)備后,獲取產(chǎn)品ID和設(shè)備ID,用戶設(shè)定鑒權(quán)信息,為訪問OneNET做準(zhǔn)備。在多模式遠(yuǎn)程開關(guān)系統(tǒng)應(yīng)用中,數(shù)據(jù)流的規(guī)劃分為以下兩大類:
(1)上行數(shù)據(jù)流,即開關(guān)裝置發(fā)送到OneNET云平臺(tái)的數(shù)據(jù)。主要是讀取的時(shí)鐘數(shù)據(jù),測量的溫度數(shù)據(jù)等。
(2)下行數(shù)據(jù)流,即云平臺(tái)下發(fā)的指令,包括模式控制、定時(shí)時(shí)間設(shè)定、循環(huán)模式下的開關(guān)時(shí)間設(shè)定和溫度閾值。
這兩類數(shù)據(jù)流在開關(guān)裝置建立起與OneNET云平臺(tái)的連接后,數(shù)據(jù)流會(huì)在當(dāng)前設(shè)備下的數(shù)據(jù)流界面中展現(xiàn)。表1所列為本系統(tǒng)規(guī)劃的數(shù)據(jù)流信息,其中數(shù)組變量alarm用作存放不同數(shù)據(jù)流的變量數(shù)據(jù),數(shù)組變量time用于讀取DS3231時(shí)間數(shù)據(jù)。
表1 數(shù)據(jù)流信息
系統(tǒng)上電后,首先對模塊進(jìn)行初始化處理,包括串口2初始化、ESP8266初始化、DS18B20初始化、顯示屏及外部中斷配置初始化。經(jīng)串口2發(fā)送指令給ESP8266,設(shè)置ESP8266為STA模式,等待確認(rèn)連接OneNET服務(wù)器,按照MQTT協(xié)議TYPE3格式對數(shù)據(jù)進(jìn)行打包封裝,每隔5 s發(fā)送數(shù)據(jù)至云平臺(tái)。同時(shí),系統(tǒng)隨時(shí)接收解析平臺(tái)發(fā)送的指令信息,執(zhí)行不同指令,包括模式選擇、溫度閾值設(shè)定、定時(shí)開關(guān)時(shí)間設(shè)定,以及循環(huán)模式下的開關(guān)時(shí)間設(shè)定。解析完成后賦給相關(guān)變量,保存到AT24C02中。主流程如圖3所示,可以看到,主流程中表示了多模式的執(zhí)行過程,系統(tǒng)根據(jù)不同模式執(zhí)行相應(yīng)的功能。開關(guān)裝置讀取溫度數(shù)據(jù)和時(shí)間信息,顯示時(shí)間、參數(shù)等未放置于主流程中,而是采用STM32F103RCT6外中斷服務(wù)程序?qū)崿F(xiàn),每秒進(jìn)入一次外中斷,讀取數(shù)據(jù)、顯示信息,提高主程序的效率。
圖3 系統(tǒng)主流程
軟件設(shè)計(jì)時(shí)定義變量run_mode,開關(guān)裝置接收到OneNET云平臺(tái)手機(jī)端發(fā)送的模式參數(shù),switch語句根據(jù)接收的變量數(shù)據(jù)run_mode執(zhí)行不同的控制方式。按鍵模式(run_mode=0),開關(guān)裝置通過判斷是否接收到手機(jī)端的按鍵控制指令控制開關(guān)狀態(tài);定時(shí)模式(run_mode=1),系統(tǒng)讀取實(shí)時(shí)時(shí)間,當(dāng)時(shí)間與設(shè)定的開、關(guān)時(shí)間相等時(shí),分別控制運(yùn)行狀態(tài)為開或關(guān);溫控模式(run_mode=3),測量溫度大于設(shè)定的閾值溫度,開關(guān)裝置的繼電器吸合,反之?dāng)嚅_。
循環(huán)模式(run_mode=2)是循環(huán)執(zhí)行設(shè)定的開、關(guān)時(shí)間數(shù)值,程序中alarm[4]、alarm[5]分別存放接收的循環(huán)開分鐘和循環(huán)關(guān)分鐘數(shù)值,循環(huán)開關(guān)執(zhí)行依次運(yùn)行。程序設(shè)計(jì)時(shí),定義flag變量為循環(huán)控制的參數(shù),循環(huán)開狀態(tài)結(jié)束時(shí)flag=1,為轉(zhuǎn)入循環(huán)關(guān)運(yùn)行狀態(tài)準(zhǔn)備;反之,循環(huán)關(guān)狀態(tài)結(jié)束時(shí)flag=0,為轉(zhuǎn)入循環(huán)開運(yùn)行狀態(tài)準(zhǔn)備。每個(gè)切換過程中,alarm[4]、alarm[5]的數(shù)值不能改變,分別轉(zhuǎn)存給int_on_temp和int_off_temp。程序中minute_flag==1表示1 min計(jì)時(shí)達(dá)到,程序中遞減開或關(guān)int_on_temp和int_off_temp的數(shù)值,直到開或關(guān)每個(gè)循環(huán)時(shí)間結(jié)束。minute_flag是指外中斷服務(wù)程序計(jì)時(shí),可以很方便地得到1 min的計(jì)時(shí)狀態(tài)。實(shí)際測試時(shí),系統(tǒng)按照給定的循環(huán)開關(guān)時(shí)間運(yùn)行。循環(huán)模式運(yùn)行的具體程序如下所示:
在完成軟硬件測試后,對系統(tǒng)進(jìn)行整體測試。當(dāng)裝置連接到OneNET平臺(tái)后,查看并確認(rèn)OneNET設(shè)備的在線狀態(tài)。OneNET平臺(tái)為用戶提供數(shù)據(jù)可視化應(yīng)用,用戶通過OneNET提供的可視化工具設(shè)計(jì)用戶操作界面。根據(jù)遠(yuǎn)程開關(guān)系統(tǒng)功能,在OneNET創(chuàng)建的產(chǎn)品中找到應(yīng)用管理編輯功能,用戶可將旋鈕、開關(guān)、文本框等控件拖拽至頁面。對每個(gè)控件的屬性和樣式進(jìn)行編輯,特別是對控件屬性中的數(shù)據(jù)流進(jìn)行配置,把控件數(shù)據(jù)流與程序設(shè)定的變量建立關(guān)聯(lián),才能操作手機(jī)端界面發(fā)送指令,參數(shù)才能正確傳輸給開關(guān)裝置,同時(shí),將開關(guān)裝置測量讀取的數(shù)據(jù)上傳到手機(jī)端。手機(jī)端可視化界面包括模式選擇旋鈕、一組定時(shí)開和關(guān)時(shí)間設(shè)定旋鈕、一組循環(huán)開關(guān)設(shè)定旋鈕、按鍵控制開關(guān)、溫度閾值設(shè)置旋鈕,以及文本框顯示的時(shí)間和測量溫度數(shù)值。開關(guān)裝置,包括LCD顯示時(shí)間、測量溫度以及接收的模式與各項(xiàng)參數(shù)。圖4和圖5表示處于循環(huán)模式(run_mode=2)測試狀態(tài)下,手機(jī)端應(yīng)用界面和開關(guān)裝置實(shí)際運(yùn)行狀態(tài)。實(shí)際測試表明,4種模式運(yùn)行正常,手機(jī)端發(fā)送指令后開關(guān)裝置響應(yīng)及時(shí),較好地實(shí)現(xiàn)了各項(xiàng)功能。
圖4 手機(jī)端可視化界面
圖5 開關(guān)裝置實(shí)際運(yùn)行
將開關(guān)裝置與OneNET云平臺(tái)的可視化應(yīng)用界面相結(jié)合,設(shè)計(jì)了多模式遠(yuǎn)程開關(guān)系統(tǒng),開關(guān)裝置和可視化應(yīng)用界面相互傳遞數(shù)據(jù)和接收指令,實(shí)現(xiàn)了4種模式下的遠(yuǎn)程開關(guān)控制。數(shù)據(jù)傳輸和接收控制指令穩(wěn)定可靠,功能驗(yàn)證正常。系統(tǒng)實(shí)現(xiàn)了不同的時(shí)間控制方式,并且加入用傳感器方式控制的運(yùn)行模式,為進(jìn)一步應(yīng)用提供了拓展基礎(chǔ),可根據(jù)不同的應(yīng)用場合,選擇不同的傳感器,實(shí)現(xiàn)不同的模式控制??刂菩酒琒TM32擁有豐富的接口,軟件部分規(guī)劃相應(yīng)的數(shù)據(jù)流,在OneNET同步更新應(yīng)用界面,為進(jìn)一步由單路多模式擴(kuò)充多路多模式應(yīng)用奠定了良好的基礎(chǔ)。