基于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)格式單獨發送(不用添加回車):
1A(即 0X1A),即可啟動一次短信發送, - 稍等片刻,在短信成功發送后,模塊回傳如: +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)格式當獨發送(不用添加回
車):1A(即 0X1A),啟動一次短信發送,

一次中英文短信發送成功,
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://blog.csdn.net/weixin_42320020/?type=blog
QQ:2039723308
VX:Shiboven
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/279667.html
標籤:其他
