ESP8266無線串口模塊介紹


ESP8266淺談

 

ESP8266是一款串口轉無線模塊,內部有自帶固件,操作簡單。

一、ESP8266簡介

ESP8266芯片是一款串口轉無線模芯片,內部自帶固件,用戶操作簡單,無需編寫時序信號等。

ESP8266 系列模組是安信可(Ai-thinker)公司采用樂鑫ESP8266芯片開發的一系列wifi 模組模塊

ESP8266 特性
*802.11 b/g/n
*內置低功耗32位CPU:可以兼作應用處理器
*內置10 bit高精度ADC
*內置TCP/IP協議棧
*內置TR開關、balun、LNA、功率放大器和匹配網絡
*內置PLL、穩壓器和電源管理組件
*支持天線分集
*STBC、1x1 MIMO、2x1 MIMO
*A-MPDU、A-MSDU的聚合和0.4 s的保護間隔
*WiFi @ 2.4 GHz,支持 WPA/WPA2 安全模式
*支持STA/AP/STA+AP工作模式
*支持Smart Config功能(包括Android和iOS設備)
*SDIO 2.0、(H) SPI、UART、I2C、I2S、IR Remote Control、PWM、GPIO
*深度睡眠保持電流為10 uA,關斷電流小於5 uA
*2 ms之內喚醒、連接並傳遞數據包
*802.11b模式下+20 dBm的輸出功率
*待機狀態消耗功率小於1.0 mW (DTIM3)
*工作溫度范圍:-40°C - 125°C
*通過 FCC, CE, TELEC, WiFi Alliance 及 SRRC 認證

模塊有如下類別:

 

(圖片轉載於電子發燒友,如有侵權,請聯系摘下)

 

二、硬件連接

ESP8266模塊組供引出6個引腳,如下圖所示。用於通信的有四個引腳,也就是和我們單片機的USART一樣的引腳。連接方式按照如下連接:

STM32單片機端配置

硬件配置

單片機端TXD(PA9)--ESP8266RXD

單片機端RXD(PA10)--ESP8166TXD

共地。

三、程序部分

      程序部分簡單來講,用戶通過USART(可以是PC,亦可以是下位機端)給無線模塊發送指令,芯片內部固件程序會根據指令集進行相應操作並給予數據反饋。因為是字符串指令操作,所以控制指令相對較為簡單,而相對來說數據分析就稍微復雜一點,因為接收到的數據是字符數據,所以需要對字符串拆分出數據。

      (1)初始化

      如下為初始化程序,包括WIFI的啟動,通信方式的確定,建立UDP協議通信,則局域網內的PC端、手機端都可以與之通信,都可以向他發送指令。

    uart_init(115200);         //串口初始化為9600
    delay_ms(1000);//設置WIFI名稱工作方式
    printf("AT+CWSAP=\"LiMing\",\"0123456789\",11,0\r\n");
    delay_ms(50);//設置通信方式:采用UDP網絡通信協議
    printf("AT+CIPSTART=\"UDP\",\"192.168.4.2\",5000,5000\r\n");
    delay_ms(50);

      (2)數據發送(下位機端)

      數據發送代碼參考下方歷程,發送字符串數據,首先要發送字符串位數,然后延時,再發送字符串,再延時。

      如果原本數據就是字符串則只需要按照如上所說進行發送即可,也就是歷程中的第一個數據的發送指令。再者如果發送的數據是變量,則需要用printf的變量轉字符串的用法,如歷程中的第二個數據,關於printf發面的知識參考博客:

 

    
printf("AT+CIPSEND=1\r\n");//發送字符串位數 delay_ms(1); printf("D\r\n");//發送字符串 delay_ms(1); printf("AT+CIPSEND=4\r\n");//發送字符串位數4位 delay_ms(1); printf("%f\r\n",Battery_All);//發送變量%f浮點型 delay_ms(1); change = 5;

         上位機端接收到的是字符串格式的數據,需要上位機程序把數據提取出來然后現實到上位機端。

        (3)數據接收(下位機端)

         如下為數據接收的例程代碼,其為接收到字符串數據,然后提取第一個字符,第二個字符,確定工作方式,進行主控芯片模式選擇。

         如果接收數據信息,只需要把第一個字符標志位改變,然后下位機根據標志位進行判別模式。

if(USART_RX_STA == 12)//(USART_RX_STA&0x8000)
    {//接收到數據-----------------------------------
        if(USART_RX_BUF[0] == 'M')//判斷數據接收位第一位是否為M
        {//模式調整
            if(USART_RX_BUF[1] == '5')//判斷數據接受第二位進行模式選擇
            {
                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;
            }
                }
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM