摘 要:為了提高欽州青蟹圍塘養(yǎng)殖效益,對水質環(huán)境數(shù)據(jù)進行實時監(jiān)測與規(guī)律分析,設計了基于MQTT協(xié)議和Android的養(yǎng)殖環(huán)境監(jiān)測與分析系統(tǒng)。該系統(tǒng)由STM32主控的數(shù)據(jù)采集部分與基于Android設計開發(fā)的APP組成,通過MQTT服務器實現(xiàn)數(shù)據(jù)的傳輸。用戶可在APP端獲取水質實時監(jiān)測數(shù)據(jù)并對異常數(shù)據(jù)進行處理,同時可獲得水體特征的長期變化規(guī)律,方便提前進行人為干預,提高青蟹養(yǎng)殖成活率。測試結果表明,該系統(tǒng)具有較高的測量精度,時效性好,穩(wěn)定性強,符合實際應用需要。
關鍵詞:環(huán)境監(jiān)測;MQTT;STM32;Android;欽州青蟹;養(yǎng)殖
中圖分類號:TP39 文獻標識碼:A 文章編號:2095-1302(2024)07-00-05
0 引 言
欽州青蟹,學名鋸緣青蟹,是欽州市四大名海產(大蠔、青蟹、對蝦、石斑魚)之一。它味道鮮美,營養(yǎng)價值高,在2014年被評選為中華人民共和國農業(yè)部農產品地理標志保護產品[1]。
欽州灣作為廣西省最主要的青蟹產地,人工養(yǎng)殖規(guī)模達到了5 000噸以上,已成為欽州沿海農村經濟的主要支柱產業(yè)之一[2]。青蟹對養(yǎng)殖水質環(huán)境有較高的要求,當溫度高于
32 ℃或低于17 ℃時其攝食速度明顯減緩,高于37 ℃或低于13 ℃時就會停止覓食;青蟹適宜生長的pH值范圍為7.8~8.6,即弱堿性環(huán)境;水體透明度(濁度)處于20~40 NTU范圍時較適宜,濁度過高會引起青蟹自相殘殺,過低則會影響其覓食等[3-4]。
基于青蟹養(yǎng)殖環(huán)境的特點,本文設計了一款養(yǎng)殖環(huán)境監(jiān)測與分析系統(tǒng)。該系統(tǒng)借助傳感器實時采集養(yǎng)殖環(huán)境水質數(shù)據(jù),幫助用戶全天候掌握水質特征。根據(jù)水質環(huán)境的變化規(guī)律,使用戶掌握更多主動性,因時制宜,提高養(yǎng)殖效益。
1 相關技術
1.1 MQTT協(xié)議
消息隊列遙測傳輸(Message Queuing Telemetry Transport, MQTT)是一個輕量級的基于TCP/IP協(xié)議的發(fā)布/訂閱協(xié)議[5-6]。相較于傳統(tǒng)采用請求/響應模式進行數(shù)據(jù)交互的HTTP協(xié)議,MQTT的最大優(yōu)點在于可以用極少的代碼和有限的帶寬,為連接遠程設備提供實時可靠的消息服務。也正因如此,其在物聯(lián)網(wǎng)、小型設備、移動應用等方面有著較廣泛的應用。2013年3月,OASIS宣布將MQTT作為新興的物聯(lián)網(wǎng)消息傳遞協(xié)議的首選標準[7],將MQTT協(xié)議應用于物聯(lián)網(wǎng)的模型,如圖1所示。
MQTT數(shù)據(jù)包由三部分組成,包括有效載荷(Payload)、固定報頭(Fixed header)和可變報頭(Variable header)[8],擁有三種不同的消息發(fā)布服務質量[9],見表1所列。消息服務質量越高,流程越復雜,系統(tǒng)耗能也更大,各用戶可根據(jù)自己的實際情況選取合理的質量等級。
1.2 STM32F103C8T6處理器
STM32F103C8T6是由意法半導體公司開發(fā)的一款基于ARM Cortex-M內核的STM32系列32位高性能增強型處理器[10],工作電壓為2~3.6 V,工作溫度為-40~85 ℃,引腳及外設資源如圖2所示。該款單片機憑借其功耗低、成本低、性能高和封裝體積小等優(yōu)勢已被廣泛應用于智能家居、生產制造、農業(yè)養(yǎng)殖等領域,且完全滿足本次設計在數(shù)據(jù)處理上快速、高效的讀取、計算和傳輸需求。
2 系統(tǒng)設計方案
本系統(tǒng)采用軟硬件相結合的方式,以STM32單片機作為硬件的主控設備,連接DS18B20封裝型溫度傳感器、TSW-30型濁度傳感器、E-201型復合pH傳感器,通過引腳給傳感器供電并進行信息交互,采集數(shù)據(jù)并處理后交由ESP8266-01S模塊發(fā)送至本地EMQX服務器,該服務器為MQTT消息服務器的開源版本。APP則是利用Android Studio設計開發(fā)完成。
相較于傳統(tǒng)的云端數(shù)據(jù)存儲與網(wǎng)頁端數(shù)據(jù)可視化,本系統(tǒng)采用本地SQL Server對采集的數(shù)據(jù)進行存儲,并在移動端對數(shù)據(jù)進行調用和可視化,更方便用戶對數(shù)據(jù)的管理以及即時查看。圖3為本系統(tǒng)的整體架構。
3 系統(tǒng)硬件設計
3.1 STM32F103C8T6最小系統(tǒng)板
STM32F103C8T6單片機有三個全雙工通用同步/異步串行收發(fā)模塊,本設計中僅使用USART1和USART2兩個串口,其中串口1(PA9、PA10)連接USB轉TTL用于與上位機進行數(shù)據(jù)交互、代碼的燒錄等,串口2(PA2、PA3)與ESP8266-01S模塊連接用于發(fā)送采集的數(shù)據(jù)以及接收返回值等。單片機整體功能設計如圖4所示。
3.2 溫度傳感器
DS18B20溫度傳感器采用單總線數(shù)據(jù)傳輸設計,即單根信號線,既傳輸時鐘信號,又傳輸數(shù)據(jù),且數(shù)據(jù)傳輸是雙向的。它具有節(jié)省I/O口線資源、結構簡單、成本低廉、便于總線擴展和維護等諸多優(yōu)點。圖5為溫度傳感器設計流程(部分)。
定義函數(shù)DS18B20_Output_Input(u8 cmd),通過參數(shù)配置傳感器當前為輸入或輸出模式,在檢測到數(shù)據(jù)總線存在的情況下向傳感器發(fā)送讀寫命令,并接收返回的溫度數(shù)值,其中讀取溫度值的核心代碼如下:
DS18B20_Startup();//檢測數(shù)據(jù)總線是否存在
DS18B20_Write_Byte(0Xcc);//跳過搜索ROM
DS18B20_Write_Byte(0X44);//開啟溫度轉換
Delay_ms(1);
DS18B20_Startup();
DS18B20_Write_Byte(0Xcc);
DS18B20_Write_Byte(0Xbe);//讀寄存器溫度數(shù)據(jù)
LSB = DS18B20_Read_Byte();//低八位數(shù)據(jù)
MSB = DS18B20_Read_Byte();//高八位數(shù)據(jù)
Temp = MSB; Temp lt;lt;= 8; Temp |= LSB;
return Temp;
3.3 濁度傳感器
TSW-30濁度傳感器利用光學原理,通過溶液中的透光率和散射率來綜合判斷濁度情況[11-12]。傳感器探頭內部是一個紅外線對管,當光線穿過一定量的液體時,光線的透過量取決于該液體的污濁程度,水越污濁,透過的光就越少。光接收端把光強度轉換為對應的電流,傳感器模塊將探頭輸出的電流信號轉換為電壓信號并通過單片機引腳讀取,再以模擬量的方式轉換為液體濁度值。
在監(jiān)測濁度值時,定義PA1引腳作為模擬量接收端,且設置時鐘為主頻的1/6。配置引腳為獨立轉換模式、連續(xù)工作狀態(tài)、單通道轉換、不使用外部轉換以及數(shù)據(jù)右對齊。為了數(shù)據(jù)更加接近真實值,我們采集10次模擬量信號取平均值作為1次濁度模擬量值。利用如下代碼,將模擬量與濁度值進行轉換:
Turb=(float)adcx*(3.3/4 096);
Turb= Turb*100/3.3
該部分整體設計流程如圖6所示。
3.4 pH傳感器
本款pH傳感器在傳統(tǒng)復合電極傳感器的基礎上添加了3倍運放電路[13],可以輸出0~5 V或0~3 V的模擬電壓信號,同時擴展有DS18B20傳感器接口,可以方便進行軟件溫度補償設計。該傳感器模塊包含一共6個功能引腳,分別為VCC、GND電源接入口,PO、GND模擬量信號輸出正負極,基準電壓2.5 V輸出口和溫度傳感器DS18B20信號輸出口。使用+5 V電壓供電,工作溫度為0~60 ℃,工作精度為±0.01(25 ℃),測試響應時間小于1 min,具有使用方便、測量精度高的優(yōu)點。
基于本設計的實際需求,我們依然采用模擬量信號接入單片機來采集pH值。指定單片機的PA4引腳為模擬量接收端,時鐘設置6分頻,即12 MHz,與PA1引腳一樣進行ADC配置(此處選用通道4),并同樣獲取10次讀取量的平均值作為1次函數(shù)返回值;然后利用以下轉換代碼得到最后的pH值:
pH=(float)adcx*(3.3/4 096);
pH = -5.754 1*pH+16.654
在主函數(shù)中調用引腳初始化函數(shù)并打印輸出處理后的pH值。
3.5 ESP8266-01S模塊
本設計使用AT指令實現(xiàn)單片機與MQTT服務器的連接,在這之前需要從安信可官網(wǎng)下載MQTT固件庫(1471)并燒錄到WiFi模塊中,然后將ESP8266與STM32單片機的串口2
進行連接,具體為模塊的VCC接3.3 V,GND接GND,RX接PA2,TX接PA3并配置PA2為復用推挽輸出,PA3為浮空輸入。使用重定向打印函數(shù)printf()向串口輸出AT指令,具體指令如下:
\"AT+RST\"\\ WiFi模塊復位
\"AT+CWMODE=1\"\\設置工作模式為Station
\"AT+CWJAP=\\"WiFiName\\",\\"Password\\"\"
\\通過WiFi名和對應密碼使ESP8266接入互聯(lián)網(wǎng)
\"AT+MQTTUSERCFG=0,1,\\"client_ID\\",\\"username\\",\\"password\\",0,0,\\"\\"\"
\\設置MQTT用戶屬性,包括唯一標識ID以及登錄用戶名和密碼
\"AT+MQTTCONN=0,\\"10.211.2.xxx\\",1883,0\"
\\向服務器所在IP地址的端口發(fā)起連接請求;至此,ESP8266成功連接到MQTT服務器
\"AT+MQTTPUB=0,\\"Topic\\",\\"String\\",1,0\"
\\向MQTT服務器發(fā)送數(shù)據(jù),其主題為Topic,消息體為String
4 系統(tǒng)軟件設計
4.1 實時監(jiān)測
APP界面通過連接MQTT服務器接收對應Topic發(fā)送過來的水質監(jiān)測數(shù)據(jù),經過處理后將其顯示在UI界面的控件內并隨著傳感器實時采集數(shù)據(jù)進行更新。APP還設置了數(shù)據(jù)異常報警功能,當水質數(shù)據(jù)超過設定閾值時會通過字體顏色、手機鈴聲、振動以及頂部通知欄消息的方式提醒用戶及時查看,做出干預。同時水質數(shù)據(jù)會保存在本地SQL Server數(shù)據(jù)庫中,方便進一步進行數(shù)據(jù)分析和管理。界面運行流程如圖7所示,運行效果如圖8所示。
在頁面加載之前,先初始化連接屬性,然后實例化MqttClient對象并調用connect方法向服務器發(fā)起連接,通過返回值判斷是否連接成功。接收服務器數(shù)據(jù)并與閾值進行比較。當數(shù)據(jù)值超出相應閾值范圍時,通過調用Notification類向用戶發(fā)送警報提醒,該部分核心代碼如下:
Notification.Builder notification = new" Notification.Builder(getActivity());
notification.setAutoCancel(true);//查看通知后消失
notification.setContentTitle(\"檢測水域數(shù)據(jù)異常\");
//設置通知的標題
notification.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE);//設置默認提示音和振動
notificationManager.notify(NOTIFY_ID,notification.build());
//發(fā)送通知
4.2 統(tǒng)計分析
通過調用MPAndroidChart開源庫對水質數(shù)據(jù)進行可視化處理,以折線圖(LineChart)的方式獨立選擇繪制溫度、pH值、濁度的往期變化規(guī)律折線圖。用戶可以通過頂部的三個按鈕來調整統(tǒng)計時間跨度,幫助掌握不同時間間隔的規(guī)律情況。界面采用不同顏色的折線來顯示三個不同監(jiān)測值,使得數(shù)據(jù)的呈現(xiàn)更加具有辨識度。界面運行流程如圖9所示,運行效果如圖10所示。
系統(tǒng)中的圖表庫可在項目導入依賴的情況下直接調用。對圖表樣式進行設置,通過Java服務器連接SQL Server數(shù)據(jù)庫,獲取數(shù)據(jù)創(chuàng)建數(shù)據(jù)集,將數(shù)據(jù)集添加到LineChart對象中完成繪制。當用戶在界面更改顯示對象或時間跨度時,設置圖表立即根據(jù)新的需求刷新顯示,避免用戶的每一次操作都重新開啟子線程從數(shù)據(jù)庫獲取數(shù)據(jù),減少系統(tǒng)耗能和延時。以下為該部分功能代碼:
String[]" Temp_1 = new String[TimeLength];
//根據(jù)數(shù)組創(chuàng)建數(shù)據(jù)集
for (int m=0;mlt;TimeLength;m++){
Temp_1[TimeLength-m-1]=tempSet[tempSet.length-m-1];}
Listlt;Entrygt;" entrie_Temp = new ArrayListlt;gt;();
for (int i=0;ilt;TimeLength;i++)
entrie_Temp.add(newEntry(i,F(xiàn)loat.parseFloat(Temp_1[i])));LineDataSet lineDataSet_Tem =
new" LineDataSet(entrie_Tem, \"溫度\");
lineDataSet_Tem.setColor(Color.parseColor(\"#F15A4A\"));
LineData data = new LineData(lineDataSet);
mLineChart.setData(data);//將數(shù)據(jù)添加到圖表對象
mLineChart.notifyDataSetChanged();//對圖表進行更新
mLineChart.invalidate();//對圖表的顯示進行更新
4.3 天氣預報
本界面采用Spinner+LinearLayout+RecyclerView的布局方式來呈現(xiàn)當前天氣情況以及未來6天的天氣預報。其中天氣數(shù)據(jù)包括:當前日期、天氣、溫度、風力風向和空氣質量、紫外線強度等,以及今日最高溫和最低溫,且可在下拉框選擇城市后實時更新數(shù)據(jù)。
界面中所展示的天氣數(shù)據(jù)來源于天氣網(wǎng)(http://yiketianqi.com/)提供的免費API接口。通過在子線程中調用HttpURLConnection類訪問網(wǎng)頁獲取JSON數(shù)據(jù),并在本地利用GSON和解析數(shù)據(jù)的類對數(shù)據(jù)進行格式化解析和應用,其中JSON是一種輕量級的純文本數(shù)據(jù)交換格式[14],而GSON是在Java對象和JSON數(shù)據(jù)之間進行映射的Java類庫[15]。
5 系統(tǒng)測試與分析
為驗證系統(tǒng)運行的穩(wěn)定性與數(shù)據(jù)有效性,我們分別在實驗環(huán)境下和自然環(huán)境下對各個觀測數(shù)值進行測試。
提前準備20 ℃和60 ℃白水各一杯,pH值為4.6和9.3的標準溶液各一瓶,沙泥水一杯,將各傳感器分別放于對應測試溶液中,觀察測量數(shù)值(3次取平均)見表2所列。系統(tǒng)檢測值與參考值存在一定的誤差,但誤差在可接受范圍內。
為測試真實環(huán)境下系統(tǒng)的工作性能,現(xiàn)將本裝置放于一養(yǎng)殖魚塘邊運行16 h(6:00—22:00),數(shù)據(jù)匯總見表3所列。由于篇幅有限,故僅列出8組數(shù)據(jù),每組時間間隔2 h。
根據(jù)實驗數(shù)據(jù)和測試結果,該系統(tǒng)在誤差允許范圍內能夠有效測量水體溫度、pH值和濁度值數(shù)據(jù),且硬件設備工作穩(wěn)定,網(wǎng)絡連接未出現(xiàn)異常,滿足長時間監(jiān)測采集的應用需求。
6 結 語
本文致力于為鋸緣青蟹人工養(yǎng)殖過程設計一套合適的軟硬件系統(tǒng),進而避免因水體質量變化而導致青蟹大規(guī)模死亡。通過不同種類、不同層次的傳感器實時采集水域數(shù)據(jù)并經由MQTT服務器發(fā)送到手機APP,同時將數(shù)據(jù)存儲至數(shù)據(jù)庫,再從數(shù)據(jù)庫獲取歷史數(shù)據(jù)繪制折線圖以展示水質變化規(guī)律,令養(yǎng)殖過程高透明、高可控。經測試分析,該系統(tǒng)運行穩(wěn)定,數(shù)據(jù)可靠,低時延低功耗,基本符合設計預期要求且具有實際應用價值。
注:本文通訊作者為楊豪。
參考文獻
[1]農業(yè)部農產品質量安全監(jiān)管局. 中華人民共和國農業(yè)部公告第2136號[EB/OL]. (2014-08-07)[2023-06-02]. http://www.jgs.moa.gov.cn/gzdt/jgjdt/201408/t20140807_6296044.htm.
[2]王春琳.中國青蟹養(yǎng)殖產業(yè)現(xiàn)狀與高質量發(fā)展對策[J].大連海洋大學學報,2023,38(6):913-924.
[3]袁海燕,李利衛(wèi).水環(huán)境因子與氣象災害對臺州市圍塘養(yǎng)殖鋸緣青蟹的影響[J].水產養(yǎng)殖,2022,43(2):35-39.
[4]李利衛(wèi).提高鋸緣青蟹圍塘養(yǎng)殖成活率五措施[J].科學養(yǎng)魚,2006,22(4):29.
[5]向晟,崔永俊.基于MQTT和微信小程序的火工品倉庫監(jiān)測系統(tǒng)[J].電子器件,2022,45(1):209-214.
[6]鮑震,茍曉東,王飛,等.多協(xié)議工業(yè)數(shù)據(jù)網(wǎng)關在駱駝山選煤廠的應用[J].工業(yè)控制計算機,2021,34(12):115-117.
[7]侯敏,劉倩,楊華勇,等.基于MQTT協(xié)議的海洋觀測數(shù)據(jù)推送系統(tǒng)[J].計算機工程與應用,2019,55(20):227-231.
[8]孫磊. 基于MQTT協(xié)議的物聯(lián)網(wǎng)消息系統(tǒng)的設計與實現(xiàn)[D].南京:東南大學,2021.
[9]趙靖,王如武,周皓.基于NS-3的MQTT協(xié)議仿真研究[J].計算機工程與應用,2021,57(23):137-145.
[10]周朝霞.基于STM32F103C8T6的藍牙智能垃圾桶設計[J].無線互聯(lián)科技,2022,19(12):65-67.
[11]崔雪峰,張日強,孟祥宇,等.基于Arduino的硝酸銨溶液析晶點溫度測量系統(tǒng)的研究[J].現(xiàn)代礦業(yè),2020,36(12):165-167.
[12]何淼,董振華,許佳彤,等.用北斗定位的城市遠程水質監(jiān)測系統(tǒng)[J].單片機與嵌入式系統(tǒng)應用,2023,23(3):80-83.
[13]董華. 基于MSP430單片機的pH計的研制[D].長春:吉林大學,2008.
[14]于京,詹曉東.一種基于JSON格式的生產線數(shù)據(jù)采集系統(tǒng)模型[J].制造業(yè)自動化,2012,34(3):154-156.
[15]徐文立. 基于智能移動設備的移動學習支持平臺設計[D].杭州:浙江工業(yè)大學,2013.