關於STM32F103+ESP8266+阿里雲過程之修改SDK支持UART和SmartConfig(四)


  設備上報狀態到阿里雲成功之后,還要接受來至雲端下發的命令,如APP。在ESP8266接受到數據之后可將數據先進行解析,再通過自定義協議與STM32進行串口通訊,也可以將接收到的數據中的信息直接傳輸到UART,在這里,我用的是使用大量回調函數的ESP8266_NONOS_SDK-3.0  SDK包,在實時性上表現明顯不佳,所以在無特殊要求情況下建議采用將數據傳輸到UART再進行解析。ESP8266 RTOS SDK 采用任務調度方式,在表現上應優於無操作系統的,建議采用RTOS SDK包。 

  阿里雲上具有可視化開發APP,可在線構建生成apk文件,位置:開發服務->IoT Studio,具體如何操作自行查看阿里雲官方文檔:https://help.aliyun.com/document_detail/110476.html?spm=a2c4g.11174283.6.821.10111668sUo8Lj

 

下載的SDK包中有示例工程,在目錄examples下,其次網上大神也給出了代碼示例和文章,

關於ESP8266的工程示例:https://github.com/AngelLiang/ESP8266-Demos  ----來自知乎閼男秀

https://blog.csdn.net/xh870189248/article/details/81146532   ----來自CSDN半顆心臟

 

關於UART和SmartConfig配網,建議先將ESP8266的工程示例先編譯下載,根據打印信息可快速了解和看懂代碼,為修改做鋪墊。

 

關於UART串口接受數據:

  ESP8266具有兩個UART,其中UART1的RX引腳被Flash-SPI復用,故一般僅用於打印系統日志。

    1.UART0在SDK中用於輸出調試信息,在使用之前應先將打印信息使能關閉。在 debug.h 中屏蔽 #define MQTT_DEBUG_ON

  2.在app目錄下將 -ldriver 注釋掉,其次在  app/user/ 目錄下添加工程示例的uart.c。( 原sdk的uart使用的是鏈接動態庫在使用uart接口,當然也可以通過修改重新生成lib來修改uart的功能,但明顯很不方便。)

  3.ESP8266_NONOS_SDK-3.0使用的是定時器回調函數的方式,ESP8266僅開放一個定時器,所以需要注意的是user_init()函數在初始化uart時候,便設置了定時器的定時任務,進入uart接收數據函數uart_test_rx。

 

  在之后的MTQQ的初始化中調用MQTT_Connect重置了定時器任務修改成mqtt_timer,所以可在串口初始化時屏蔽接受數據任務,新定時器任務mqtt_timer中加入串口接收數據的任務。

 

  在uart_test_rx中不難看出uart的TX調用的是tx_buff_enq(char* pdata, uint16 data_len),完成從串口回傳任務。這里可根據功能進行修改。

 

關於SmartConfig配網:

  移植說明:

    wifi源碼:`user/user_wifi.c`+`include/user_wifi.h`
    smartconfig源碼:`user/user_smartconfig.c`+`include/user_smartconfig.h`
    wifi配置:`wifi_config.h`

  只需要拷貝以上文件即可簡單移植到新工程,之后參考此調用即可。

    void ICACHE_FLASH_ATTR
    user_init(void) {
      //uart_init(BIT_RATE_115200, BIT_RATE_115200);

      wifi_set_opmode(STATION_MODE); // set wifi mode

      /* 與 smartconfig_connect() 二選一
      * wifi_connect() 在這里調用正常
      */
      //wifi_connect(wifi_connect_cb);
      /* 在這里調用不正常,無法用手機配網 */
      //smartconfig_connect(wifi_connect_cb);

    system_init_done_cb(init_done_cb_init);
   }

  在接口函數中 void smartconfig_connect(WifiCallback cb); 先進行smartconfig,如果沒有配網信息則自動連接上次的wifi。在工程中使用此函數。

    void ICACHE_FLASH_ATTR
      init_done_cb_init(void) {
      //print_chip_info();

      /*
      * smartconfig_connect 只能在 init_done_cb_init 調用才正常
      * 先進行smartconfig,沒有配網信息則自動連接上次的wifi
      */
      smartconfig_connect(wifi_connect_cb);
      /* OR */
      //wifi_connect(wifi_connect_cb);
    }

 

  SmartConfig的示例工程燒寫成功后出現

    SDK ver: 2.0.0(656edbf) compiled @ Jul 19 2016 17:58:40
    phy ver: 1055, pp ver: 10.2

    SC version: V2.5.4
    [INFO] smartconfig start!
    mode : sta(5c:cf:7f:f7:99:6f)
    add if0
    wifi_smartconfig_timer_cb
    [INFO] smartconfig stop!
    wifi ssid:WIFI_SSID
    wifi pass:123456789
    [INFO] WiFi_LED_STATUS_TIMER_ENABLE
    wifi connect fail!
    scandone
    state: 0 -> 2 (b0)
    state: 2 -> 3 (0)
    state: 3 -> 5 (10)
    add 0
    aid 1
    cnt
    wifi connect fail!

    connected with WIFI_SSID, channel 11
    dhcp client start...
    wifi connect fail!
    ip:192.168.191.2,mask:255.255.255.0,gw:192.168.191.1
    wifi connect success!
    pm open,type:2 0

 

 

   配網APP源碼:https://github.com/EspressifApp/EsptouchForAndroid

   配網APK:https://github.com/EspressifApp/EspRelease/tree/master/EspTouch

 

  ESP8266配網方式為組網模式,在打印信息出現  wifi_smartconfig_timer_cb 時手機app端輸入WIFI密碼和選擇組網模式進行配網。

  ESP8266為2.4G模組,不支持5G WIF聯網。

  阿里雲IoT Studio中自生成的app無法正常配網。熟悉java可在阿里雲下載源碼配合Esptouch源碼進行修改。

 

 

                                 -----------今天也是充滿希望的一天~

 

  


免責聲明!

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



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