李冰濤,李曙俏
(江蘇省徐州技師學(xué)院,江蘇徐州,221151)
相較于RS232的通信,RS485通信的特點(diǎn)如下:首先是采用差分信號(hào),其最大的優(yōu)勢(shì)是可以抑制共模干擾。尤其當(dāng)工業(yè)現(xiàn)場(chǎng)環(huán)境比較復(fù)雜,干擾比較多時(shí),采用差分方式可以有效的提高通信可靠性。其次是通信速率快,通信距離長(zhǎng),且可以實(shí)現(xiàn)多機(jī)通信。
RS485 的接口簡(jiǎn)單,只需要一個(gè) RS485轉(zhuǎn)換器,就可以直接與微控制器的 UART 串口連接起來(lái),并且使用完全相同的異步串行通信協(xié)議。由于 RS485采用主從通信方式,數(shù)據(jù)的收發(fā)不能同時(shí)進(jìn)行,是一種半雙工通信。正因如此,在工業(yè)領(lǐng)域,RS485/MODBUS是一種流行的布網(wǎng)方式,實(shí)施簡(jiǎn)單方便 ,支持RS485的儀表很多。
設(shè)備端器件的連接如圖1所示。圖1中的主要器件包括:
圖1 ESP8266模塊讀取電能表電流數(shù)據(jù)接線圖
(1)電能表
此處使用的電能表為導(dǎo)軌式電能表,其貨號(hào)是DDS238-1ZN。此電能表為多功能電子式電能表,具有RS485通信功能,可以實(shí)時(shí)測(cè)量電壓、電流、電功率、電量等參數(shù)。這里主要是利用它的RS485通信端口功能,讀取其電流值。
在讀取電能表的電流值之前,首先要了解電能表存儲(chǔ)數(shù)據(jù)的寄存器情況,此電能表的寄存器情況如表1所示(這是一個(gè)簡(jiǎn)表,其中地址0002H~0007H與0012H~0014H的寄存器為保留字段,已刪去)。
表1 電能表的寄存器情況
從表1中可以看出,地址為000DH也就是13號(hào)地址的寄存器存放的是電流的數(shù)據(jù),要讀取電能表中的其他參數(shù)數(shù)據(jù),可以此表為依據(jù)。
電能表的接線如圖1所示,符合傳統(tǒng)電能表的接線習(xí)慣,1、3進(jìn),2、4出。如果只是讀取電能表的電流值,只需將繼電器的a、b兩個(gè)接線端短路即可。電能表上的RS485通信的接線端子是9端口和10端口,由于ESP8266模塊沒(méi)有RS485通信端口,故需要使用RS485轉(zhuǎn)TTL模塊進(jìn)行轉(zhuǎn)換。
(2)RS485轉(zhuǎn)TTL模塊
RS485轉(zhuǎn)TTL模塊可以實(shí)現(xiàn)TTL信號(hào)與RS485信號(hào)的的相互轉(zhuǎn)換。RS485是半雙工通信,正常使用5V電源供電。因?yàn)镋SP8266模塊的信號(hào)電平為3.3V,而RS485信號(hào)電平范圍是2-6V,所以如果使用3.3V電源供電,則可以省去5V電平信號(hào)與3.3V電平信號(hào)之間的轉(zhuǎn)換。圖1中的RS485轉(zhuǎn)TTL模塊的VCC端與ESP8266模塊的3.3V端口直接連接就是這個(gè)原因。
(3)ESP8266模塊
ESP8266模塊可以理解成一個(gè)帶有WiFi功能的單片機(jī),這款模塊簡(jiǎn)單易學(xué),體積小,功能強(qiáng),便于嵌入式開(kāi)發(fā)。
本制作使用的控制器是WiFiduino模塊。WiFiduino是使用ESP8266作為核心的開(kāi)發(fā)板,與傳統(tǒng)的Arduino UNO R3控制器相比,WiFiduino提供了WiFi支持,可以更輕松地構(gòu)建物聯(lián)網(wǎng)項(xiàng)目。WiFiduino模塊的引腳說(shuō)明如圖2所示。從圖2中可以看出,板子上有5V和3V3兩個(gè)電源端子,使用起來(lái)非常方便,而且它的引腳排列與Arduino Uno板非常相似。
圖2 WiFiduino模塊的引腳說(shuō)明
本次制作主要使用D0、D1作為通信端口,并使用一個(gè)數(shù)字輸出端口D4連接一個(gè)繼電器以實(shí)現(xiàn)遠(yuǎn)程控制燈泡的亮滅。
(4)繼電器
繼電器的功能是對(duì)電能表的負(fù)載—燈泡實(shí)現(xiàn)遠(yuǎn)程控制,這里使用的繼電器線圈的電源是直流5V,如圖1虛線框部分所示。繼電器的電路連接相當(dāng)簡(jiǎn)單,只是在編程時(shí)要注意,D4端口為低電位時(shí)繼電器線圈得電,為高電位時(shí)繼電器線圈失電,只有這樣連接繼電器才能正常工作。
硬件電路準(zhǔn)備完畢,接下來(lái)是軟件編程部分。本次制作使用的編程工具是Arduino IDE,使用它的好處一是編程簡(jiǎn)單,尤其是使用它開(kāi)發(fā)過(guò)Arduino Uno板子的更容易上手;二是它有許多現(xiàn)成的庫(kù),可以拿過(guò)來(lái)直接使用。
在編寫(xiě)程序之前,軟件的準(zhǔn)備部分整理如下,希望對(duì)初學(xué)者有所幫助。
(1)下載并安裝Arduino IDE,可以到Arduino的官網(wǎng)去下載,盡量下載新版本,如本次制作使用的版本是1.8.15。安裝完畢,最好用Arduino Uno的板子下載一個(gè)簡(jiǎn)單的示例程序,如果下載成功,說(shuō)明軟件與驅(qū)動(dòng)都可以正常工作,軟件安裝成功。
(2)添加ESP8266支持
打開(kāi)Arduino IDE軟件,點(diǎn)擊菜單欄的“文件”→“首選項(xiàng)”的“設(shè)置”頁(yè)面,找到“附加開(kāi)發(fā)板管理器地址”行,并在其后添加如下信息:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
之后點(diǎn)擊菜單欄的“工具”→“開(kāi)發(fā)板”→“開(kāi)發(fā)板管理器”,進(jìn)入“開(kāi)發(fā)板管理器”界面,找到ESP8266并安裝。盡量安裝新版本,本次制作安裝的版本是3.0.1。
安裝完成后,重啟 Arduino IDE 軟件。在菜單欄“工具”→“ 開(kāi)發(fā)板”選項(xiàng)中即會(huì)看到 “ESP8266 Boards(3.0.1)”開(kāi)發(fā)板的選項(xiàng)。點(diǎn)擊進(jìn)入,找到“WiFiduino”,開(kāi)發(fā)板添加完成。
這時(shí)可以將WiFiduino板用USB數(shù)據(jù)線與電腦相連,選擇相應(yīng)的COM端口,在菜單欄“文件”→“示例”→“WiFiduino的例子”欄目下找到“esp8266”→“Blink”。打開(kāi)此軟件,并將其下載到WiFiduino板子里,如果看到D2(見(jiàn)圖2)上面的LED燈閃爍,說(shuō)明軟件與硬件都工作正常,可以進(jìn)行下面的步驟。
(3)添加ModbusMaster庫(kù)
ESP8266要讀取RS485通信端口的數(shù)據(jù),可以用ModbusMaster庫(kù)實(shí)現(xiàn)。在使用此庫(kù)之前,必須在Arduino IDE軟件里添加ModbusMaster庫(kù)。添加的方法是,點(diǎn)擊菜單欄的“工具”→“管理庫(kù)…”打開(kāi)“庫(kù)管理器”頁(yè)面,找到“ModbusMaster”庫(kù),選擇版本,本制作選擇的版本是2.0.1。然后點(diǎn)擊“安裝”,完成安裝后,在庫(kù)頁(yè)面版本行后面多了“INSTALLED”字樣,說(shuō)明安裝完成。
至此,軟件準(zhǔn)備工作完成,可以進(jìn)行程序編寫(xiě)了。如果只是要讀取電能表的電流值,將圖1中的a、b兩點(diǎn)短接即可。程序編寫(xiě)如下:
將程序通過(guò)USB數(shù)據(jù)線下載到WiFiduino板。正常情況下,點(diǎn)擊Arduino IDE界面右上角的“串口監(jiān)視器”圖標(biāo),串口監(jiān)視器的接收窗口會(huì)顯示出此時(shí)流過(guò)燈泡的電流值。
這里要特別注意:下載程序時(shí),要將RS485轉(zhuǎn)TTL模塊的數(shù)據(jù)線從WiFiduino板的D0、D1端口斷開(kāi),這樣程序才能寫(xiě)入WiFiduino板。程序下載完成,要再將RS485轉(zhuǎn)TTL模塊的數(shù)據(jù)線與WiFiduino板的D0、D1端口連接上,這樣電能表的數(shù)據(jù)才能傳給WiFiduino板。
WiFiduino板的最大特點(diǎn)是具有WiFi功能,容易實(shí)現(xiàn)網(wǎng)絡(luò)連接。遠(yuǎn)程監(jiān)控項(xiàng)目主要由設(shè)備端、客戶端、服務(wù)器端三部分組成,本制作服務(wù)器端采用的是blinker。blinker實(shí)際上是一個(gè)物聯(lián)網(wǎng)接入方案,可以非常方便接入物聯(lián)網(wǎng)設(shè)備。blinker提供了ESP8266支持固件,設(shè)備只需要連接一個(gè)燒寫(xiě)了blinker固件的WiFi模塊即可接入。
blinker提供了手機(jī)APP到設(shè)備端的控制方案,配合由blinker團(tuán)隊(duì)運(yùn)維的客戶端(blinker APP)、服務(wù)器端,可以快速搭建出遠(yuǎn)程監(jiān)控系統(tǒng)。
手機(jī)端要實(shí)現(xiàn)遠(yuǎn)程監(jiān)控,主要完成以下兩個(gè)步驟。
(1)設(shè)備端程序中添加WiFi網(wǎng)絡(luò)連接功能
在改寫(xiě)程序之前,首先要在Arduino IDE軟件里添加blinker Arduino庫(kù)。方法是打開(kāi)“點(diǎn)燈科技”官網(wǎng)首頁(yè),點(diǎn)擊進(jìn)入“開(kāi)發(fā)文檔”,點(diǎn)擊左邊的“快速開(kāi)始”欄,打開(kāi)“esp8266-WiFi接入”欄目,點(diǎn)擊“下載并安裝blinker Arduino庫(kù)”條目下的“點(diǎn)擊下載”,將下載好的blinker庫(kù)解壓到Arduino IDE程序文件夾的libraries 文件夾中,
打開(kāi)Arduino IDE軟件,點(diǎn)擊菜單欄的“文件”→“示例”,在“第三方庫(kù)示例”欄目下,可以看到有“blinker”,表示blinker Arduino庫(kù)安裝成功。
下面是本制作實(shí)現(xiàn)遠(yuǎn)程監(jiān)控的完整程序。
如果仔細(xì)閱讀程序就可以發(fā)現(xiàn),程序2只不過(guò)是在程序1的基礎(chǔ)上,添加了WiFi功能部分及遠(yuǎn)程監(jiān)控部分而已,還是比較容易理解的。
將程序下載到WIFiduino板子上,設(shè)備端部分即制作完成。
(2)手機(jī)端APP的設(shè)置
手機(jī)端APP的下載方法是打開(kāi)“點(diǎn)燈科技”官網(wǎng)首頁(yè),點(diǎn)擊進(jìn)入“開(kāi)發(fā)文檔”,點(diǎn)擊左邊的“快速開(kāi)始”欄,打開(kāi)“esp8266-WiFi接入”欄目,點(diǎn)擊“下載并安裝blinker APP”條目下的“點(diǎn)擊下載”,或在android應(yīng)用商店搜索“blinker”下載安裝。
其基本設(shè)置步驟如下:
①添加設(shè)備
打開(kāi)blinker APP,首先要添加設(shè)備。在blinker 中,點(diǎn)擊右上角的“+”進(jìn)入添加設(shè)備頁(yè)面,點(diǎn)擊“獨(dú)立設(shè)備”圖標(biāo),進(jìn)入“設(shè)備接入向?qū)А表?yè)面,點(diǎn)擊右下角的“網(wǎng)絡(luò)接入”按鈕,進(jìn)入“網(wǎng)絡(luò)接入”頁(yè)面,選擇通信服務(wù)商為“阿里云”,獲取SecretKey(設(shè)備密鑰),記住這串?dāng)?shù)字,并將其填入到程序2中。點(diǎn)擊下面的“返回我的設(shè)備”按鈕,在“所有設(shè)備”頁(yè)面即多出一個(gè)Arduino設(shè)備的圖標(biāo),添加設(shè)備完成。
②設(shè)置“按鍵”組件
點(diǎn)擊新添加的設(shè)備圖標(biāo),即進(jìn)入設(shè)備控制頁(yè)面。點(diǎn)擊右上角筆形的圖標(biāo),即進(jìn)入編輯頁(yè)面。在編輯頁(yè)面的最下方是組件欄,有“文字”,“按鍵”,“數(shù)據(jù)”,“圖表”等組件。點(diǎn)擊“文字”組件圖標(biāo),頁(yè)面上就出現(xiàn)一個(gè)文本框,可以進(jìn)行文字編輯。點(diǎn)擊“按鍵”組件圖標(biāo),頁(yè)面上就出現(xiàn)一個(gè)按鍵控制圖標(biāo)。
點(diǎn)擊這個(gè)按鍵圖標(biāo),即進(jìn)入按鍵組件編輯頁(yè)面。此頁(yè)面由兩部分組成,“樣式設(shè)置”可以選擇按鍵的圖標(biāo)樣式,“參數(shù)設(shè)置”則可以進(jìn)行遠(yuǎn)程控制。如本制作的程序2中的按鍵組件名稱(chēng)是“btn-abc”,如果將本頁(yè)面“參數(shù)設(shè)置”里的“數(shù)據(jù)鍵名”填寫(xiě)為“btn-abc”,那么本按鍵就可以控制WiFiduino板上的繼電器觸點(diǎn)閉合與斷開(kāi)。
③設(shè)置“數(shù)據(jù)”組件
同樣,點(diǎn)擊“數(shù)據(jù)”組件圖標(biāo),頁(yè)面上就出現(xiàn)一個(gè)數(shù)據(jù)顯示圖標(biāo)。點(diǎn)擊這個(gè)數(shù)據(jù)圖標(biāo),即進(jìn)入數(shù)據(jù)組件編輯頁(yè)面。此頁(yè)面也由兩部分組成,“樣式設(shè)置”可以選擇數(shù)據(jù)的顯示樣式,“參數(shù)設(shè)置”則可以設(shè)置顯示哪一個(gè)參數(shù)。如本制作的程序2中的數(shù)據(jù)組件名稱(chēng)是“num-abc”,如果將本頁(yè)面“參數(shù)設(shè)置”里的“數(shù)據(jù)鍵名”填寫(xiě)為“num-abc”,那么本數(shù)據(jù)顯示組件就可以顯示W(wǎng)iFiduino板從電能表上采集的電流數(shù)據(jù)。
設(shè)置完畢,點(diǎn)擊保存,基本的遠(yuǎn)程監(jiān)控功能即可實(shí)現(xiàn)。更多的功能,還需要制作者自己去探索完成。