[應用] ESP8266 WiFi to RS485 (MODBUS TCP to RS232)

元件介紹

        ESP8266 是由大陸樂鑫科技公司所開發的 WiFi 模組,上面有數根 GPIO 接腳和 ADC,另外 Tx/Rx 接腳用來與其他模組通訊之用。由於這塊模組價格便宜,目前吸引很多創客 Maker 使用,更重要的是在 Arduino IDE 環境下就可以開發這 WiFi 模組的程式,下載 IDE 後可找到不少 WiFi 相關的範例程式可以研究,對於初學者來說實在是非常非常的方便。同時在網路上,不少創客 Maker 已經寫下開發的經驗文章[1][2][3],並且也有 YouTube 教學影片可參考 [4]。

設計說明

        筆者在規劃 MODBUS 通訊與 RS485 的過程遇到配線牽線的問題,於是上網搜尋有關無線轉 RS485 的設備,搜尋結果出現的是藍芽轉 RS232。BT to RS232 經過 MODBUS 通訊測試後,通訊的反應不是很即時,感覺有點頓頓的,放棄使用藍芽的介面。再次搜尋 WiFi 轉 RS485 的設備,似乎找不到能同時支援 MODBUS 通訊,最後決定使用 ESP8266 模組加上 TTL 轉 RS485模組,如圖一所示,索性自行開發一個 MODBUS TCP (WiFi) to MODBUS 232 (RS485) 的系統。以實體層(physical layer)而言,我用模組兜出一個 WiFi 轉 RS-485 的硬體,在鏈結層(data link layer)方面,設計一個 MODBUS TCP 轉成 MODBUS 232 的系統,讓原本沒有網路接口的控制板多出了一個無線網路的操控介面。

        簡單說明系統的運作,將 ESP8266 WiFi 模組設計成一個無線 AP,當筆電連接到這模組後,筆電便從這個無線 AP 取得一組 IP address。這時候,我們可以在筆電上寫個 TCP / UDP socket 程式,與模組建立一個 socket 連線 (筆者是使用 TCP port 502 for MODBUS)。我們在 Arduino IDE 環境開發 ESP8266 模組的程式,將無線網路收到的 MODBUS TCP 封包加工調整後轉換成 MODBUS RS232 封包,再從 RS485 線路傳送出去。同樣地,從 RS485 收到的MODBUS RS232 封包也必須加工調整成 MODBUS TCP 封包,再從無線網路轉發出去。

圖一:WiFi模組 + TTL轉RS485模組

實現展示

        底下的影片說明操作的過程,WiFi 模組透過 RS-485 連接到一塊控制板卡 (這張卡無網路介面),筆電執行一個 MODBUS TCP 的人機介面程式,通訊封包透過 WiFi 方式傳至模組。WiFi 模組再轉換成 MODBUS 232 藉由 RS-485 傳給控制卡,這樣筆電便能撈取控制卡上的 DI / DO / AI / AO 資料了。

操作影片

參考資料

[1] 深入淺出 Wifi 晶片 ESP8266 with Arduino
[2] 打造Wifi遙控車(之一):使用 ESP8266進行 Wifi無線通訊
[3] 5美元的WiFi微控器ESP8266已可與Arduino相容
[4] WF8266R 實作學習平台

留言

Unknown說…
您好 請問可以跟您要wifi模組的韌體程式碼嗎??
因為最近在做相關研究 想要一些參考資料

此網誌的熱門文章

[筆記] ESP32 在 VS Code 開發環境的編譯與除錯

[筆記] Raspberry Pi 樹莓派的軟體開發

[應用] 在 ESP32 Audio 開發板的 VoIP 範例

[應用] 藍芽 BLE client/server 架構:BLE remote controller

[筆記] Visual Studio 遠端偵錯的設定步驟

[模組] 無線資料傳輸:nRF905 和 nRF24L01 (以 Arduino 為控制器)

[應用] STM32 DFU (Device Firmware Upgrade)