必要知識
大概流程
用串口連接ESP8266-01S簡單除錯模塊設定
設備連接到ESP8266-01S的WiFi或者是ESP8266連接至局域網
根據需求再次對ESP8266-01S進行除錯
啟動手機或電腦的網路除錯助手建立通訊
用網路除錯助手進行信號的發送
將ESP8266-01S連接至單片機的UTX和URX與單片機進行通訊
STM32C8T6其中PA2和PA3為一個串口,PA9和PA10為1個串口
通訊協議
TCP和UDP協議

UDP會把資料一股腦兒地發送出去,并不會在意是否全部收到,適用于廣播型別多對多通訊型別,缺點是具有一定的丟包率
TCP是可靠的傳輸協議,缺點是只能一對一通信
cilent客戶端和server服務端
使用ESP8266-01S
連接模塊做簡單除錯
需要的工具:USB-TTL下載器

如果不需要對模塊的韌體重新燒錄或是對其功能有其他需要,不用接IO0和IO1還有EN引腳,只需要按照圖4.2接好就可
特別注意,RXD和TXD 的接法,與下載器的引腳相反
不要用下載器的3.3V和GND電源,另找電源(可以接開發板上的供電)
正常情況下模塊會微熱,只要不是燙手的就沒什么問題
打開串口除錯工具
波特率設定為115200,發送AT(該指令是測驗AT是否OK),會接收到回傳的OK
ESP8266-01S一共有三種角色/作業模式,分別是:
1.Station (客戶端模式)
2.AP (接入點模式)
3.Station+AP (兩種模式共存)
買模塊的時候,商家一般都會附贈一個資料包,里面有AT指令的說明
根據需要,選擇模塊的作業方式(一般使用模式2或者是模式3)
輸入命令:
AT+CWMODE=1 //station模式(station模式不可以創建自己的WiFi)
或
AT+CWMODE=2 //AP模式
或
AT+CWMODE=3 //station+AP模式
來選擇模塊的作業方式,輸入完成后輸入
AT+RST
重啟模塊
使用模塊
這時候,你有兩種方案:
一是用模塊自己創立一個WiFi(station模式不可創建自己的WiFi),二是模塊連接到現有的WiFi
一、建立模塊的WiFi
串口發送以下命令
AT+CWSAP="SSID","password",x,x //來創建路由
(第一個x代表通道號,第二個x代表加密方式,用數字來表示)
信道,也稱作通道或頻段,是以無線信號作為傳輸載體的資料信號傳送通道,2.4G頻段的作業頻率為2.4-2.4835GHz,這83.5MHz頻帶劃分為13個信道,各信道中心頻率相差5MHz,向上向下分別擴展11MHz,信道帶寬22MHz,中國采用歐洲/ETSI標準,使用1-13信道,
隨著無線網路的普及,周圍的WIFI信號越來越多,這些信號之間會相互干擾,家庭路由器一般都會自動選擇作業信道,如果說想要8266處于更好的作業狀態,將其設定為與周圍無線網路信道不同的信道,如果說沒那么多要求,隨便填一個即可,
注意:該命令在斷電之后不會消失,會保留下來
AT+CIPMUX=1 //開啟多連接
模塊是最多允許五個設備連接的,
然后輸入
AT+CIPSERVER=1,6666 //埠號可以更改
來設定監聽埠,以上兩個指令斷電后將會消失,需要寫入單片機
二、 連接現有的WiFi
AT+CWJAP="SSID","password" //來連接路由器
AT+CIPMUX=1
AT+CIPSERVER=1,6666
模塊就處于作業狀態了
上位機操作
上位機首先要連接到模塊所處的WIFI中(自建WIFI或現有無線網路)
上位機目前與ESP8266模塊進行串口通訊
打開網路除錯工具,可以看到兩種通訊協議,TCP和UDP
在這里,我們選擇TCP Client(TCP協議客戶端)即可

輸入模塊的IP地址,如果是模塊建立的現有WIFI,則IP地址應為192.168.4.1
如果是連接的現有無線網路,可以進入網路的管理員頁面查看,也可以輸入AT+CIFSR指令來查看8266的IP和MAC地址,當然,這種操作必須在連接串口的條件下才能使用,
上位機發送資料

選擇連接,然后輸入祖傳的“Hello world”發送

在串口助手里面就可接受到相應的資料
上位機接受資料
首先對ESP8266輸入發送指令AT+CIPSEND=0,x(位元組數)
一定要輸入正確的位元組數,否則會發送不全

我想發送12位元組的“Hello world!”但是我給出的指令只有5位元組,那么我的發送會是失敗的,接收到的資料也是不正確的


當然這些AT指令都是要寫入單片機的
單片機
終于到了重頭戲了,在實際使用的時候是不會把ESP8266-01S對電腦同時進行網路連接和串口連接的,實際上的使用要么是電腦作為控制端,將ESP8266與單片機連接,要么是兩個單片機之間的通訊,
單片機的發送
像之前所說的8266所能記憶的一些AT指令設定是可以在電腦串口中直接設定好的,這樣也確實更方便些,減輕了單片機的壓力,然后是每次斷電之后都需要重新設定的部分:
每次單片機重新上電之后通過串口發送AT指令到8266
直接將字串發送到串口即可
void ESP_8266_Init()
{
printf("AT+CIPMUX=1\r\n");
delay_ms(500);
printf("AT+CIPSERVER=1,6666\r\n");
delay_ms(500);
}
//這里采用的是正點原子stm32的串口代碼,這里只展示最核心部分
單片機的接收
對于接受部分還是有些難度的,單片機的串口單次只能接收一位元組,如果是接受長字串的話需要準備陣列,但如果是進行前進后退等基本指令的話,我想一般都會采用數字,這樣我們要接受的訊息內容只有一位元組,
| +IPD,<客戶ID>,<資訊長度>:<資訊內容> |
|---|
這是串口接受資訊的格式,可以對于接受陣列進行處理,得到我們想要的資料,
筆者的編程屬實是拙劣,雖然實作了相應的功能,但是代碼沒有參考性,也就不放出代碼了,
終于是寫完了,也是中間隔了挺久的,可能內容也沒那么連貫,還請諒解,
如果有什么錯誤,還請各位大佬斧正,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/290954.html
標籤:其他
上一篇:Thingworx自定義擴展開發
