<video id="btunb"></video>
    1. <address id="btunb"></address>
      • ESP8266

        面向物聯網應用的
        高性價比、高度集成的 Wi-Fi MCU

      ESP8266

      SDK 和演示

      找到 19 個結果
      • 收起全部
      • 展開全部
      標題 Body 平臺 版本 發布日期升序排列 下載
      ESP8266 RTOS SDK (IDF Style)

      ESP8266 RTOS SDK in ESP-IDF style.

      RTOS SDK V3.1.1 2020年03月24日
      ESP8266 NONOS SDK
      NON-OS SDK V3.0.2 2020年03月24日
      ESP8266 NONOS SDK V3.0.0

      支持將 iRAM 用作內存,可多出約 17 KB 的內存空間。

      NON-OS SDK V3.0.0 2018年08月24日
      ESP8266 NONOS SDK V2.2.1

      ESP8266 non-OS SDK V2.2.1

      NON-OS SDK V2.2.1 2018年06月08日
      ESP8266 RTOS SDK V2.0.0

      點擊右側下載按鈕獲取詳細的更新歷史信息并下載新版 SDK。

      RTOS SDK V2.0.0 2018年04月03日
      ESP8266 NONOS SDK V2.1.0 20170505

      ESP8266 Non-OS SDK V2.1.0

      NON-OS SDK V2.1.0 2017年05月05日
      ESP8266 RTOS SDK V1.5.0

      增加以下功能:

      1. SPI Flash 擦除保護機制(boot.bin 和正在運行的 user.bin 不能被擦除);
      2. memleak debug 功能;
      3. SNTP 相關接口;
      4. vendor IE 支持;
      5. seak 函數 wifi_set_backup_mac(用于設置用戶 MAC);
      6. mbedTLS 支持;
      7. 新增 user_rf_cal_sector_set,用戶程序必須實現此接口;

      更新以下功能:

      1. 更新 SmartConfig 到 v2.5.4;
      2. 更新 open freedom 以支持發送 beacon 包;
      3. 更新 libphy.a 到 1055 版本;
      4. 更新二級 bootloader 到 v1.6;
      5. 更新 esp_init_data_default.bin;
      6. 優化 socket 機制;
      7. 優化休眠策略。

      修正以下問題:

      1. PWM 的問題;
      2. lwIP 問題;
      3. SPI overlap 問題;
      4. DNS 在部分路由上的問題;
      5. os_timer_arm 最大值的問題;
      6. 外部復位后,小概率存在 RF 不工作的問題;
      7. 華為 x4 不能連接 Soft-AP 的問題;
      8. libpp.a 中一處導致系統 assert 的問題;
      9. scan done callback 中設置模式從 STA 到 Soft-AP 導致 crash 的問題;
      10. wifi_station_get_connect_status 在密碼錯誤時獲取的狀態不對的問題;
      11. 主動斷開時,disconnect event 進入兩次的問題;
      12. 修改 SPI Flash 擦寫流程,擦寫前判斷是否寫保護,如是,則清除寫保護狀態;
      13. 部分情況下,RF_Init_data 系統參數區可能被破壞的問題;
      14. 頻繁上下電情況下,導致系統參數區被破壞的問題;
      15. 其它 bug。
      RTOS SDK V1.5.0 2016年11月11日
      ESP8266 NONOS SDK V2.0.0 20160810

      ESP8266_NONOS_SDK_V2.0.0_16_08_10 發布說明:

      1. 更改部分源文件的 license 為 espressif MIT;

      2. libphy.a 更新至 1055,解決 Light-sleep 有時電流偏大的問題;

      3. AT+ 更新至 1.3.0:

      3.1. 新增 Light-sleep 喚醒命令,AT+WAKEUPGDIO;

      3.2. 修正 AT+CWDHCPS IP 池分配異常問題;

      3.3. 在 examples 目錄下新增 at_sdio 示例。

      4. 修正調用 cur、def 接口時可能存在的系統狀態錯誤;

      5. 修正 Deep-sleep 之前未關閉 SPI 導致 Deep-sleep 時電流過大問題;

      6. 修正調用 wifi_set_phy_mode 后從 AP 切到 Station 模式時可能出現的 crash;

      7. 更新二級 boot 到 v1.6:

      7.1. 支持 AT + SDIO 的需求;

      7.2. 支持通過 GPIO 控制進入測試模式。

      8. 增加對其他 2 線轉 4 線 SPI Flash 的支持;

      9. 修正 TCP 握手重傳時引起的 Exception;

      10. 修正 ESP-NOW 問題;

      11. 新增 ESP-PAIR(Simple-Pair)功能,具體 API 請參考手冊;

      12. wpa2-enterprise time 函數導出由用戶設置,及 time check disable 由用戶設置;

      13. wpa2-enterprise 新增 PEAP/TTLS 支持,具體 API 請參考手冊;

      14. 在 examples 目錄下新增 mqtt 示例;

      15. 其他問題的修正;

      16. 修正部分情況下,RF_Init_data 系統參數區可能被破壞的問題。新增 user_rf_cal_sector_set,用戶程序必須實現此接口,詳細參見文檔 “2C-ESP8266__SDK__API Guide”。 (1.5.4.1中解決)

      17. 修正外部復位后,小概率存在 rf 不工作的問題。(1.5.4.1中解決)

      18. 新增AT針對SDIO的支持。(1.5.4.1中加入)

      19. 修正espconn中一處潛在問題。(1.5.4.1中解決)

      ESP8266_NONOS_SDK 注意事項:

      1. esp_init_data.bin 至少需要燒錄一次到 flash;

      2. 建議整個系統需要做初始化設置時,或需要重新進行 RF_CAL 時,燒錄 blank.bin 到 RF_CAL 參數區 (由 user_rf_cal_sector_set 設置),并燒錄 esp_init_data.bin 到 flash。

      AT 注意事項:

      1. 從版本 ESP8266_NONOS_SDK_V1.5.0 起,AT 固件所需空間增大,無法再使用 4Mbit (512KB) Flash,請使用 8Mbit (1MB) 或以上容量 flash;

      2. 我司優化了 AT 固件的升級流程,AT 固件發布后,會等一段時間,待客戶反饋穩定后,才上傳到 Espressif Cloud 以供下載更新。因此,如果使用 ESP8266_NONOS_SDK_V1.5.0 及之后版本的 AT 固件暫時無法從 Espressif Cloud 升級。

      NON-OS SDK V2.0.0 2016年08月10日
      ESP8266 NONOS SDK V2.0.0 patch 20160809

      ESP8266_NONOS_SDK_V2.0.0_patch 發布說明

      本 patch 基于 ESP8266_NONOS_SDK_V2.0.0,使用時將壓縮包中 .a 文件覆蓋 SDK/lib 目錄下對應文件。

      有如下更新:

      1. 修正在某些情況下連接較慢問題。

      2. 提供使能頻偏自動校準接口:void system_phy_freq_trace_enable(bool enable);頻偏自動校準功能默認為關閉,如客戶需要打開該功能,需要在 user_rf_pre_init() 里調用該函數,參數為 true。

      注意:

      客戶需要確認使用場景中的環境溫度超出了所用晶振的正常工作溫度范圍,才需要開啟此功能。一般情況下,使用場景環境溫度小于 80 度不建議開啟。

      NON-OS SDK V2.0.0 2016年08月08日
      ESP8266 NONOS SDK MBEDTLS 20160718

      特性

      1. 支持TLS1.0,TLS1.1,TLS1.2,不支持SSL3.0
      2. TLS 緩存范圍2048~8192
      3. 支持AES128,AES256加密算法,CBC模式
      4. 支持SHA1,SHA256,SHA384,SHA512哈希算法
      5. 支持RSA512,RSA1024,RSA2048秘鑰算法
      6. 支持PEM,DER格式證書
      7. 支持單向認證,雙向認證
      8. 支持三級證書鏈解析
      9. 不支持使用root證書驗證三級證書鏈

      使用

      1. 如ESP8266_NONOS_SDK版本低于2.0.0,請將ESP8266_NONOS_SDK_EMBEDTLS目錄下的include、ld、lib文件夾拷貝到SDK根目錄進行覆蓋;高版本的,只需拷貝lib目錄
      2. 如用戶之前已采用libssl.a,則可修改用戶工程目錄下的Makefile,將“-lssl”修改為"-lmbedtls",用戶代碼不需做任何修改
      3. mbedtls_demo示例包含了mbedtls源碼、espconn_secure_xxxx接口具體實現,以及一個簡單示例。
      3.1 將mbedtls_demo整個文件夾拷貝到SDK根目錄
      3.2.進入mbedtls_demo目錄,執行命令 ./make_lib.sh mbedtls ,會自動編譯mbedtls源碼生成libmbedtls.a,并拷貝該庫到SDK/lib目錄
      3.3.通過 ./gen_misc.sh 可生成該demo的測試固件
      NON-OS SDK MBEDTLS 2016年07月17日
      ESP8266 RTOS SDK v1.3.3 Patch_20160704

      本 patch 基于 ESP8266_RTOS_SDK_V1.3.0(68c9e7b4),已包含 1.3.1(095c975c), 1.3.2(86e315aa) 的改動,使用時將壓縮包中 .a 文件覆蓋 SDK/lib 目錄下對應文件。

      更新:

      1. 修正softap模式下,部分station離開可能導致的問題。(1.3.1中解決)
      2. 修正部分情況下,RF_Init_data 系統參數區可能被破壞的問題。新增 user_rf_cal_sector_set,用戶程序必須實現此接口,詳細參見文檔 “2C-ESP8266__SDK__API Guide”。 (1.3.2中解決)
      3. 修正外部復位后,小概率存在 rf 不工作的問題。(1.3.3中解決)
      4. 修改esp_init_data_default.bin的112字節,0x03->0x00,默認關閉頻偏自動校正。(1.3.3中解決)
      注意:基于更新1的示例代碼可參考壓縮包中的user_main.c。

      ESP8266_RTOS_SDK 注意事項:

      1. esp_init_data.bin 至少需要燒錄一次到 flash。
      2. 建議整個系統需要做初始化設置時,或需要重新進行 RF_CAL 時,燒錄 blank.bin 到 RF_CAL 參數區 (由 user_rf_cal_sector_set 設置),并燒錄 esp_init_data.bin 到 flash。
      RTOS SDK V1.3.3 2016年07月04日
      ESP8266 RTOS SDK v1.4.2 Patch_20160704

      本 patch 基于 ESP8266_RTOS_SDK_V1.4.0,已包含 1.4.1 的改動,使用時將壓縮包中 .a 文件覆蓋 SDK/lib 目錄下對應文件。

      更新:

      1. 修正部分情況下,RF_Init_data 系統參數區可能被破壞的問題。新增 user_rf_cal_sector_set,用戶程序必須實現此接口,詳細參見文檔 “2C-ESP8266__SDK__API Guide”。 (1.4.1中解決)
      2. 修正外部復位后,小概率存在 rf 不工作的問題。(1.4.2中解決)
      3. 修改esp_init_data_default.bin的112字節,0x03->0x00,默認關閉頻偏自動校正。(1.4.2中解決)
      注意:基于更新1的示例代碼可參考壓縮包中的user_main.c。

      ESP8266_RTOS_SDK 注意事項:

      1. esp_init_data.bin 至少需要燒錄一次到 flash。
      2. 建議整個系統需要做初始化設置時,或需要重新進行 RF_CAL 時,燒錄 blank.bin 到 RF_CAL 參數區 (由 user_rf_cal_sector_set 設置),并燒錄 esp_init_data.bin 到 flash。
      RTOS SDK V1.4.2 2016年07月04日
      ESP8266 NONOS SDK V1.5.3.3 Patch_20160704

      ESP8266_NONOS_SDK_V1.5.3.3_ Patch 基于 ESP8266_NONOS_SDK_V1.5.3,已包含 ESP8266_NONOS_SDK_V1.5.3.1 和 ESP8266_NONOS_SDK_V1.5.3.2 的改動,使用時將壓縮包中 .a 文件覆蓋 SDK/lib 目錄下對應文件。

      更新:

      1. 修正 system_adc_read 返回值異常的問題。(1.5.3.1中解決)
      2. 修正 light sleep 模式下電流較高的問題。(1.5.3.1中解決) 
      3. 修正 igmp 中一處由于連接特殊路由器可能導致的系統重啟問題。(1.5.3.1中解決)
      4. 修正部分情況下,RF_Init_data 系統參數區可能被破壞的問題。新增 user_rf_cal_sector_set,用戶程序必須實現此接口,詳細參見文檔 “2C-ESP8266__SDK__API Guide”。 (1.5.3.2中解決)
      5. 修正外部復位后,小概率存在 rf 不工作的問題。(1.5.3.3中解決)
      6. 修改 esp_init_data_default.bin 的 112 字節,0x03->0x00,默認關閉頻偏自動校正。(1.5.3.3中解決)
      注意:基于更新4的示例代碼可參考壓縮包中的user_main.c。

      ESP8266_NONOS_SDK 注意事項:

      1. esp_init_data.bin 至少需要燒錄一次到 flash。
      2. 建議整個系統需要做初始化設置時,或需要重新進行 RF_CAL 時,燒錄 blank.bin 到 RF_CAL 參數區 (由 user_rf_cal_sector_set 設置),并燒錄 esp_init_data.bin 到 flash。
      NON-OS SDK V1.5.3.3 2016年07月04日
      ESP8266 NONOS SDK V1.5.2.1 Patch_20160704

      本 patch 基于 ESP8266_NONOS_SDK_V1.5.2,使用時將壓縮包中 .a 文件覆蓋 SDK/lib 目錄下對應文件。

      更新:

      1. 修正部分情況下,RF_Init_data 系統參數區可能被破壞的問題。新增 user_rf_cal_sector_set,用戶程序必須實現此接口,詳細參見文檔 “2C-ESP8266__SDK__API Guide”。 (1.5.2.1中解決) 
      2. 修正外部復位后,小概率存在 rf 不工作的問題。(1.5.2.1中解決)
      3. 修改esp_init_data_default.bin的112字節,0x03->0x00,默認關閉頻偏自動校正。(1.5.2.1中解決)
      注意:基于更新 1 的示例代碼可參考壓縮包中的 user_main.c。

      ESP8266_NONOS_SDK 注意事項:

      1. esp_init_data.bin 至少需要燒錄一次到 flash。
      2. 建議整個系統需要做初始化設置時,或需要重新進行 RF_CAL 時,燒錄 blank.bin 到 RF_CAL 參數區 (由 user_rf_cal_sector_set 設置),并燒錄 esp_init_data.bin 到 flash。
      NON-OS SDK V1.5.2.1 2016年07月04日
      ESP8266 NONOS SDK V1.5.4.1 Patch_20160704

      本 patch 基于 ESP8266_NONOS_SDK_V1.5.4,使用時將壓縮包中 .a 文件覆蓋 SDK/lib 目錄下對應文件。

      更新:

      1. 修正部分情況下,RF_Init_data 系統參數區可能被破壞的問題。新增 user_rf_cal_sector_set,用戶程序必須實現此接口,詳細參見文檔 “2C-ESP8266__SDK__API Guide”。 (1.5.4.1中解決)
      2. 修正外部復位后,小概率存在 rf 不工作的問題。(1.5.4.1中解決)
      3. 修正部分情況下,調用cur、def接口導致的狀態錯誤問題。(1.5.4.1中解決)
      4. 新增AT針對SDIO的支持。(1.5.4.1中解決)
      5. 修正espconn中一處潛在問題。(1.5.4.1中解決)
      6. 修改esp_init_data_default.bin的112字節,0x03->0x00,默認關閉頻偏自動校正。(1.5.4.1中解決)
      注意:基于更新 1 的示例代碼可參考壓縮包中的 user_main.c。

      ESP8266_NONOS_SDK 注意事項:

      1. esp_init_data.bin 至少需要燒錄一次到 flash。
      2. 建議整個系統需要做初始化設置時,或需要重新進行 RF_CAL 時,燒錄 blank.bin 到 RF_CAL 參數區 (由 user_rf_cal_sector_set 設置),并燒錄 esp_init_data.bin 到 flash。
      NON-OS SDK V1.5.4.1 2016年07月04日
      ESP8266 NONOS SDK V1.5.4

      更新:

      1. 更新 libphy.a 到 972 版本。
      2. 更新 libpp.a 到 10.1 版本,解決部分頻偏及休眠問題。
      3. 優化 IGMP 功能。
      4. 優化 DNS 功能。
      5. 優化 WPS 功能。
      6. 優化 DHCP server 功能。
      NON-OS SDK V1.5.4 2016年05月20日
      ESP8266 NONOS SDK V1.5.3

      Updated:

      1. Supported ISSI flash.
      2. SmartConfig updated to version 2.5.4, solved the issue that AirKiss may fail in certain cases.
      3. AT updated to version 1.00.
      4. Added lwip_open_src_template_proj in ESP8266_NONOS_SDK\examples for open source LWIP.
      5. Added SPI driver, refer to ESP8266_NONOS_SDK\driver_lib\driver\spi_interface.c.
      6. Removed the limitation of freedom sending unencrypted beacon/probe req/probe resp.
      NON-OS SDK V1.5.3 2016年04月18日
      ESP8266 RTOS SDK v1.4.0

       1. Update boot.bin to v1.5;

       2. Add wifi_station_set/get_hostname API;

       3. Update SmartConfig to version 2.5.3;

       4. Support GPIO wakeup;

       5. Enable IGMP in LWIP;

       6. Add espconn_init in espconn.h;

       7. Update esp_init_data_default.bin;

       8. IROM start address changed to 0x20000.

      RTOS SDK V1.4.0 2016年02月26日
      ESP8266 IOT Platform

      A demo that should be run with ESP8266 RTOS SDK. This is the initial version.

      RTOS V1.0 2015年09月18日

      APKs

      找到 2 個結果
      • 收起全部
      • 展開全部
      標題 Body 平臺 版本 發布日期升序排列 下載
      ESP-TOUCH for iOS

      Make device connect to AP

      IOS v2.0.0 2020年04月20日
      ESP-TOUCH for Android

      Make device connect to AP

      Android v1.2.3 2020年04月10日

      工具

      找到 16 個結果
      • 收起全部
      • 展開全部
      標題 Body 平臺 版本 發布日期升序排列 下載
      Flash 下載工具
      Windows PC v3.8.8 2021年06月02日
      ESP射頻測試指南

      本測試指南用于指導客戶基于 ESP32 系列和 ESP8266 系列設計的產品,使用相關軟件和儀器進行射頻性能測試或認證測試,并介紹測試方法。

      ZIP V2.6 2021年03月18日
      ESP8266&ESP32 WFA 認證測試指南

      本測試指南文檔用于指導客戶基于 ESP32/ESP8266 設計的產品,在WiFi聯盟認證實驗室過認證時所需要的過程說明文檔。

      Windows PC v1.1 2020年08月05日
      手機控制 ESP8266 云端固件空中升級演示指南

      本指南主要幫助客戶快速、直觀地體驗物聯網云端升級功能。演示基于 ESP8266 物聯網平臺,使用手機 App 配置 ESP8266 設備連接到樂鑫云服務器,通過無線網絡從云端服務器下載新版本的固件到 ESP8266 設備中運行,以此實現固件升級功能。 本指南中的升級演示,基于樂鑫官方提供的開發板 ESP-Launcher。如果客戶使用其他 ESP8266 方案的模組,也可以參考同樣原理,進行固件升級測試。

      ZIP V1.0 2016年10月23日
      ESP8266 移植京東 JoyLink2.0 說明

      ESP8266 移植了京東微聯 JoyLink 協議,為客戶提供參考例程 jd_demo。協議規范基于開發者中心提供的 JoyLink 協議文檔和 SDK demo。廠家可參考 jd_demo 開發自己的應用程序,快速接入京東微聯平臺。 京東微聯提供的 SDK 是在 Ubuntu 環境下運行的,jd_demo 對其修改了頭文件和一些相關的函數,未修改文件結構,所以用戶依然可以參考開發者中心提供的說明文檔。 本文檔介紹了京東智能云后臺設置、京東微聯 APP 的使用等。

      ZIP V1.0 2016年10月11日
      ESP8266 FOTA 演示指南

      FOTA(Firmware Over-The-Air)功能是指 ESP8266 設備通過 Wi-Fi 無線網絡,從服務器下載可運行固件,并重啟運行新固件,從而實現設備固件升級的功能。 本演示指南主要作用:幫助客戶快速、直觀地體驗在 PC 端建立服務器,基于 ESP8266 開發板,實現固件升級的功能。 本文檔中的升級演示基于 ESP-Launcher 開發板進行。如果客戶使用其他 ESP8266 方案的模組,也可以參考同樣原理,進行升級功能測試。 在本演示中,ESP8266 初始運行 user1.bin 固件,連接到服務器下載 user2.bin(帶升級的固件)到設備 Flash 中。下載完成后,ESP8266 進行升級重啟,重新啟動后改為運行新下載的 user2.bin,以此實現 ESP8266 設備固件升級的功能。此后,ESP8266 將默認運行 user2.bin,直至再次進行固件升級。再次升級時,將下載 user1.bin。之后,每次更新升級,即重復這一循環下載的過程。

      ZIP V1.0 2016年10月11日
      TCP/UDP UART 透傳測試演示指南

      本演示指南主要作用:客戶可以快速、直觀地體驗 ESP8266 物聯網平臺實現 TCP & UDP吞吐量測試的演示。

      ZIP V1.0 2016年10月10日
      ALINK 物聯方案 SDK 演示指南

      本演示指南以 ESP8266 開發板為硬件、支持阿里智能云的 SDK 為軟件,介紹了開發板如何連接阿里智能云并且如何使用阿里 APP 進行操作。

      ZIP V1.0 2016年09月23日
      手機控制 ESP8266 設備 (SoftAP 模式)演示指南

      本演示指南主要作用:幫助客戶快速、直觀地體驗物聯網 SoftAP 組網功能。演示基于 ESP8266 物聯網平臺,實現的典型 IoT 產品 SoftAP 組網控制功能。

      ZIP V1.0 2016年09月14日
      手機控制云端 ESP8266 設備演示指南

      本演示指南主要作用:幫助客戶快速、直觀地體驗物聯網云控制功能。演示基于 ESP8266 物聯網平臺,實現典型的 IoT 產品配置到云端,并進行遠程云端控制的功能。

      ZIP V1.0 2016年09月14日
      ESP8266 連接路由獲取 IP 耗時測試演示指南

      本演示指南主要作用:幫助客戶快速、直觀地體驗物聯網本地控制功能。演示基于 ESP8266 物聯網平臺,實現的典型 IoT 產品局域網內的控制功能,測試 ESP8266 設備接入路由獲得 DHCP 分配的 IP 地址所需時間。

      ZIP V1.0 2016年09月14日
      Wi-Fi 收發包功耗測試演示指南

      本演示指南主要作用:幫助客戶快速、直觀的體驗 ESP8266 模塊在不同 PHY模式下發包和收包的功耗測試。

      ZIP V1.0 2016年09月14日
      低功耗測試演示指南

      本演示指南主要作用:幫助客戶快速、直觀的體驗測試 ESP8266 模塊低功耗 Modem-sleep、Light-sleep、Deep-sleep 三種模式下電流值。 本文檔中的低功耗測試基于 ESP-Launcher 開發板進行。如果客戶使用其他 ESP8266 方案的模組,也可以參考同樣原理,進行低功耗測試。

      ZIP V1.0 2016年09月12日
      手機控制本地 ESP8266 設備演示指南

      本演示指南主要作用:幫助客戶快速、直觀地體驗物聯網本地控制功能。演示基于 ESP8266 物聯網平臺,實現的典型 IoT 產品局域網內的控制功能。

      ZIP V1.0 2016年09月12日
      Ping 包測試演示指南

      本演示指南主要作用:客戶可以快速演示 ESP8266 模塊作為 AP 和 STATION 兩種模式時,用 ping 來測試模塊網絡的連通性。

      ZIP V1.0 2016年09月07日
      ESP8266 Add Low-power Cmd

      添加降低功耗的指令到 BIN 文件中。

      Python V2.0 2016年04月27日

      常見技術問題

      • 收起全部
      • 展開全部

      應用

      為什么云端升級需要2個 “bin” 文件?“user1.bin” 和 “user2.bin” 有什么區別?

      user1.bin user2.bin 是 2 個不同的 BIN 文件。生成 user1.bin 和 user2.bin 時,必須使用相同的 Flash 和 boot 設置,以保證 OTA 升級成功。2個 BIN 文件是互補的,運行 user1.bin 的時候,升級是下載 user2.bin;運行 user2.bin 的時候,升級是下載 user1.bin。這樣可以保證升級過程中,如果有掉線的情況發生,設備還是可以正常運行。

      如何生成 “user1.bin” 和 “user2.bin” ?

      編譯環境下,執行 gen_misc.sh 分別得到 user1.bin 和 user2.bin。步驟如下:

      1. 使用正確的 Flash 和 boot 配置,編譯生成 user1.bin。
      2. 執行 make clean,以便清除之前的殘余信息。
      3. 使用相同的 Flash 和 boot 配置,編譯生成 user2.bin。
      云端升級失敗有哪些原因?

      云端升級的詳細介紹參考文檔《ESP8266 FOTA 云端升級指南》。

        

      請先檢查以下問題:

      • 確認使用了正確大小的 Flash。
      • 確認是否燒錄了 blank.bin 做初始化。
      • 確認 user1.bin 和 user2.bin 下載到了正確的地址。
      • 確認生成 user1.bin 和 user2.bin 使用了相同的 Flash、boot 配置。
      如何通過我自己的服務器進行云端升級?

      如果通過客戶自己的服務器升級,請確認服務器滿足下面的要求。

      1. 發送 HEAD 指令到云端服務器,詢問待升級的 BIN 文件長度,服務器回復的 HTTP 包頭中要求帶有 BIN 文件的長度信息。
      2. 根據步驟一查詢到的長度,在 ESP8266 模塊的 Flash 待升級區域,擦除該指定長度(spi_flash_erase_sector),等待下載。
      3. 發送 GET 指令,從服務器下載 BIN 文件,寫入到 Flash 的待升級區域。
      如何使用我自己的云服務器進行云端升級?

      客戶可以使用自己的云服務器,但是要能支持 HTTP 請求,并可以支持設備控制功能。

      云端的 API,請見:http://iot.espressif.cn/#/api-zh-cn/。

      ESP8266 如何和云端服務器進行交互?

      可以使用標準 HTTP 協議連接云服務器。比如,ESP8266 使用如下的 HTTP 請求。

            

      GET /your-bin-file-path.bin HTTP/1.1
      Host: yourdomain.com
      Connection: keep-alive Cache-Control: max-age=0
      Accept:
      text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
      User-Agent:
      Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36
      Accept-Encoding: gzip, deflate, sdch
      Accept-Language:
      en-US,en;q=0.8,ja;q=0.6,zh-CN;q=0.4,zh-TW;q=0.2

          

      注意:HTTP 協議規定請求以“\r\n\r\n”為結束,所以在通訊過程中請不要使用這樣的組合。

      客戶可以通過下面的方法來 debug 服務器:

        

      telnet <sitename> <port_number>

         

      請事先確認 telnet 在您的 PC 上是可以使用的,或者使用其他的支持 telnet 的終端軟件也可以達到同樣的目的,比如 TeraTerm。

      SmartConfig 配網配不上有哪些原因?

      請做以下檢查:

      1. APP 版本是否支持 SDK 版本或 SmartConfig 版本。
      2. 手機連接的路由器不能是單 5G 路由(雙頻路由器除外)。
      3. SmartConfig 過程中不要調用其他 API。
      4. 使用 AT 時,設備沒有獲得 IP 之前,不要調用 smartconfig_stop。

      如以上排除,請調用 smartconfig_start 時打開 debug 模式。把連接失敗和成功的 log 發給我們技術做支持分析。

      SmartConfig 支持的 APP 對應的版本是什么?

      調用 smartconfig_start() 接口,會有"SC version: vX.X.X"版本信息打印。這是 ESP-TOUCH 模塊的版本號。下面是非 OS 對應的 SmartConfig 版本和 APP 版本。

         

      sdk v1.2.0 smartconfig v2.4 app v0.3.4.x
      sdk v1.3.0 smartconfig v2.5 app v0.3.4.x
      sdk v1.3.0 smartconfig v2.5.1 app v0.3.4.x
      sdk v1.4.0 smartconfig v2.5.2 app v0.3.4.x
      sdk v1.5.0 smartconfig v2.5.3 app v0.3.4.x
      sdk v1.5.4 smartconfig v2.5.4 app v0.3.4.x
      ESP8266 支持 HTTP 服務端嗎?

      支持。ESP8266 在 SoftAP 和 Station 模式下都可以作服務端。

          

      • 在 SoftAP 模式下,ESP8266 的服務端 IP 地址是 192.168.4.1。
      • 如果 Station 模式,服務端的 IP 地址為路由器分配給 ESP8266 的 IP。
      • 如果是基于 SDK 二次開發,那么需使用 espconn 結構體和相關 API。
      • 如果是使用 AT 指令,需使用 AT+CIPSERVER 開啟服務端。
      如何通過 AT 指令發 HTTP 包?

      1. AT 指令配置 SoftAP +Station 模式: AT+CWMODE=3 // set softAP+station mode

      2. AT 指令連接路由:AT+CWJAP="SSID","password" // ESP8266 station connect to router

      3. 創建 TCP 連接,按照 HTTP 包的格式發送數據,如下圖紅框標注,請注意,HTTP 包中的換行符 [(0x0d 0x0a) or (CR LF)] 是必須的,不能省去。

         

        

      4. 收到 HTTP 包的回復。

          

      如何在 AT+ 指令中定義自己的函數?如何在函數之間傳遞參數?

      在 Non-OS SDK 中的 AT 示例 (\ESP8266_NONOS_SDK\examples\at\user\user_main.c) 中有提供如何實現一條自定義的 AT 指令“AT+TEST”。結構體 at_funcationType 用于定義一條指令的四種類型,例如指令名稱“AT+TEST”。

          

      • 類型 at_testCmd: 測試指令,對應指令為 AT+TEST=?,AT 示例中注冊的實現回調為 at_testCmdTest,測試指令可以設計為返回參數的取值范圍;注冊為 NULL,則無測試指令。
      • 類型 at_queryCmd: 查詢指令,對應指令為 AT+TEST=?,AT 示例中注冊的實現回調為 at_queryCmdTest,測試指令可以設計為返回當前值;注冊為 NULL,則無測試指令。
      • 類型 at_setupCmd: 設置指令,對應指令格式為 AT+TEST=parameter1,parameter2,……,AT 示例中注冊的實現回調為 at_setupCmdTest,設置指令可以設計用于設置參數值;注冊為 NULL,則無測試指令。
      • 類型 at_exeCmd: 執行指令,對應指令為 AT+TEST,AT 示例中注冊的實現回調為 at_exeCmdTest,執行指令可以設計用于執行某項操作;注冊為 NULL,則無測試指令。
      微信中的近場發現中使用的 Product ID 是從哪里來的?

      需要建立一個 device ID,比如在客戶的微信號下,建立了一個 ID=1234 的設備。通過如下命令

          

      curl -q “https://api.weixin.qq.com/cgi-bin/token? 

      grant_type=client_credential&appid=wx0f74f861897f84b5&secret=your_We Chatname_32characters_please”

         

      //注:目的是得到 access token。("your_WeChatname_32characters_please" 代表客戶的微信 API 應用秘鑰,申請獲得,應該為 32 個字符。)

         

      返回:

         

      {"access_token":"L2_2V1E98Vk- jTXenXDZjDT0GaudUn_VGTRa7O98hdfT0lTZa2B7nj6YvXN01gssQa3ZraRgjALuCvxd

      -SamuPR885KJabaw1EYLA0kns-Yglr4ryolEhHb- QcnWMaNqSEDjACANZY","expires_in":7200}

         

      curl -d '{"device_num":"1","device_list":[{"id":"1234","mac":"18fe3497d500","connect_protocol":"4","auth_key":"00000000000000000000000000000000",

      "close_strategy":"1","conn_strategy":"1","crypt_method":"0","auth_ver":"0","manu_mac_pos":"-2","ser_mac_pos":"-2"}],

      "op_type":"0", "product_id": 5157}' "https://api.weixin.qq.com/device/authorize_device?access_token=L2_2V1E98Vk-jTXenXDZjDT0GaudUn_VGTRa7O98hdfT0lTZa2B7nj6YvXN01gssQa3ZraRgjALuCvxd-SamuPR885KJabaw1EYLA0kns-Yglr4ryolEhHb-QcnWMaNqSEDjACANZY"

           

      //注:建立一個 ID=1234 的設備。

          

      這樣,您只需要使用 AT 指令 AT+CWSTARTDISCOVER=“gh_9e2cff3dfa51”,”1234”,1 即可。(“gh_9e2cff3dfa51” 是您的微信公眾號名字。)

      ESP8266 如何添加自定義 AT 命令,關于自定義 AT 命令字段長度限制是多少?參數段長度限制是多少?

      客戶可以基于 ESP8266_NONOS_SDK\examples\at 示例代碼,在 ESP8266 自帶 AT 命令的基礎上,添加客戶自定義的 AT 命令。關于自定義 AT 命令,SDK 限制整條 AT 命令數據長度最大 128 字節(含結束符 “\r\n”),不單獨限制命令段和參數段。

         

      例如:AT+CMDTEST=param1,param2,param3,….paramN\r\n

      則:strlen(“AT+CMDTEST=param1,param2,param3,....paramN\r\n”)<=128 Bytes

         

      相關 SDK 及參考資料請至樂鑫官網下載:ESP8266 SDK 和 Demo。

      如果應用使用的是不支持 FOTA 的固件,要將 eagle.irom0.text.bin 下載到哪里?

      對于 Non-OS SDK 和 RTOS SDK,固件 BIN 文件的位置取決于合適的鏈接腳本內容。如果應用中使用的是不支持 FOTA 的固件,則用戶代碼包含在  eagle.irom0.text.bin 中。該 BIN 文件在 Flash 中的位置是由 SDK/ld 中的鏈接腳本 eagle.app.v6.ld 決定的。

           

      注意:在所有版本 ESP8266 SDK 中, eagle.irom0.text.bin 的默認位置并不都是一樣的。用戶可以確認在自己的 ESP8266 SDK 版本中,該 BIN 文件在 Flash 中的位置。如下圖所示:

          

           

      圖中標藍的數字表示 eagle.irom0.text.bin 在 Flash 中的地址。在上圖的例子中,該地址為 0x10000。

      外設

      ADC 的性能參數有幾個通道?采樣率和有效位數是多少?

      通道:1

      采樣率:

      停止 Wi-Fi 的情況下,能達到每秒 100000 次。

      Wi-Fi 正常工作的情況下,能達到每秒 1000 次。

      有效位數:

      內部 ADC 有效位數為 12 位。

      uint16 system_adc_read(void)//API 返回值的有效位數是 10 位。

      從哪里可以得到 ADC 的寄存器 “bitmap” 信息?

      ADC 是和內部 RF 電路高度集成的,所以 bitmap 和寄存器信息沒有公開,如有特殊需求請與技術支持聯系。

      ADC 的精度如何?

      ESP8266 連接路由器后,單 STA 模式會進入 modem_sleep,導致芯片內部電流發生變化,參ESP8266 連接路由器后,單 STA 模式會進入 modem_sleep,導致芯片內部電流發生變化,參考值變化,因此 ADC 采集異常。用戶如果需要測量的非常準確,可以用 system_adc_fast_read 的函數,但是測量之前需要關閉 RF,Wi-Fi 連接會斷開。如果需要測試比較準確,數值相差 1,或 2,可以配置 Wi-Fi 為 non_sleep 模式 wifi_set_sleep_type(NONE_SLEEP_T);建議該用戶這樣配置。如果對精確性要求不高,可以允許模塊進入 sleep 模式,功耗較低。

      內部 ADC 的用途是什么?

      內部 ADC 可以用于溫度檢測和粗略地測量外部設備電流。由于 ADC 容易受噪聲影響,所以推薦只在低精度的需求時使用。比如熔斷機制。

      (u8 tx_addr, u8 tx_cmd, u8 tx_rep) 這三個參數是什么意思?

      tx_addr 是發送地址;u8 tx_cmd 是發送 cmd;u8 tx_rep 是重復發送的次數。

      如何使能 UART 流控?
      1. UART 通信時,如需配置 UART 通信的數據格式,請參考 SDK/driver_lib/driver/ 路徑下的 uart.c 文件。
      2. UART 通信,如需配置硬件流控。請執行下面兩個步驟:

      (1) 請在 uart.h 中將下面的宏置 1。

      #define UART_HW_RTS 1 //set 1: enable uart hw flow control RTS, PIN MTDO, FOR UART0

      #define UART_HW_CTS 1 //set1: enable uart hw flow contrl CTS , PIN MTCK, FOR UART0

          

      (2) 配置硬件流控的門限值

      截圖中紅色標注部分為硬件流控的門限值,在 RXFIFO 中字節數大于 110 后,RTS 將會被拉高。

           

      如何配置信息打印到 UART1 上?

      UART1 只有 Tx 功能,可以在 UART0 用于通訊時,做打印 log 用途。

         

      請參考如下代碼:

          

      void ICACHE_FLASH_ATTR 

      uart_init_new(void) 

      // Wait for FIFOs to be emptied

          UART_WaitTxFifoEmpty(UART0); 

          UART_WaitTxFifoEmpty(UART1); 

      // Configure UART settings

          UART_ConfigTypeDef uart_config; 

          uart_config.baud_rate    = BIT_RATE_74880; 

          uart_config.data_bits     = UART_WordLength_8b; 

          uart_config.parity          = USART_Parity_None; 

          uart_config.stop_bits     = USART_StopBits_1; 

          uart_config.flow_ctrl      = USART_HardwareFlowControl_None; 

          uart_config.UART_RxFlowThresh = 120; 

          uart_config.UART_InverseMask = UART_None_Inverse; 

          UART_ParamConfig(UART0, &uart_config); 

              

          UART_IntrConfTypeDef uart_intr; 

          uart_intr.UART_IntrEnMask = UART_RXFIFO_TOUT_INT_ENA | UART_FRM_ERR_INT_ENA | UART_RXFIFO_FULL_INT_ENA; 

          uart_intr.UART_RX_FifoFullIntrThresh = 100; 

          uart_intr.UART_RX_TimeOutIntrThresh = 2; 

          uart_intr.UART_TX_FifoEmptyIntrThresh = 20; 

          UART_IntrConfig(UART0, &uart_intr); 

      // Set UART1 for printing

          UART_SetPrintPort(UART1); 

      // Register interrupt handler

          UART_intr_handler_register(uart0_rx_intr_handler); 

          ETS_UART_INTR_ENABLE(); 

      }

      SDIO 是否支持 SD 卡?

      ESP8266 是 SDIO Slave ,不支持 SD 卡。

      SDIO 最高速度能支持到多少?

      SDIO 時鐘能到 50 MHz ,理論最高速度是 200 Mbps 。

      使用 PWM 時,發現最開始時有窄波,是什么原因?

      這個是精度較高的 PWM 的調節方式,PWM 的精度可以達到 22222 深度。精度的調節主要靠后面的窄波。注意這種方式的 PWM Duty 無法配置為 100%。

      為什么上電時會有 LED 燈閃一下的情況?

      要看燈的驅動是如何設計的。如是低電平燈亮,并且在上電的時候將 IO 強制拉為低電平,那么在上電的瞬間可能會出現燈閃一下。是因為除了 FLASH 相關的 IO 和 GPIO4 ,GPIO5 ,其他 IO 上電后上拉默認使能。

          

      解決方法:

      1. 上電的瞬間,user_init 中將上拉關閉。
      2. 如第一條無效的,需要我們提供相應的 boot.bin。在該 BIN 被搬到 RAM 的過程里,IO 的上拉就會被關閉。這比 user_init 生效要早。
      發現 PWM 的變化緩慢,是什么原因?

      客戶采用了 SDK example/IOT_demo 中的漸變 API。如 light_set_aim, light_set_aim_r 這些 API 使用的是漸變方式。不會立即生效,需要漸變的過程。

          

      如用戶需要 PWM Duty 設置后立即生效,需要調用接口 pwm_set_duty,需要注意調用 pwm_set_duty 后調用 pwm_start 此次設置才能生效。

      GPIO 可以直接連 5V 嗎?

      不可以。GPIO 只能承受 3.6V。需要通過降壓電路,否則會造成 GPIO 損壞。

      哪里能找到 GPIO 的 register 和 bitmap 信息?

      請參考文檔《ESP8266 技術參考》。

      如何編程 GPIO?

      對于 Non-OS SDK,比如需要把 MTDO 配置成輸入,同時下降沿觸發中斷:

      void ICACHE_FLASH_ATTR gpio_init(void)
      {
      //GPIO Alternate Function
            PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U,FUNC_GPIO15);
            GPIO_DIS_OUTPUT(GPIO_ID_PIN(15));
            //Configure it in input mode.
            ETS_GPIO_INTR_DISABLE();
          //Close the GPIO interrupt
      //Register the interrupt function
            ETS_GPIO_INTR_ATTACH(GPIO_INTERRUPT,NULL);

             

            gpio_pin_intr_state_set(GPIO_ID_PIN(15),GPIO_PIN_INTR_NEGEDGE);
            //Falling edge trigger
            ETS_GPIO_INTR_ENABLE() ;
          //Enable the GPIO interrupt
      }

          

      對于 RTOS SDK,實現相同的功能。

      {
           GPIO_ConfigTypeDef gpio_in_cfg;
          //Define GPIO Init Structure
           gpio_in_cfg.GPIO_IntrType = GPIO_PIN_INTR_NEGEDGE;
          //Falling edge trigger
           gpio_in_cfg.GPIO_Mode = GPIO_Mode_Input;
          //Input mode
           gpio_in_cfg.GPIO_Pin = GPIO_Pin_15;
          // Enable GPIO
           gpio_config(&gpio_in_cfg);
          //Initialization function
           GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS,
      BIT(GPIO_UART_IN_NUM));
           gpio_intr_handler_register(interrupt_GPIO_UART);
          // Register the interrupt function
           _xt_isr_unmask(1 << ETS_GPIO_INUM);
          //Enable the GPIO interrupt
      }

           

      注意:Non-OS SDK 和 RTOS SDK 的實現方法稍有不同。

      HSPI 每個數據包的大小最大是多少?

      數據包每次發送最大 64 字節數據,四字節對齊,在 memory map 上是連續的。數據可以先傳輸到 LSB 或者 MSB 中,低位組在前或高位組在前,所以緩存是很靈活的。合理的使用 buffer,可以穩定實現 90% 的時鐘速度。

      對于多設備同時連接到 ESP8266 的情況,HSPI 是如何同時驅動設備的?

      與 I2C 接口不同,HSPI 時鐘不需要配合最慢的連接設備。HSPI 時鐘可以及時的配置為使能的設備。HSPI_CS0 管腳可以自動選擇。對于 LCD 類型的設備,需要頻繁使用 CS 管腳。如果是連接高速設備,需要使用源端接電阻。

      如何使用 64 字節的數據緩存?

      使用函數

      CLEAR_PERI_REG_MASK(SPI_USER(spiNum), SPI_USR_MISO_HIGHPART );

      使能 MISO 的高位傳輸。

      如何配置 (H)SPI 接口?

      請參考 Non-OS SDK 下,example/peripheral_test。

      哪些 API 會保存到 Flash ?

      wifi_station_set_auto_connect

      wifi_station_ap_number_set

      wifi_set_phy_mode

      wifi_softap_set_config

      wifi_station_set_config

      wifi_set_opmode

      system_restart_enhance

      system_restore

      system_upgrade_reboot

      系統參數是如何保存的?

      SPI Flash 的最后三個扇區被定義為系統參數區,其中前兩個扇區用于交替保存系統參數,最后一個扇區用來保存使用前面兩個扇區的 flag。這樣設計的目的是保證在擦寫系統參數區時,即使在擦寫任意一個扇區時意外掉電,導致該扇區中數據異常的情況下,也不會導致系統的參數異常。

      Flash 任何位置都可以隨意讀寫嗎?

      讀寫操作都需要四字節對齊。我們推薦對 block 操作,避免頻繁的小數據讀寫。

      可以在所有的 ESP8266 上執行同樣的 Flash 讀寫操作嗎?

      對應不同的 Flash 大小,有著不同的 Flash map,所以對應不同的固件,Flash map 可能不一樣,比如對應 8 Mbit 的 Flash,讀寫 0x100000 地址就是非法的。

      可否提供 Flash 擦寫例證?

      uint32 sector 是開始的 sector,uint32 cnt 是擦除的 sector 數目。

         

      #define FLASH_WRITE_LEN_BYTE (1024*4)

      #define FLASH_WRITE_CONTENT (0X10)

      void flash_sector_rw_test(uint32 sector,uint32 cnt)

      {

            char* w_data=(char*)os_malloc(FLASH_WRITE_LEN_BYTE);

            uint32 flash_operate=0;

            uint32 i=0;

            uint8 status=0;

            os_printf("Test Sector is 0x%x\n",sector);

            if(NULL==w_data){

               os_printf("Memory little\n");

               return;

      }

      os_memset(w_data,FLASH_WRITE_CONTENT,FLASH_WRITE_LEN_BYTE);

      for(i=0;i<cnt;i++){

            if(spi_flash_erase_sector(sector+i)==0)

             {

               os_printf("erase sector0x%x ok\n",sector+i);

            }

            else{

               os_printf("Err:erase sector0x%x err\n",sector+i);

            }

      }

      for(i=0;i<cnt;i++){

            if(spi_flash_write((sector+i)*(FLASH_WRITE_LEN_BYTE),

      (uint32*)w_data,FLASH_WRITE_LEN_BYTE)==0)

            {

               os_printf("write sector 0x%x ok\n",sector+i);

            }

            else{

               os_printf("Err:write sector 0x%x err\n",sector+i);

            }

      }

      for(i=0;i<cnt;i++){

               os_memset(w_data,0x00,FLASH_WRITE_LEN_BYTE);

            if(spi_flash_read((sector+i)*(FLASH_WRITE_LEN_BYTE), (uint32*)w_data,FLASH_WRITE_LEN_BYTE)==0)

            {

               uint32 j=0;

               for(j=0;j<FLASH_WRITE_LEN_BYTE;j++){

               if(*(w_data+j)!=FLASH_WRITE_CONTENT){

                  os_printf("Err Flash read w_data[%d]=0x%x\n",j,w_data[j]);

                  //status=1;

               }

               if(*(w_data+j)==FLASH_WRITE_CONTENT&&j==FLASH_WRITE_LEN_BYTE-1)

               {

                  os_printf("Sector0x%x Test Ok\n",sector+i);

                     }

      }

            }

            else {

               os_printf("Err:read sector0x%x err\n",sector+i);

           }

      }

      os_free(w_data);

      w_data=NULL;

      }

      如何判斷 Flash 是否支持 QIO 或 DIO 模式?

      判斷 Flash 是否支持四線:

      1. QE 在狀態寄存器的 BIT(9)。
      2. 寫狀態寄存器的格式為 01H+StatusReg1+StatusReg2。
      3. 有讀 Flash 的如下命令:
        • 若是選擇 QIO,必須支持 EBh 命令。
        • 若是選擇 QOUT,必須支持 6 Bh 命令。

      判斷 Flash 是否支持兩線:

      有讀 Flash 的如下命令:

        • 若是選擇 DIO,必須支持 BBh 命令。
        • 若是選擇 DOUT,必須支持 3 Bh 命令。

      特殊的 Flash:ISSI Flash 可以支持 QIO 模式。

      為什么透傳過程會丟包?

      因為沒有設置硬件流控。如果需要避免丟包,請設置硬件流控。透傳功能使用的是 TCP 協議,每包數據是 1460 (取決于協議棧),只要網絡良好,buffer 空間沒有被消耗完,就可以不停地傳輸數據。對于透傳,串口接收數據間隔超過約 20 ms,就會認為數據接收結束,將已經接受的數據傳輸到網絡。如果網絡不好,就可能會丟棄一些數據,因此,為避免這種情況,可以將串口設置為流控模式。

      ESP8266 有幾個 UART?

      ESP8266 有兩個 UART,其中 UARTO 有 TX、RX,可做數據傳輸;UART1 由于 RX 腳被 SPI-Flash 占用,只能使用 TX,可以做串口調試信息打印。

      GPIO 電平狀態是怎樣的?

      除了 XPD_DCDC,GPIO 可以配置上拉。關于 GPIO 的上電 IO 口默認狀態為:除了 SDIO 6根線 +GPIO4+GPIO5+GPIO16 上電 IO 默認無上拉,其他的 GPIO 口均有上拉。由于是內部配置上拉,所以如需下拉,需外部加下拉方式或者加一個三級管的反相電路。

          

      注意:GPIO 不能到 5V。GPIO4/5 外接 1M 電阻不能上拉到高電平;需 100K 電阻。

         

      如何屏蔽上電打???

      U0TXD 默認上電有系列打印,對此敏感應用可通過 UART 的內部引腳交換功能,在初始化的時候,調用 system_uart_swap 函數,將 U0TXD、U0RXD 分別與 U0RTS (MTDO/GPIO15),U0CTS (MTCK/GPIO13) 交換來屏蔽該上電的系統打印。交換后,硬件上的下載管腳還是使用 U0TXD+U0RXD,通信時需要將 MTDO 對應接到 MCU 的 RXD,MTCK 對應接到 MCU 的 TXD。

      為什么 ESP8266 上電時會出現亂碼?如何修改波特率?

      如果使用的是 26 MHz 晶振,ESP8266 UARTO 上電后的波特率是 74880,所以上電時會有亂碼。

        

      客戶可以在 user_main() 里面修改 UART 配置,比如:

      void ICACHE_FLASH_ATTR
      uart_init(UartBautRate uart0_br, UartBautRate uart1_br)
      {
            // rom use 74880 baut_rate, here reinitialize
            UartDev.baut_rate = uart0_br;
            uart_config(UART0);
            UartDev.baut_rate = uart1_br;
            uart_config(UART1);
      }

      云平臺

      在樂鑫的云平臺上,設備的生命周期是怎樣的?
      1. 燒錄 master-device-key,出廠。
      2. 到達終端用戶,使用 Airkiss/ESP_TOUCH 讓設備聯網,同時傳遞隨機字符(token,App 產生)作為權限標識,設備上網之后調用 /v1/device/activate,同時把 token 傳遞給云端。
      3. 終端用戶使用 App 并且調用 /v1/device/authorize 接口(使用之前產生的隨機 token),獲得這個設備的所有權(成為 owner,獲得對應的 owner key)。
      4. 終端用戶對設備的擁有本質上是對 device key 的擁有,對于每一個設備的控制,是通過對應的 device key 來操作的。
      5. 終端用戶使用 /v1/user/devices 列出擁有的設備以及對應的 device key,然后使用對應的 devicekey 做具體的操作。
      6. 終端用戶是 owner 的權限下,可以調用 /v1/device/share 接口分享設備給他人,對應的用戶使用 /v1/device/authorize 接口得到授權。

      硬件

      ESP8266 電壓電流需求?

      ESP8266 的數字部分的電壓范圍是 1.8V ~ 3.3V。

      模擬部分的工作電壓是 3.0V ~ 3.6V,最低 2.7V。

      模擬電源峰值 350 mA。

      數字電源峰值 200 mA。

      注意:選擇的 SPI Flash 工作電壓也需要與 GPIO 的電壓匹配。

      CHIP_EN 還是工作在 3.0 - 3.6V,使用1.8V GPIO 控制時需要注意電平轉換。

      設計 ESP8266 的供電時,需要注意哪些問題?

      請注意如下幾點:

      1. 如果是使用 LDO 變壓,請確保輸入電壓和輸出電壓要足夠大。
      2. 電源軌去耦電容器必須接近 ESP8266 擺放,等效電阻要足夠低。
      3. ESP8266 不能直連 5V 電壓。
      4. 如果是通過 DC-DC 給 ESP8266 供電,必要時要加上 LC 濾波電路。
      ESP8266 上電時電流很大,是什么原因?

      ESP8266 的 RF 和數字電路具有極高的集成度。上電后,RF 自校準會需要大電流。模擬部分電路最大的極限電路可能達到 500 mA;數字電路部分最大電流 達到 200 mA。一般的操作,平均電流在 100 mA 左右。因此,ESP8266 需要供電能達到 500 mA,能夠保證不會有瞬間壓降。

      可以使用鋰電池或者 2 節 AA 紐扣電池直接給 ESP8266 供電嗎?

      2 節 AA 紐扣電池可以給 ESP8266 供電。鋰電池放電時壓降比較大,不適合直接給 ESP8266 供電。

      ESP8266 的 RF 電路會受溫度及電壓浮動影響。不推薦不加任何校準的電源直接給 ESP8266 供電。

      推薦使用 DC-DC 或者 LDO 給 ESP8266 供電。

      SPI Flash 上電時,是否有特殊需求?

      SPI Flash 用于存儲用戶的程序和數據。為了保證兼容性,SPI Flash 的電壓應該和 GPIO 的電壓相匹配。

      上電時序是怎樣的,boot 模式是如何選擇的?

      CHIP_EN 上電時序要求:CHIP_EN 芯片使能管腳,內部無上拉,高電平有效。CHIP_EN 的上電要晚于或同時與系統電源 3.3V 上電。一般 CH_EN 有外接 RC 電路,延時大概在 μs 級即可。CHIP_EN 拉高大概 60 ms 后,設備判斷 boot mode {GPIO15, GPIO0, GPIO2},之后 UART 即可通訊。

          

      EXT_RSTB:外部復位管腳,內部有上拉,懸空即為高電平。EXT_RSTB 為電平觸發,低電平觸發芯片復位。如果是外部給 ESP8266EX 的 reset  信號,則最低要求(0.25 VIO,100 μs)。

         

      描述 最小值 最大值 單位
      t1 VDD33 上升時間 10 2000 μs
      t2 EXT_RSTB 上升時間 0 2 ms
      t3 EXT_RSTB 電平在 VDD33 電平為高后上升 0.1 - ms
      t4 CHIP_EN 上升時間 0 2 ms
      t5 CHIP_EN 電平 在 EXT_RSTB 電為高后上升 0.1 - ms
      ESP8266 的 RAM 的使用結構是怎么的?

      ESP8266 的 RAM 總共 160 KB。

        

      IRAM 空間為 64 KB:

      前 32 KB 用作 IRAM,用來存放沒有加 ICACHE_FLASH_ATTR 的代碼,即 .text 段,會通過 ROM code 或二級 boot 從 SPI Flash 中的 BIN 中加載到 IRAM。

      后 32 KB 被映射作為 iCache,放在 SPI Flash 中的,加了 ICACHE_FLASH_ATTR 的代碼會被從 SPI Flash 自動動態加載到 iCache。

         

      DRAM 空間為 96 KB:

      對于 Non-OS_SDK,前 80 KB 用來存放 .data/.bss/.rodata/heap,heap 區的大小取決于 .data/.bss/.rodata 的大??;還有 16 KB 給 ROM code 使用。

      對于 RTOS_SDK,96 KB 用來存放 .data/.bss/.rodata/heap,heap 區的大小取決于 .data/.bss/.rodata 的大小。

      協議

      TCP/UDP 的包長是多少?

      單包數據,TCP 單包 1460 字節,UDP 單包 1472 字節。

      系統

      ESP8266 的看門狗有什么作用?

      為了提供系統穩定性,以應對多沖突的操作環境,ESP8266 集成了 2 級看門狗機制,包括軟件看門狗和硬件看門狗。默認 2 個看門狗都是打開的。

      看門狗的超時間隔是多少?觸發超時事件會有什么現象?

      硬件看門狗中斷時間為 0.8*2048 ms ,即 1638.4 ms ,中斷后處理時間為 0.8*8192 ms,即 6553.6 ms 。其中中斷處理后時間為硬件看門狗中斷發生后,需要進行喂狗操作的時間,如果超過該時間,即會觸發硬件看門狗復位。因此,在僅有硬件看門狗的情況下,一個程序段如果運行時間超過 6553.6 ms ,即有可能觸發硬件看門狗復位,若超過 8192 ms 則一定會觸發復位。軟件看門狗建立在 MAC timer 以及系統調度之上,中斷時間為 1600 ms,中斷后處理時間為 1600 ms。因此,在有軟件+硬件看門狗的情況下,一個程序段如果運行時間超過 1600 ms,即有可能會觸發軟件看門狗復位,若超過 3200 ms 則一定會觸發復位。

      如果我的應用不需要看門狗,如何關閉看門狗?

      當時 SDK 僅支持關閉軟件看門狗,支持同時喂軟硬件看門狗??梢酝ㄟ^如下方式防止執行時間過長的用戶程序導致看門狗復位:

      1. 如果一個程序段運行時間在觸發軟件看門狗和觸發硬件看門狗復位之間,則可通過 system_soft_wdt_stop () 的方式關閉軟件看門狗,在程序段執行完畢后用 system_soft_wdt_restart () 重新打開軟件看門狗。
      2. 可以通過在程序段中添加 system_soft_wdt_feed () 來進行喂軟硬件狗操作,防止軟硬件看門狗復位。
      我要在程序里面引入 10 秒的延遲,怎么做好?

      看門狗不支持無限循環。如果客戶使用循環做延遲或者進入一個事件太長時間,就會觸發硬件看門狗重啟。推薦使用 callback 和 timer 的 API 做延遲。

          

      如果要輪詢事件,推薦使用中斷和 timer 的 API 來做。大多數事件都是關聯到 callback 上的,所以大多數情況下,輪詢都是可以避免的。

      對于 Non-OS SDK,memory leak 問題如何 debug?

      可通過定于 MEMLEAK_DEBUG 宏啟用 memory leak debug 功能,代碼中調用 os_malloc, os_zalloc, os_calloc, os_realloc, os_free 可將調用的文件以及調用的對應行數記錄在內存管理鏈表中,在有需要的地方通過調用 system_print_meminfo() 可打印出 heap 區內存分配情況。

          

      步驟:

          

      1. 修改用戶工程目錄的 MakeFile,在 CONFIGURATION_DEFINES 后加宏定義:-DMEMLEAK_DEBUG
          如:CONFIGURATION_DEFINES = -DMEMLEAK_DEBUG

      2. 在用戶代碼,如 user_main.c 中,增加如下代碼:
        #include "mem.h"
        bool ICACHE_FLASH_ATTR check_memleak_debug_enable (void)
        {
        return MEMLEAK_DEBUG_ENABLE;
        }

      3. 在有可能內存泄露的地方調用 system_print_meminfo() ,建議僅在關鍵代碼位置加入此函數進行 debug。

      對于 RTOS SDK, memory leak 問題如何 debug ?

      暫不支持該功能??梢詤⒖?FreeRTOS 的 debug 方法。

      發生“fatal exception”問題如何處理?

      可以在 (*.S) 文件中找出對應的地址,添加打印以便定位問題。

      Fatal exception (28):
      epc1=0x4025bfa6, epc2=0x00000000, epc3=0x00000000,
      excvaddr=0x0000000f, depc=0x00000000

        

      比如使用的是 user1.bin,那么就在 user1.S 中找到 0x4025bfa6 地址,并查明對應的函數。

         

      如果使用的是 flash.binirom0text.bin,可以在 eagle.S 中查找出錯的地址。

      ESP8266 總共有幾個 timer ?

      ESP8266 有 2 個 timer。一個硬件的 timer,一個軟件的 timer。API os_timer 是 DSR 處理,不能產生中斷,但是可以產生任務。任務會按照普通等級排隊。硬件 timer 能產生中斷和任務,中斷能觸發任務,任務按照普通等級排隊。

      使用 timer 中斷是否有特定條件?

      請參考 SDK 的 API 參考:《ESP8266 Non-OS SDK API 參考》和《ESP8266 RTOS SDK API 參考》(鏈接為:espressif.com/zh-hans/support/download/documents)。

           

      一般情況,使用 Non-OS SDK 時,硬件中斷回調里面不要有聲明為 ICACHE_FLASH_ATTR 的功能。同時中斷回調里不要占用 CPU 太長時間。

      如何調整 Tx Power?

      system_phy_set_max_tpw” 用于設置 RF Tx Power 最大值,單位:0.25 dBm。目前 Flash download tool 中已開放給客戶自行配置并生成 esp_init_data_default.bin。其中關于 Tx Power 的調整如下所示:

          

      • LowPowerEn:同時設置每個模式下的 Tx Power。
      • BackOffEn:同時設置每個模式下 Tx Power 需要減小的值。
      • PowerLimiten:限制 Tx Power 的最大值。
      • 設置確認之后點擊 GenInitBin,并替換原先的 esp_init_data_default.bin。

         

      為什么 ESP8266_Non-OS_SDK 中有的函數前面添加了“ICACHE_FLASH_ATTR”宏?

      對于 ESP8266_Non-OS_SDK:

      添加了“ICACHE_FLASH_ATTR”宏的函數,將存放在 IROM 中,CPU 僅在調用到它們的時候,將它們讀到 cache 中運行;沒有添加到ICACHE_FLASH_ATTR”宏的函數,將在一開始上電運行時,就加載到 IRAM 中運行;由于空間有限,我們無法將所有代碼都一次性加載到 IRAM 中運行,因此在大部分函數前添加到ICACHE_FLASH_ATTR”宏,放在 IROM 中。

         

      請注意,不要再中斷處理函數中調用帶有ICACHE_FLASH_ATTR”宏的函數,否則可能與 Flash 讀寫操作沖突。

         

      對于 ESP8266_RTOS_SDK:

      函數默認存放在 IROM 中,無須再添加ICACHE_FLASH_ATTR”宏。中斷處理函數也可以定義在 IROM 中。如果開發者需要將一些頻繁調用的函數定義在 IRAM 中,在函數前添加“IRAM_ATTR”宏即可。

      為什么編譯 Non-OS SDK 時會發生 IRAM_ATTR 錯誤?

      如果需要在 IRAM 中執行功能,就不需要加“ICACHE_FLASH_ATTR”的宏,那么該功能就是放在 IRAM 中執行。

      為什么編譯的時候會發生“irom0_0_seg”錯誤?

      它表示代碼量太大,IROM 區域存放不下了。

      我們可以在 SDK_v0.9.5 (及之后)的軟件版本中,嘗試如下步驟,解決這個問題:

         

      1. 使用默認設置,編譯生成 eagle.flash.bin eagle.irom0text.bin。

      (1) 如果 size of eagle.flash.bin + size of eagle.irom0text.bin >= 236KBytes

      很抱歉,您的代碼量太大了,只能換大些的 Flash。

      (2) 如果 size of eagle.flash.bin + size of eagle.irom0text.bin < 236KBytes

      請繼續步驟 2。

         

      2. 在路徑 SDK/ld 下修改文件“eagle.app.v6.new.512.app1.ld"。

      irom0_0_seg:           org = 0x40201010, len = 0x2B000

      根據步驟 1 中編譯的“eagle.irom0text.bin”大小,改寫上述 len 的值。

      示例:如果“eagle.irom0text.bin”大小為 179 KB,則可修改配置如下:

      irom0_0_seg:           org = 0x40201010, len = 0x2D000

         

      3. 重新編譯 user1.bin 選擇 boot_v.1.2+。

        

      補充說明:

      代碼中,

        • 函數前未加  ICACHE_FLASH_ATTR 的,編譯到 IRAM 中,最大 32 KB;
        • 函數前加了 ICACHE_FLASH_ATTR 的,編譯到 IROM 中;

      因為 RAM 的空間有限,因此做了這兩個部分的區分:

        • IRAM 中的代碼,會在上電初始就完整加載到 RAM 中;
        • IROM 中的代碼是用到的時候才從 Flash 加載到 cache 中執行。
      ESP8266 有 main 嗎?

      ESP8266 沒有 main,程序入口為 user_init。

      操作指針有什么需要注意的?

      內存必須 4 字節對齊讀取,指針做轉換時間請確保為 4 字節對齊,否則轉換失敗,不能正常使用。例如,請勿直接指針轉換 float temp = *((float*)data);而是使用 os_memcpy (memcpy) 實現。 

      RTOS SDK 和 Non-OS SDK 有何區別?

      主要差異點如下:

         

      Non-OS SDK

      Non-OS SDK 主要使用定時器和回調函數的方式實現各個功能事件的嵌套,達到特定條件下觸發特定功能函數的目的。Non-OS SDK 使用espconn 接口實現網絡操作,用戶需要按照 espconn 接口的使用規則進行軟件開發。

          

      RTOS SDK

      1. RTOS 版本 SDK  使用 freeRTOS 系統,引入 OS 多任務處理的機制,用戶可以使用 freeRTOS 的標準接口實現資源管理、循環操作、任務內延時、任務間信息傳遞和同步等面向任務流程的設計方式。具體接口使用方法參考  freeRTOS 官方網站的使用說明或者 USING THE FREERTOS REAL TIME KERNEL -  A Practical Guide 這本書中的介紹。
      2. RTOS 版本 SDK 的網絡操作接口是標準 lwIP API,同時提供了 BSD Socket API 接口的封裝實現,用戶可以直接按照 socket API 的使用方式來開發軟件應用,也可以直接編譯運行其他平臺的標準 Socket 應用,有效降低平臺切換的學習成本。
      3. RTOS 版本 SDK 引入了 cJSON 庫,使用該庫函數可以更加方便的實現對 JSON 數據包的解析。
      4. RTOS 版本兼容 Non-OS SDK 中的 Wi-Fi 接口、SmartConfig 接口、Sniffer 相關接口、系統接口、定時器接口、FOTA 接口和外圍驅動接口,不支持 AT 實現。
      哪些接口需要在 user_init 中調用,否則容易出現問題,或者不生效?
      1. wifi_set_ip_info、wifi_set_macaddr 僅在 user_init 中調用生效,其他地方調用不生效。
      2. system_timer_reinit 建議在 user_init 中調用,否則調用后,需要重新 arme 所有 timer。
      3. wifi_station_set_config 如果在 user_init 中調用,底層會自動連接對應路由,不需要再調用 wifi_station_connect 來進行連接。否則,需要調用 wifi_station_connect 進行連接。
      4. wifi_station_set_auto_connect 設置上電啟動時是否自動連接已記錄的路由;例如,關閉自動連接功能,如果在 user_init 中調用,則當前這次上電就不會自動連接路由,如果在其他位置調用,則下次上電啟動不會自動連接路由。
      Light-sleep 如何通過 GPIO 或網絡事件喚醒?

      在 Light-sleep 模式下,CPU 在暫停狀態下不會響應來自外圍硬件接口的信號與中斷,因此需要配置通過外部 GPIO 信號將 ESP8266 喚醒,喚醒過程小于 3 ms。

          

      wifi_station_disconnect();

      wifi_set_opmode(NULL_MODE); // set WiFi mode to null mode

      wifi_fpm_set_sleep_type(LIGHT_SLEEP_T);

      wifi_fpm_open();
      PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_GPIO13);

      gpio_pin_wakeup_enable(13, GPIO_PIN_INTR_LOLEVEL);//建議低電平喚醒

      wifi_fpm_set_wakeup_cb(ssc_fpm_wakup_call);

      wifi_fpm_do_sleep(FPM_SLEEP_MAX_TIME);

      ESP8266 FRC1 的 hw_timer 如何使用?

      1. 模型:

         

          

      (1) FRC1 的參考時鐘為 80M,分頻系數可以配置為 1 分頻,16 分頻,256 分頻,不同的分頻影響每個 tick 的時長。

        

      (2) FRC1 為遞減型 timer,當 COUNT_VALUE 的值減到 0 后會觸發中斷。每一個 tick,COUNT_VALUE 的值都減 1。

         

      (3) FRC1 可以配置為自動填裝模式和非自動填裝模式。

      自動填裝模式:當發生中斷后,COUNT_VALUE 會自動取 FRC1_LOAD_VALUE 的值,放到本身,做自減操作。

      非自動填裝模式:當發生中斷后,COUNT_VALUE 會切到最大值 0x7fffff 開始計。

          

      (4) FRC1 的終端可以配置為 FRC1 中斷源和 NMI 中斷源。

      NMI 中斷被稱為 CPU 不可屏蔽中斷。NMI 中斷在 ESP8266 對應 LEVEL3 的中斷,其他中斷對應 LEVEL1 的中斷,NMI 中斷可以打斷任意比其優先級低的中斷。

         

      2. 關于 SDK HW_TIMER 的注意事項

      SDK 中 hw_timer 的分頻系數為 16,每個 tick 的時長為 0.2 μs。hw_timer_arm 函數配置的系數單位為 μs,最大值為 1677000 μs。

      如何優化 ESP8266 應用的內存使用?

      通過以下四種方法可以優化 ESP8266 應用的內存使用,減少應用的內存占用空間。

         

      1. 將字符串放到 Flash 中:

      (1) 有些字符串可以放在 Flash 中,特別是長字符串,例如 HTML 請求和響應模板。

      比如,一個字符串原來是用 define 定義的:

      #define test_string    "hello world”

      現在可以定義成如下:

      static const char test_string[] ICACHE_RODATA_ATTR = "hello world";

          

      (2) 當用 ICACHE_RODATA_ATTR 定義字符串常量時,需要對數據內容進行四字節對齊讀取。由于 Flash 中的數據需要四字節對其讀取,所以定義一個宏獲取對齊后的字符串長度:

      #define GET_ALIGN_STRING_LEN(str)    ((strlen(str) + 3) & ~3)

      使用字符串時,動態分配一個新的數組對象,讀寫 Flash 中的數據。然后用 os_memcpy API 來復制數據內容:

      unsigned int str_len = GET_ALIGN_STRING_LEN(test_string);

      char *tmp_string = (char *)os_malloc(str_len);

      os_memcpy(tmp_string, test_string, str_len);

          

      (3) 在用戶的應用代碼里使用 tmp_string 進行操作,而不使用 test_string。此方法除了減少應用的 RAM 占用空間,也能解決由于對 Flash 中的數據進行非對齊讀取時,在應用中引起的 exception。

      …….

         

      (4) 當用戶代碼中,無需再使用通過以上方法讀取的數據,需要釋放之前分配的內存空間

      os_free(tmp_string);

      注意:如果不釋放之前分配的內存空間,重復分配內存將會減少核心功能所需的內存,導致 API 出現功能異?;蚴?。

         

      2. 把 const 數據放到 Flash:

      (1) uint32 類型的數組可以直接放到 Flash,比如:

      const uint32 array[4] ICACHE_RODATA_ATTR = {0x11111111, 0x22222222, 0x33333333, 0x44444444};

      可以直接使用 array[0]。

          

      (2) 對于 uint8 和 uint16 類型的數組,要注意讀取數據的時候要四字節對齊,

      比如:

      const uint8 array[7] ICACHE_RODATA_ATTR = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};

         

      (3) 如果需要按字節讀取 char 數組當中的元素,可從軟件上進行處理,先按四字節讀取,然后再按偏移取當中的一個字節。如果直接讀取 array[0],會導致 crash。

         

      (4) 對于數據結構,通常做法是分配比用戶需要讀取的結構更大的內存,從 Flash 四字節讀取數據到內存。如同方法 1,在代碼中依然使用對象指針。修改代碼操作內存中的數據結構,而不是讀取數組。

          

      3. 將調試字符串放到 Flash 中:

      現在默認的 printf 打印的字符串都還是放在 RAM 區,占用部分內存。如果用戶無需頻繁打印日志文件,或者調試字符串太長,可以使用優化的 os_printf 把打印的字符串放到 Flash 而不是 RAM 中。

         

      4. 避免使用全局數組變量:

      全局數組變量會在應用的整個生存期中占用不必要的內存。為減少全局數組變量的使用,樂鑫提供了動態內存分配 API。在基于事件的編程中,請使用 os_malloc 和 os_free 來動態分配所需的內存空間。但注意,我們不建議過于頻繁地分配和釋放大小不等的內存空間。

      如何讓 ESP8266 上電后快速連接 AP?

      ESP8266 與某個 AP 連接后,會將該 AP 的信道信息存儲在 RTC memory 中。

        

        • 當軟件復位 ESP8266,或 ESP8266 從 Deep-sleep 模式中喚醒之后,ESP8266 會從 RTC memory 中讀取 AP 的信道信息,并嘗試連接該信道中的 AP。
        • 但如果上電啟動或硬件復位 ESP8266,RTC memory 會被清空。因此,ESP8266 會掃描所有的信道,這會占用一些時間。

         

      用戶上電啟動或硬件復位 ESP8266 時,可通過以下方式存儲 AP 的信道信息,以避免 ESP8266 重新掃描所有信道尋找上次連接的 AP。這將有助于減少 ESP8266 啟動后的連接時間。   

        1. 在 ESP8266 與 AP 連接后,調用函數 wifi_get_channel 來讀取當前 AP 的信道信息,然后將該信息存儲到 SPI Flash 中。在寫入 AP 的信道信息之前,請確保該信道信息有效。
        2. ESP8266 上電或硬件復位時,用戶固件將從 Flash 中讀取之前存儲的信道信息。通過調用函數 WRITE_PERI_REG(0x600011f4, 1 << 16 | channel) 將該 AP 的信道信息寫入 RTC memory 中。之后便可以從 RTC memory 獲取信道信息,加快 ESP8266 與 AP 的連接。
        3. 使能自動連接功能后,ESP8266 會從 RTC memory 中讀取 AP 的信道信息,并嘗試連接該信道中的 AP。

         

      只有信道信息會被存儲在 RTC memory 中。當調用函數 wifi_station_set_config 時,配置的其它信息(比如 SSID 和密碼)已存儲在 Flash 中。

          

      注意:如果應用要求 ESP8266 頻繁上電或硬件復位,建議客戶使用片外 RTC memory 來備份信道信息。由于 Flash 內存的寫入周期有限,不建議對 Flash 內存頻繁地寫入。

      為什么 ESP8266 進入啟動模式 (2, 7) 并觸發看門狗復位?

      請確保 ESP8266 啟動時,strapping 管腳處于所需的電平。如果外部連接的外設使 strapping 管腳進入到錯誤的電平,ESP8266 可能進入錯誤的操作模式。在無有效程序的情況下,看門狗計時器將復位芯片。

            

      因此在設計實踐中,建議僅將 strapping 管腳用于連接高阻態外部輸入器件,這樣便不會在上電時強制 strapping 管腳為高/低電平。

      ESP8266 上電時打印的 boot 模式信息代表什么?如何改變 boot 模式?

      ESP8266 上電時會判斷 boot strapping 管腳的狀態,并決定 boot 模式。例如,ESP8266 上電時打印的 boot 模式信息如下:

          

      ets Jan 8 2013,rst cause:1, boot mode:(3,2)

          

      其中打印的 boot mode 的第一位數字(3)代表當前的 boot 模式。

         

      Boot 模式由 strapping 管腳的 3 位值 [GPIO15,GPIO0,GPIO2] 共同決定。如下表所示:

              

      Strapping 管腳的 3 位值 [GPIO15,GPIO0,GPIO2] Boot 模式
      7 / [1,1,1] SDIO HighSpeed V2 IO 
      6 / [1,1,0] SDIO LowSpeed V1 IO
      5 / [1,0,1] SDIO HighSpeed V1 IO
      4 / [1,0,0] SDIO LowSpeed V2 IO
      3 / [0,1,1] Flash Boot
      2 / [0,1,0] Jump Boot
      1 / [0,0,1] UART Boot
      0 / [0,0,0] Remapping

      工具

      測試和生產時如何燒錄 Flash?

      測試時,通過 UART 轉 USB 芯片,使用樂鑫提供的 Flash 下載工具進行燒錄,具體方法參見文檔《ESP8266 SDK 入門指南》。

         

      下載工具:http://espressif.com/zh-hans/support/download/other-tools

      下載方法:http://espressif.com/zh-hans/support/download/documents

          

      生產時,使用 UART 接口燒錄 Flash 不方便,使用廠商提供的下載工具可以加快這一過程。用戶可以使用樂鑫的 Flash 下載工具把 BIN 文件合成一個完整的固件,通過 Flash 廠商提供的下載器,下載到 Flash 里面,再貼片到模組或產品上。

          

      注:Flash mode,Flash speed,Flash size 選項要在 combine 前選好,再執行 combine 鍵,即可得到 target.bin。

      Wi-Fi

      設備開啟 SoftAP + Station 模式下,連接的路由是 192.168.4.X 網段時,為什么會失???

      ESP8266 SoftAP 默認 IP 地址是 192.168.4.1。

      ESP8266 如果要連接 192.168.4.X 的路由時,不能分辨是要連接自己本身的 SoftAp 還是外部路由,所以會造成錯誤。

      路由配置是正確的,但是發生找不到路由,連接失敗,為什么?

      如果 SSID 和密碼配置是正確的,可能的原因有 2 個。

      1. 推薦使用英文字符,不要使用中文。
      2. 需要注意 bssid_set 的設置,如果不需要指定路由的 MAC 地址,那么需配置 stationConf.bssid_set = 0。
      ESP8266 SoftAP + Station 模式下網絡斷開或丟包的情況?

      雖然 ESP8266 支持 SoftAP + Station 共存模式,但是 ESP8266 實際只有一個硬件信道。因此在 SoftAP + Station 模式時,ESP8266 SoftAP 會動態調整信道值與 ESP8266 Station 一致。這個限制會導致 ESP8266 SoftAP + Station 模式時一些行為上的不便,用戶請注意。例如:

         

      情況一

      1. 如果 ESP8266 Station 連接到一個路由 (假設路由信道號為 6);
      2. 通過接口 wifi_softap_set_config 設置 ESP8266 SoftAP;
      3. 若設置值合法有效,該 API 將返回 true ,但信道號仍然會自動調節成與 ESP8266 Station 接口一致,在這個例子里也就是信道號為 6。

         

      情況二

      1. 調用接口 wifi_softap_set_config 設置 ESP8266 SoftAP (例如信道號為 5);
      2. 其他 Station 連接到 ESP8266 SoftAP;
      3. 將 ESP8266 Station 連接到路由( 假設路由信道號為 6) ;
      4. ESP8266 SoftAP 將自動調整信道號與 ESP8266 Station 一致(信道 6);
      5. 由于信道改變,之前連接到 ESP8266 SoftAP 的 Station 的 Wi-Fi 連接斷開。

           

      情況三

      1. 其他 Station 與 ESP8266 SoftAP 建立連接;
      2. 如果 ESP8266 Station 一直嘗試掃描或連接某路由,可能導致 ESP8266 SoftAP 端的連接斷開,或者 UDP 丟包,ping 丟包等情況。 

         

      因為 ESP8266 Station 會遍歷各個信道查找目標路由,意味著 ESP8266 其實在不停切換信道,ESP8266 SoftAP 的信道也因此在不停更改。這可能導致 ESP8266 SoftAP 端的原有連接斷開,或者 UDP 丟包,ping 丟包等情況。

          

      這種情況,用戶可以通過設置定時器,超時后調用 wifi_station_disconnect 停止 ESP8266 Station 不斷連接路由的嘗試;或者在初始配置時,調用 wifi_station_set_reconnect_policy wifi_station_set_auto_connect 禁止 ESP8266 Station 嘗試重連路由。

      Wi-Fi 信道是什么?可以自行選擇信道嗎?

      信道指的是 Wi-Fi 使用的指定頻段中特定頻率的波段。不同國家地區使用的信道數目是不同的。您可以參考《ESP8266 Wi-Fi 信道選擇指南》。

      如何配置 ESP8266,以便連接到無線路由器?

      有關配置連接無線路由器,一般有以下幾種方式:

      1. SmartConfig 一鍵配置方式,設備在 sniffer 模式掃描特征包的方式。
      2. 設備開啟 SoftAP,手機連接 SoftAP 后建立穩定的 TCP/UDP 連接后,發送 SSID 和密碼。
      3. WPS 配置方式,此方式需要設備中增加按鍵;或連接到設備的 SoftAP 后使用手機軟件控制開啟 WPS。
      調用 wifi_softap_set_config() 時,函數返回成功,但為何無法修改 ESP8266 的 SoftAP SSID 和密碼?

      使用函數 wifi_softap_set_config() 時,如果 API 從回調函數內部調用,ESP8266 SoftAP 的配置有時候會修改失敗。例如,當應用程序試圖在 SoftAP 事件的回調函數內,從 SoftAP 模式切換到 Station 模式時,可能出現這種情況。

            

      為確保 wifi_softap_set_config() 所做的修改立即生效,請使用 system_os_task() API 創建一個更改 SoftAP 設置的任務。在調用任何 SoftAP API 之前,請確保 ESP8266 已成功切換到 SoftAP 模式。例如:

           

      LOCAL void ICACHE_FLASH_ATTR?

      some_callback_function (void)

      ?{? 

      unsigned char res;?  

      os_event_t *testQueue;??  

         

      res = wifi_set_opmode_current (0x02);  // 確保 ESP8266 處于 SoftAP 模式。?  

      os_printf ("\r\nSet op mode returned: %d", res);??  

         

      testQueue = (os_event_t *)os_malloc(sizeof(os_event_t)*4);?  

      system_os_task (set_ap_config, USER_TASK_PRIO_1, testQueue, 4);??

         

      ap_server_setup (AP_PORT);                     // 繼續設置服務器等。

      ?}

      void set_ap_config (os_event_t *e)

      ?{?   

      struct softap_config ap;??  

         

      wifi_softap_get_config(&ap);                  // 先獲得之前的設置。 

          

      os_memset(ap.ssid, 0, 32);?   

      os_memset(ap.password, 0, 64);?   

             

      os_memcpy(ap.ssid, "SSIDhere", 8);?   

      os_memcpy(ap.password, "PASSWDhere", 10);?   ?  

           

      ap.authmode = AUTH_WPA2_PSK;?   

      ap.ssid_len = 0;                              // 或者 SSID 的實際長度。  

      ap.max_connection = 1;                        // 允許接入 Station 的最大數量。 

      wifi_softap_set_config (&ap);                 // 更新 ESP8266 SoftAP 設置。

      }

       

      AT

      找到 2 個結果
      • 收起全部
      • 展開全部
      標題 Body 平臺 版本 發布日期升序排列 下載
      ESP8266 IDF AT Bin (Latest)
      Bin V2.1 2020年07月29日
      ESP8266 Qcloud IoT AT

      基于 ESP8266 的騰訊云 IoT AT 指令集。

      Bin Latest 2019年08月19日
      欧美国产国产综合视频,无码中文有码中文人妻中文,国产野外无码理论片在线观看,亚洲 自拍 偷拍 综合图区