啦啦啦啦(這句是為了保存草稿用的,心情不錯就不刪了)
首先要感謝博主 @明天多云轉雨 的文章 基于stm32f1的esp01s的驅動庫及使用 提供可直接使用的ESP8266的驅動,以及常用方法
我是在該博主代碼基礎上對部分功能新增與調優
本篇文章內容總結下來就是
ESP8266-01s
1.常用AT指令
2.TTL串口使用AT指令上傳資料
3.STM32利用串口2操作ESP8266-01s上傳資料
DHT11
1.列印溫濕度資訊
2.通過STM32利用串口2操作ESP8266-01s上傳DHT11讀取到的溫濕度資料這行字最多所以在多寫一點反正沒人會在意我寫的文章有多水哈哈哈哈
這篇文章篇幅不小,是根據我親身經歷從剛剛接觸ESP8266到能夠熟練用單片機上傳資料,其中遇到的問題解決辦法,以及收集各種參考資料,最后總結出來的,雖然事無巨細但整理出來可能會有些水,所以我開心就好
這段是自我介紹與本文關系不大請各位酌情閱讀
有兩年JavaWeb開發經驗的程式員,閑暇之余會自己開發些方便又實用的專案,因為有趣所以開發的大部分是java爬蟲,在2020年對樹莓派感興趣還玩過一段時間用樹莓派作為服務器部署Springboot專案,并為樹莓派制作一個UPS電源用于24小時運行,之后就對單片機以及嵌入式開發產生興趣,通過連接不同傳感器,不同模塊,做到與現實搭建連接,從現實中獲取資料并進行互動,因為有趣作為動力所以才能有這篇文章的誕生,但話說回來我還是個Java開發,可以的話私信一下相互學習分享一下技術.
沒用的前言,看干貨跳過這段
想必看到這篇文章的人都是已經翻閱了大量的文章資料,已經厭倦了那種通篇都是百度百科,通篇都是復制官方資料,通篇都是怎樣點亮led燈的沒有多少營養的文章
本篇文章就如同他的標題寫的一樣
標題黨適合初學者上手,因為我就是從無到有開始使用的ESP8266模塊,機緣巧合下接觸8266模塊,得知該模塊可以無線聯網真是又驚又喜,價格極其廉價功能十分強大,不愧是物聯網入門首選的設備(自認為),在自學8266時是從TTL串口連接8266發送AT指令,一點點對AT指令有所了解,當必要指令都掌握后就開始查找使用STM32發送AT指令控制8266的資料
DHT11模塊,對這個模塊的了解不多,因為只需要它獲取到的溫濕度資訊,所以沒有多做了解,只是除錯好驅動程式后就作為工具,哪里用到就直接移植,這里是用于獲取溫濕度資料上傳服務器用(如果上傳的是燒錄前就寫死的值,那太沒趣了)
目錄
一.前期準備
1.模塊
2.軟體工具
3.接線圖
二.ESP8266-01s模塊從入門到入土
1.模塊簡介
2.常用AT指令
3.STM32操作8266
4.ESP8266向Springboot專案上傳資料
三.DHT11模塊
1.模塊簡介
2.STM32操作DHT11
四.成品展示
1.程式運行展示
2.代碼
五.原始碼
一.前期準備
1.模塊
1.Stm32f103c8t6開發板

2.ESP8266-01s


3.DHT11


4.ST-LINK V2 或 CH340(比較推薦CH340還可以用于8266的串口除錯)
5.另外我使用了一塊0.91寸的4針腳OLED屏用于列印進度,只是輔助作用,不會影響主要功能
2.軟體工具
- Keil5編譯器
鏈接: https://pan.baidu.com/s/10jR0g10jxdosawc49IOazQ
提取碼: uizh
- 串口燒錄程式
鏈接: https://pan.baidu.com/s/11VCAXnfmO1FCQQVjirIkrQ
提取碼: h1uz
- 網路除錯助手
鏈接: https://pan.baidu.com/s/10symiEf79iHxF_kx7WhRBg
提取碼: gdbv
3.接線圖
//ESP8266連接STM32
ESP8266_TX ====== GPIOA_Pin_3(RX2)
ESP8266_RX ====== GPIOA_Pin_2(TX2)
//DHT11連接STM32
DHT11_out ====== GPIOA_Pin_0
//0.91寸OLED四針腳螢屏連接STM32
0.91OLED_SDA ====== GPIOB_Pin_15
0.91OLED_SCL ====== GPIOB_Pin_13

二.ESP8266-01s模塊從入門到入土
1.模塊簡介
2.常用AT指令
恢復出廠設定 AT+RESTORE
查看模塊狀態 AT+RST
查看附近無線網路 AT+CWLAP
設定客戶端模式
AT+CWMODE=1 客服端 Station
AT+CWMODE=2 用戶端 AP
AT+CWMODE=3 雙端
查詢網路連接狀態 AT+CIPSTATUS
開啟傳透模式 AT+CIPMODE=1
關閉穿透模式 AT+CIPMODE=0
連接WIFI AP
AT+CWJAP="wifi名","密碼"
獲取ip地址 AT+CIFSR
UDP連接
AT+CIPSTART="UDP","目標IP",目標埠號,本機埠號,0
如:AT+CIPSTART="UDP","192.168.1.1",8080,9000,0
TCP連接
AT+CIPSTART="TCP","目標IP",目標埠號
如:AT+CIPSTART="TCP","192.168.1.1",8080
開啟發送 AT+CIPSEND
指定發送長度 AT+CIPSEND=num
退出發送 +++
推薦第一次使用8266模塊用TTL串口連接,用來學習AT指令,也能熟悉8266不同指令需要執行的時間,熟悉這個時間很重要,下面會講,再有有些wifi名8266會識別為亂碼,也會影響連接,下面也會講
還有一個問題,之前出現過TCP方式突然連不服務器,上,初始化恢復出廠設定都試過還是不能連服務器,但連UDP是秒連,我在網上找到看到好多都出現同樣問題的,還沒有準確的解決方案,我試過的的很多方法都沒有奏效,過一段時間就可以使用,很迷,所以也在嘗試找尋解決辦法
大家好我叫下面
因為8266不同指令執行的時間不同,狀態碼回傳的時間也是不同,如果在程式里沒有定義好讀取串口回傳值的時間,就會導致指令明明沒有問題,TTL都能執行,但燒錄到板子里每到這個指令發送時程式提前讀取回傳碼,由于指令沒有執行結束,沒有回傳碼,導致指令失敗,往往就是對這個時間不夠熟悉,需要對個別指令增加讀取回傳值的延時
大家好我叫下面也
推薦先用TTL的原因還有一點,由于8266模塊內置的語言編碼不同,如果遇到wifi名中帶有中文或有特殊符號,就會顯示為亂碼,所以會出現代碼里wifi名和密碼都沒有問題但就是連不上,推薦先使用AT+CWLAP(查看附近無線網路) 來獲取目標wifi名稱.

UDP方法發送資料到服務器全流程指令
連接服務器
1. AT+CWMODE=1 客服端
2. AT+CIPMODE=1 透傳模式1
3. AT+CWJAP="wifi名","密碼"
4. AT+CIFSR 獲取ip地址
5. AT+CIPSTART="UDP","目標ip地址",目標埠,8266埠默認9000,0
發送資料有兩種方法
一 1. AT+CIPSEND (開啟傳輸資料)
2. > (這個符號代表等待輸入,回車發送,在程式里用\r\n轉義發送)
3. +++ (發送+++代表退出發送,串口助手里需要關閉發送新行才能關閉發送,程式里用+++\r\n關閉)
二 1. AT+CIPSEND=num (指定發送資料長度,由于指定長度,達到長度后會自動發送,并退出發送)
2. > (這個符號代表等待輸入,回車發送,在程式里用\r\n轉義發送)
多次發送只需要回圈發送資料方法
TCP方法發送資料到服務器全流程指令
1. AT+CWMODE=1 客服端
2. AT+CIPMODE=0 透傳模式0
3. AT+CWJAP="wifi名","密碼"
4. AT+CIFSR 獲取ip地址
5. AT+CIPSTART="TCP","目標ip地址",目標埠
發送資料有兩種方法
一 1. AT+CIPSEND (開啟傳輸資料)
2. > (這個符號代表等待輸入,回車發送,在程式里用\r\n轉義發送)
3. +++ (發送+++代表退出發送,串口助手里需要關閉發送新行才能關閉發送,程式里用+++\r\n關閉)
二 1. AT+CIPSEND=num (指定發送資料長度,由于指定長度,達到長度后會自動發送,并退出發送)
2. > (這個符號代表等待輸入,回車發送,在程式里用\r\n轉義發送)
3.STM32操作8266
上面講的都是AT指令,真正應用都要在STM32中,STM32連接ESP8266也是使用串口發送AT指令,與串口助手用法是一樣的,我這里使用的是c8t6的串口2 PA2 PA3針腳
這里我就講一下一些注意事項,具體實作看下面代碼
STM32通過串口發送AT指令需要在最后加"\r\n"作為回車
4.ESP8266向Springboot專案上傳資料
因為我對嵌入式專案的服務端不熟悉,但對web向服務端的Springboot很熟,所以想用Springboot專案來接收8266發送的資料,試了幾次找了很多資料才使得Springboot能接收8266的訪問,因為通常瀏覽器在訪問目標地址時會自動拼接web訪問回應頭,而8266之后發送所給資料,所以需要手動把回應頭拼接上,才能使目標服務器能識別訪問
通常的web回應頭,可以通過瀏覽器F12查看,訪問目標地址時會自動拼接在地址后面

拼接后效果
GET /STM32/stm32esp8266/name/12345678/111111 HTTP/1.1\r\nContent-Type: text/html;charset=utf-8\r\nHost:9000\r\nUser-Agent: BuildFailureDetectorESP8266\r\nConnection: keep-alive\r\n\r\n
換行顯示
GET /STM32/stm32esp8266/name/12345678/111111 //目標地址,路由地址以及引數
HTTP/1.1\r\n //回應頭內容
Content-Type: text/html;charset=utf-8\r\n //回應頭內容
Host:9000\r\n //回應頭內容
User-Agent: BuildFailureDetectorESP8266\r\n //回應頭內容
Connection: keep-alive\r\n //回應頭內容
\r\n //最后的換行不要忘記
最終效果

可以看到,只有第一次發送資料成功了,之后不管通過什么方式都不能再發送出資料,重新連接服務器也不行,穿透0+重連服務器也不行
并且在能連接服務器后也是不能發送出資料,專案后臺報錯


還在想辦法解決這個問題, 如果解決就可以收集資料再用花里胡哨的界面顯示了,最好在來個空氣質量監測,天氣實時狀況監測,溫濕度監測,有什么傳感器上什么傳感器,那就完美了
三.DHT11模塊
1.模塊簡介
向來我都是不太介紹模塊詳細引數的,但多少也要寫一寫
要注意的是該模塊是單總線輸出,一次傳回40位資料,每8位一組,共5組資料,前兩組是濕度引數,在后面兩組溫度引數,最后一組是校驗引數
通過前四組引數計算并與最后的校驗引數進行驗證來判斷資料是否正確
由于我很容易就找到demo,沒有浪費我太多時間,所以對該模塊沒有過多了解,只要回傳引數就可以直接用
2.STM32操作DHT11
DHT11模塊讀取溫濕度并校驗

DHT11模塊讀到溫濕度用OLED顯示并傳給ESP8266發送

四.成品展示
1.程式運行展示

2.代碼
1.檢測模塊是否連接

2.設定模式

3.連接wifi

4.穿透模式0

5.連接服務器

6.發送資料

五.原始碼
發送溫濕度只是體現資料上傳服務器,如果上傳其他資料只需要將要上傳的值傳給上傳方法即可,方便二次加工
閑聊到這里,想要原始碼的兩種途徑
1.積分下載 鏈接我會放上來
https://download.csdn.net/download/qq_41873771/15226194
2.私信我 聊聊技術談談趣聞 陪我聊聊天好么 秋梨膏
后記
前前后后用10天時間從無到有使用ESP8266模塊,從剛開始的TTL連接8266學習AT指令到STM32連接8266發送資料,找了很多資料看了很多文章
模塊連接圖,RC522不算在這篇文章

這個是我第一次整合好測驗時拍視頻中的截圖,當時興奮的不得了

可能有人注意到RC522射頻模塊了,我也嘗試寫了將IC卡資料上傳到服務器的方法,這里是上傳卡ID,如果想了解可以私信我,這篇文章沒有提供RC522的整合

這是使用TTL連接8266,出現能連服務器但不能發送資料時服務器回傳的

玩完了
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/259311.html
標籤:其他
上一篇:鄭州大學 健康上報腳本
