一、ESP8266簡介
ESP8266芯片是一款串口轉(zhuǎn)無線模芯片,內(nèi)部自帶固件,用戶操作簡單,無需編寫時序信號等。
ESP8266 系列模組是安信可(Ai-thinker)公司采用樂鑫ESP8266芯片開發(fā)的一系列wifi 模組模塊
ESP8266 特性:
*802.11 b/g/n
*內(nèi)置低功耗32位CPU:可以兼作應(yīng)用處理器
*內(nèi)置TCP/IP協(xié)議棧
*內(nèi)置TR開關(guān)、balun、LNA、功率放大器和匹配網(wǎng)絡(luò)
*內(nèi)置PLL、穩(wěn)壓器和電源管理組件
*支持天線分集
*STBC、1x1 MIMO、2x1 MIMO
*A-MPDU、A-MSDU的聚合和0.4 s的保護(hù)間隔
*WiFi @ 2.4 GHz,支持 WPA/WPA2 安全模式
*支持STA/AP/STA+AP工作模式
*支持Smart Config功能(包括Android和iOS設(shè)備)
*SDIO 2.0、(H) SPI、UART、I2C、I2S、IR Remote Control、PWM、GPIO
*深度睡眠保持電流為10 uA,關(guān)斷電流小于5 uA
*2 ms之內(nèi)喚醒、連接并傳遞數(shù)據(jù)包
*802.11b模式下+20 dBm的輸出功率
*待機(jī)狀態(tài)消耗功率小于1.0 mW (DTIM3)
*工作溫度范圍:-40°C - 125°C
*通過 FCC, CE, TELEC, WiFi Alliance 及 SRRC 認(rèn)證
模塊有如下類別:
二、硬件連接
ESP8266模塊組供引出6個引腳,如下圖所示。用于通信的有四個引腳,也就是和我們單片機(jī)的USART一樣的引腳。連接方式按照如下連接:
STM32單片機(jī)端配置
硬件配置:
單片機(jī)端TXD(PA9)--ESP8266RXD
單片機(jī)端RXD(PA10)--ESP8166TXD
共地。
三、程序部分
程序部分簡單來講,用戶通過USART(可以是PC端,亦可以是下位機(jī)端)給無線模塊發(fā)送指令,芯片內(nèi)部固件程序會根據(jù)指令集進(jìn)行相應(yīng)操作并給予數(shù)據(jù)反饋。因?yàn)槭亲址噶畈僮鳎钥刂浦噶钕鄬^為簡單,而相對來說數(shù)據(jù)分析就稍微復(fù)雜一點(diǎn),因?yàn)榻邮盏降臄?shù)據(jù)是字符數(shù)據(jù),所以需要對字符串拆分出數(shù)據(jù)。
?。?)初始化
如下為初始化程序,包括WIFI的啟動,通信方式的確定,建立UDP協(xié)議通信,則局域網(wǎng)內(nèi)的PC端、手機(jī)端都可以與之通信,都可以向他發(fā)送指令。
(2)數(shù)據(jù)發(fā)送(下位機(jī)端)
數(shù)據(jù)發(fā)送代碼參考下方歷程,發(fā)送字符串?dāng)?shù)據(jù),首先要發(fā)送字符串位數(shù),然后延時,再發(fā)送字符串,再延時。
如果原本數(shù)據(jù)就是字符串則只需要按照如上所說進(jìn)行發(fā)送即可,也就是歷程中的第一個數(shù)據(jù)的發(fā)送指令。再者如果發(fā)送的數(shù)據(jù)是變量,則需要用printf的變量轉(zhuǎn)字符串的用法,如歷程中的第二個數(shù)據(jù),關(guān)于printf發(fā)面的知識參考博客:
上位機(jī)端接收到的是字符串格式的數(shù)據(jù),需要上位機(jī)程序把數(shù)據(jù)提取出來然后現(xiàn)實(shí)到上位機(jī)端。
?。?)數(shù)據(jù)接收(下位機(jī)端)
如下為數(shù)據(jù)接收的例程代碼,其為接收到字符串?dāng)?shù)據(jù),然后提取第一個字符,第二個字符,確定工作方式,進(jìn)行主控芯片模式選擇。
如果接收數(shù)據(jù)信息,只需要把第一個字符標(biāo)志位改變,然后下位機(jī)根據(jù)標(biāo)志位進(jìn)行判別模式。
if(USART_RX_STA == 12)//(USART_RX_STA&0x8000)
{//接收到數(shù)據(jù)-----------------------------------
if(USART_RX_BUF[0] == ‘M’)//判斷數(shù)據(jù)接收位第一位是否為M
{//模式調(diào)整
if(USART_RX_BUF[1] == ‘5’)//判斷數(shù)據(jù)接受第二位進(jìn)行模式選擇
{
Mode_System = 2;
OUT_B = 0;
Flag_Mode = 5;
}
else if(USART_RX_BUF[1] == ‘6’)
{
Mode_System = 2;
OUT_B = 1;
Flag_Mode = 6;
}
else if(USART_RX_BUF[1] == ‘1’)
{
Mode_System = 1;
Flag_Mode = 0;
}
else if(USART_RX_BUF[1] == ‘2’)
{
Mode_System = 1;
Flag_Mode = 1;
}
}
}
評論
查看更多