構(gòu)建基礎(chǔ)板:具有橋接Modbus傳感器連接到Lorawan無線連接的能力
我從硬件庫存的墓地中復(fù)活了舊主板。這個板曾經(jīng)是創(chuàng)業(yè)公司的MVP產(chǎn)品。兩年前,當(dāng)初創(chuàng)公司還處于炒作階段,有很多投資者想要慷慨地為初創(chuàng)公司提供資金時,我們看到了工業(yè)物聯(lián)網(wǎng)領(lǐng)域的巨大機遇。我和其他創(chuàng)始人正在邁出第一步,以實現(xiàn)建立這家主要專注于工業(yè)物聯(lián)網(wǎng)應(yīng)用的創(chuàng)業(yè)公司的想法。
我從這些制造業(yè)中注意到的一件事是他們使用標(biāo)準(zhǔn)的工業(yè)測量工具,這導(dǎo)致了一個相似之處,這些工具使用標(biāo)準(zhǔn)接口稱為MODBUS。從這個機會,這個硬件誕生了橋接MODBUS到Lorawan/無線數(shù)據(jù)。
在本項目中,主要目標(biāo)是恢復(fù)硬件,使其能夠從Modbus傳感器采集數(shù)據(jù),將數(shù)據(jù)保存到SDCard或內(nèi)部數(shù)據(jù)緩沖區(qū),進(jìn)行數(shù)據(jù)轉(zhuǎn)換,并將數(shù)據(jù)發(fā)送到云端。
具有MODBUS協(xié)議能力的土壤傳感器正在這個項目中用于PoC(概念驗證),因為這是我的垃圾抽屜中唯一支持MODBUS的傳感器。
主圖
從下面的圖表中,它大致解釋了將在這個項目中實現(xiàn)的想法。從下到上有帶modbus RTU - RS485接口的土壤傳感器,可采集土壤質(zhì)量信息。為了獲取傳感器內(nèi)部的數(shù)據(jù),主板需要借助UART到RS485板轉(zhuǎn)換器進(jìn)行modbus RTU數(shù)據(jù)查詢。通過這樣的查詢命令,我們將能夠收集土壤的溫度、體積含水量(VWC)和電導(dǎo)率(EC)。
一旦板獲得土壤數(shù)據(jù),主板將對實際值進(jìn)行轉(zhuǎn)換,并將轉(zhuǎn)換發(fā)送到lorawan網(wǎng)關(guān)。為了能夠發(fā)送lorawan協(xié)議和lorawan無線電,ESP32S3將需要RFM95支持來完成這些事情。RFM95和ESP32S3之間通過SPI接口通信,在主板內(nèi)部進(jìn)行物理連接。
Lorawan網(wǎng)關(guān)將接收來自主板的數(shù)據(jù),并將數(shù)據(jù)存儲在Lorawan本地服務(wù)器內(nèi)部。在此lorawan網(wǎng)關(guān)中,采用RAK網(wǎng)關(guān)模塊作為集中器,Balena鰭板作為網(wǎng)關(guān)基板?;灞旧砟軌蜻\行RPi OS和Chirpstack作為lorawan服務(wù)器。從這個階段開始,我們可以查看主板/節(jié)點發(fā)送的數(shù)據(jù)。
Thingsboard需要作為儀表板,以提供傳感器數(shù)據(jù)的交互式視圖。Lorawan網(wǎng)關(guān)可能需要一個橋接器來執(zhí)行數(shù)據(jù)傳輸?shù)絋hingsboard。在Thingsboard免費版中,不支持Chirpstack - Thingsboard集成,因此可能需要在Chirpstack - Thingsboard之間創(chuàng)建手動橋接。
硬件列表
要建立這個項目,需要幾個硬件:
?自定義Modbus到Lorawan板
?Lorawan網(wǎng)關(guān)
?UART/TTL轉(zhuǎn)RS485
?支持Modbus-RTU的土壤測量傳感器
?云服務(wù)器/ Thingsboard服務(wù)器
明確地,建立自定義Modbus - Lorawan板:
?ESP32S3
?RFM95W
?MPPT太陽能充電器
?SD卡數(shù)據(jù)接口和插槽。
硬件圖
從主板到傳感器的連接圖解釋如下。主板通過USB接口供電,為主板上的各個模塊和部件供電。電壓轉(zhuǎn)換3.3V也分配到外板提供板支撐,本項目為RS485板轉(zhuǎn)換器。
通過跳線進(jìn)行Uart連接,將Uart - rs485的TTL端口連接到主板。在轉(zhuǎn)換板的另一側(cè),引腳A和B連接到傳感器引腳。為了使傳感器正常工作,本項目采用外接12V適配器,12V輸出連接到土壤傳感器的輸入電源引腳。
為了更好地了解主板,此圖對每個模塊的連接進(jìn)行了高級概述。該板的主控板是ESP32S3,能夠提供WIFI、BLE等無線連接性能,并帶有一些外圍設(shè)備作為通信接口。
如圖所示,ESP32S3通過SPI連接,將命令/數(shù)據(jù)發(fā)送到支持模塊(RFM95),并通過SPI接口將數(shù)據(jù)文件讀/寫到SDcard。ESP32S3還保留了其他GPIO,可作其他用途。
電源控制器為單板上的所有模塊供電。有三種電源可以切換,它們是USB,太陽能電池板和電池。
主板概述
硬件測試
由于該板長期處于休眠狀態(tài),因此可能需要進(jìn)行功能檢查以確保該板正常運行。一些功能性檢查包括:
?Lorawan連接測試
?SD卡數(shù)據(jù)Wr/R測試
?Modbus查詢測試
有關(guān)此檢查的更多細(xì)節(jié)請參見視頻/錄音。
固件圖與實現(xiàn)
下面的圖表描述了正確完成這項工作的主要流程圖。經(jīng)過幾次試驗,由于庫問題,需要通過排除SD卡的寫入和讀取命令來更新此圖,其中expressif - Arduino VSPI沒有按預(yù)期工作,導(dǎo)致錯誤行為。
首先初始化外設(shè),然后啟動lorawan例程/事件。這個lorawan調(diào)度時間是每60秒一次,所以lorawan網(wǎng)關(guān)每分鐘都會收到最新的數(shù)據(jù)。一旦啟動,lorawan固件將自動處理每個事件和調(diào)度。
lorawan初始化后開始Modbus數(shù)據(jù)查詢。單板以Modbus數(shù)據(jù)格式發(fā)送Modbus RTU命令。有關(guān)modbus RTU的更多細(xì)節(jié),我們可以遵循此信息。
來自modbus的RTU代碼,基于modbus的數(shù)據(jù)協(xié)議
Modbus地址:0x01
功能碼:0x03
起始地址:0x0000
請求的數(shù)據(jù)長度:0x000A
CDC: 0xC5CD
一旦modbus從/目標(biāo)發(fā)送反饋,固件將modbus值轉(zhuǎn)換為實際值,并將其復(fù)制到lorawan數(shù)據(jù)負(fù)載中。
由于需要執(zhí)行多個測試,因此在此項目上開發(fā)了多個固件。主要實現(xiàn)是ESP32S3_RFM_Firmware,涵蓋了從獲取土壤傳感器數(shù)據(jù)到將數(shù)據(jù)發(fā)送到云的所有過程。
下面的代碼是程序運行的主要流程,這個代碼是基于上面的固件圖編寫的。從外設(shè)初始化開始,讀取數(shù)據(jù)總線,發(fā)送測量數(shù)據(jù)。我們可能注意到modbus數(shù)據(jù)查詢和lorawan事件是如何共存的。lorawan棧/事件需要與其他棧中的modbus數(shù)據(jù)查詢分離,這種方法可以防止由于lorawan事件和優(yōu)先級導(dǎo)致主棧溢出。
從代碼中還執(zhí)行了數(shù)據(jù)modbus轉(zhuǎn)換到其實際值,并將其存儲在lorawan有效負(fù)載中。modbus查詢每20秒觸發(fā)一次,但數(shù)據(jù)每1分鐘傳輸一次,這意味著平臺和lorawan服務(wù)器將接收到最新/最大的數(shù)據(jù)。
Lorawan到Thingsboard橋
Lorawan - Thingsboard橋是為了克服Thingsboard免費版本的限制而制作的。集成Thingsboard的chirpstack lorawan服務(wù)器只提供高級版本,這意味著我們需要節(jié)省一些預(yù)算來購買許可證。
在這個項目中,通過利用MQTT協(xié)議的優(yōu)勢,我們可以輕松地交換數(shù)據(jù),從而手動處理簡單的橋接。由于該橋只覆蓋了少量節(jié)點,大量節(jié)點的約束條件仍然未知。
橋牌的代碼實現(xiàn)如下面的代碼所示,它是按照上面的圖表創(chuàng)建的。此代碼在網(wǎng)關(guān)內(nèi)注冊為服務(wù),因此每次網(wǎng)關(guān)上電時,網(wǎng)橋?qū)⒆詣舆\行。
網(wǎng)橋?qū)崿F(xiàn)的結(jié)果如下圖所示,網(wǎng)橋能夠?qū)?shù)據(jù)從Chirpstack網(wǎng)關(guān)網(wǎng)橋傳輸?shù)絋hingsboard
結(jié)果
硬件組裝
給電路板一個合適的外殼,設(shè)備就可以測試了。
Chirpstack Lorawan服務(wù)器
Thingsboard儀表板
本文編譯自hackster.io





