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