主要功能
- STM32采集溫濕度信息.
- 人體紅外感應模塊, 檢測到有人活動, LED3亮.
- 手機APP通過WIFI連接, 可查看溫濕度信息, 可控制LED1, LED2, 蜂鳴器.
- STM32與電腦上位機串口連接, 可查看調試信息.
- 手機APP可發送信息給電腦上位機.
物料清單
- 野火STM32F103指南者開發板(自帶ESP8266的WIFI模塊)
- DHT11溫濕度傳感器
- HC-SR501人體紅外感應傳感器
- 網絡調試助手(秉火物聯)
功能框圖
代碼分析
(源碼及相關文件隨后放在文末, 可根據源碼結合過程解讀理解)
基本上是以野火的ESP8266模塊的源碼為基礎, 在其上添加了串口調試信息顯示, 去掉了手機APP控制LED3的功能, 改為人體紅外感應模塊檢測控制LED3.
ESP8266與STM32通信過程解讀:
就是手機APP發送"一些命令"給ESP8266
ESP8266就發給STM32
sSTM32中斷接收"這些命令"放到strEsp8266_Fram_Record結構體里
接收完畢進入程序 失能中斷 看"這些命令"包含了什么
如果有開燈, 則開燈, 然后把結果放到cStr中
如果有開蜂鳴器, 則開蜂鳴器, 然后把結果放到cStr中
如果有接收數據, 則接收數據, 然后把結果放到cStr中
如果要發回APP, 則把cStr發回給APP
APP根據結果, 更改(溫濕度)信息
使用手機APP后總結:
所以可以自定義APP發送數據通過ESP8266到stm32上
但是不能顯示stm32通過ESP8266發回給APP的數據
因為這涉及到APP的源碼
過程中所遇到的問題
-
在用野火的AT指令測試調試的代碼時, ESP8266上電串口調試助手出現亂碼
亂碼的部分是ESP8266發送給STM32的部分顯示亂碼, STM32發送給串口調試助手的部分顯示正常, 個人認為應該是波特率的問題, 隨后將STM32與ESP8266通信的波特率從115200改為74880, 顯示正常了. -
上電后顯示正常, 但是發送AT指令后, ESP8266回復信息顯示亂碼
個人認為還是波特率的問題, 又將波特率從74880改回115200, 雖然上電后顯示亂碼, 但是AT指令回復顯示正常了. -
部分指令回復ERROR
這個問題可能有2種情況, 第一種情況是可能指令格式不對, 不符合當前的模式. 比如如果你之前設置了多連接模式(CIPMUX=1), 接着發送數據沒有帶網絡連接ID號(AT+CIPSEND=<length>), 這時會返回ERROR; 第二種情況是查詢波特率(AT+UART_CUR?)之類的命令返回ERROR, 對於這種情況我暫時沒找到原因, 在此先挖一個坑, 有機會以后回來填一下, 當然如果有知道原因的朋友們可以說一下, 萬分感謝! -
ESP8266成功連上手機熱點, 但是不能識別到指定IP地址通信
這種情況下, 我更改了網絡調試助手的IP地址, 改成了和ESP8266相同的網關, 這樣應該在同一局域網中, 結果成功了.
SHOUT OUT TO
ESP2866常見問題,問題集錦,總有您想要的!
ESP8266作為客戶端通過路由器連接服務器的簡單實現
WiFi模塊調試問題:AT+CIPSTART="TCP","192.168.43.212",8080 ERROR CLOSED