基于STM32的(GSM+DHT11)果園環境監測系統
閑來無事,用手頭STM32做個項目。
成品功能: 用DHT11測量溫濕度資料,通過GSM子產品發送短信給手機已實作自動監測的目的。做個上位機,顯示資料。以後延申多個,友善管理。
材料
- STM32ZET6開發闆(戰艦V3)
- TFT顯示屏(戰艦有我用的2.7寸的)
- GSM子產品(ATK-SIM800C)
- DHT11
- 杜邦線
- 用keil5進行開發
- 風速儀
- CO2濃度儀
開始制作。
制作過程
首先測試GSM,通過AT指令使其可以發短信(也可測試打電話,本項目用不到),然後在闆子中測試,測試完成後加入DHT11,最後寫上位機。
GSM子產品(ATK-SIM800C)AT調試
這裡引用原子哥的例程。
首先用AT指令測試子產品,達到可以發短信,打電話。
下邊是部分AT指令:
AT | 傳回 | 作用 |
---|---|---|
AT | OK | 子產品通訊正常 |
AT+CPIN? | +CPIN:READY | 查詢 SIM 卡的狀态,主要是 PIN 碼 |
AT+CSQ | +CSQ: 24,0 | 查詢信号品質 |
AT+COPS? | +COPS:0,0,”CHINA MOBILE” | 查詢目前營運商 |
AT+CGMI | SIMCOM_Ltd | 查詢子產品制造商 |
AT+CGMM | SIMCOM_SIM800C | 查詢子產品型号 |
AT+CGSN | 866104023267696 | 查詢産品序列号(集 IMEI 号) |
AT+CNUM | +CNUM:””,”136******”,”129”,7,4 | 查詢本機号碼 |
ATE1 | OK | 設定回顯模式(預設開啟) |
ATD10086; | OK | 用于撥打任意電話号碼 |
ATA | OK | 應答電話 |
ATH | OK | 挂斷電話 |
AT+CMGF=1 | OK | 置短消息模式,設定為文本模式 |
AT+CSCS=“GSM” | OK | 用于設定 TE 字元集,純英文為GSM,中英文為UCS2 |
AT+CMGS | > | 用于發短信 |
英文短信的發送
- 設定字元集為
;AT+CSCS="GSM"
- 設定文本模式為
;AT+CMGF=1
- 發送短信的目的人為
;AT+CMGS="18********"
- 然後子產品傳回:
,此時我們輸入我們需要發送的内容:>
;ATK-SIM800C MSG SEND TEST
- 在發送完内容以後, 最後以十六進制(HEX)格式單獨發送(不用添加回車):
(即 0X1A),即可啟動一次短信發送。1A
- 稍等片刻,在短信成功發送後,子產品傳回如: +CMGS: 39,的确認資訊,表示短信成功發送
中文短信的發送
- 首先發送
, 設定為文本模式;AT+CMGF=1
- 設定文本模式參數
;AT+CSMP=17,167,2,25
- 設定字元集為
;AT+CSCS="UCS2"
-
首先要用将号碼和發送内容轉換為UNICODE 字元串,
1.号碼182********,轉換後的 UNICODE 字元串(去掉空格後)為:
2.00310038003200390030003100390035003600330032
3.ATK-SIM800C 中英文短信發送測試,裝換後的 UNICODE 字元串為:
4.00410054004B002D00530049004D003800300030004300204E2D82F1658777ED4FE153D
190016D4B8BD5
由于使用了 UCS2字元集,所有字元/數字/漢字,都必須使用 UNICODE 編碼
- 發送:
AT+CMGS=”00310038003200390030003100390035003600330032”
,這個指
令,然後子產品傳回:
>
- 此時我們輸入我們需要發送的内容:
注意,此可以不用發送回車了;00410054004B002D00530049004D003800300030004300204E2D82F1658777ED4FE153D 190016D4B8BD5
-
在發送完内容以後,最後以十六進制(HEX)格式當獨發送(不用添加回
車):
(即 0X1A),啟動一次短信發送。 一次中英文短信發送成功。1A
GSM子產品(ATK-SIM800C)闆子調試
将原子哥戰艦代碼下載下傳到闆子中進行調試
硬體連接配接
子產品需要獨立供電,推薦 12V1A 電源。
闆子PB11連接配接STXD,PB10連接配接SRXD,子產品GND連接配接闆子GND
代碼測試
下載下傳原子哥【正點原子】GSMGPRS子產品ATK-SIM800C例程
- 初始化
- 撥号測試
- 短信測試
功能都正常我們就開始修改代碼
- 去掉所有跟短信沒有關系的代碼;
- 将短信目的寫成确定的;
- 将短信内容改為:
溫度:** 濕度:** ADC1:** ADC2:**
- 進行測試,收到的短信内容為 這樣就可以了。
溫濕度子產品(DHT11)
我們将溫濕度子產品代碼加入原來代碼中。
- 将子產品代碼檔案加入。
- 在keil中添加引入這個檔案。
- 在主函數中添加初始化函數。
- 将溫濕度資料添加到短信内容中。
- 這裡還是采用按鍵發送短信,按鍵K1之後直接向固定人發送帶資料的固定短信。(每條一毛,自動發的話還是有點浪費。)
這樣就完成了。
成品下位機:
ADC
又加了兩路ADC可以添加别的傳感器這裡添加的是風速傳感器和二氧化碳傳感器。
用的是ADC1的通道1和通道4,分别對應的是A1和A4。
風速儀用的是這個:
CO2濃度用的是這個:
- 連接配接上闆子:風速儀,棕色接負極,紅色接A1。
- 查找資料并進行線性測試後得出ADC值和資料的關系。
- 在代碼中加入兩者關系:
。adcx_1*0.027
- 連接配接上闆子:CO2濃度儀,接5V、GND、AOUT接A4。
- 查找資料并進行線性測試後得出ADC值和資料的關系。根據空氣中CO2濃度為百分之0.03,呼出的氣體中大約為百分之1。得出兩者關系。
- 在代碼中加入兩者關系:
。adcx_2*0.00003
加入代碼中進行測試。
結果跟預測的相同。
将資料通過序列槽1發送出去,友善上位機采集展示資料。
上位機
采用Visual Studio 2017進行開發
- 設計樣式:
- 寫一個時間(跟随系統時間);
- 寫序列槽接收資料;
- 将序列槽的資料進行分析并得到我們需要的資料;
- 将需要不同的資料展示到不同的位置。
-
完成。
界面樣式:
序列槽連接配接: 資料結果: 搞定了!
最後附上完整的項目檔案。自行下載下傳。
https://download.csdn.net/download/weixin_42320020/19103561
這個項目到這裡就算完了。
還有很多不足的地方,希望大佬可以指正。也希望和愛好者交流學習。
禁止轉載!!!
部落格:https://blog.csdn.net/weixin_42320020/?type=blog
QQ:2039723308
VX:Shiboven