找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13875|回復: 5
收起左側

ESP8266 wifi模塊開發(fā)匯總

  [復制鏈接]
ID:409908 發(fā)表于 2018-10-15 17:27 | 顯示全部樓層 |閱讀模式
                      ESP8266 wifi模塊開發(fā)匯總本文檔主要介紹開發(fā)者在ESP8266開發(fā)中常見的一些問題。 這些問題主要包括以下幾大類:
  • 基本概念相關
  • ESP8266 相關
  • AiCloud 相關
  • 固件編譯調試相關
  • 文檔資料相關
以下是各分類的具體問題和解答。

基本概念相關
  • ESP8266是什么?
  ESP8266 是高性能無線 SOC,在較小尺寸封裝中集成了業(yè)界領先的 Tensilica L106 超低功耗 32 位微型 MCU,帶有 16 位精簡模式,主頻支持 80 MHz 和 160 MHz,支持 RTOS,集成 Wi-Fi MAC/ BB/RF/PA/LNA,板載天線。支持標準的 IEEE802.11 b/g/n 協(xié)議,完整的 TCP/IP 協(xié)議棧。
  • ESP01, ESP02是什么?
  ESP01~ESP14是由深圳安信可科技研發(fā)生產(chǎn)的ESP8266系列模組,在ESP8266芯片的基礎上,完善了外圍器件布局和優(yōu)化天線。
  • AiCloud是什么?
  AiCloud 是安信可提供給廣大客戶的免費服務器,數(shù)據(jù)全裸,UDP 傳輸,簡單穩(wěn)定,且含有諸多例程和 PC 端上位機調試工具。
  • 樂鑫與安信可的關系
  樂鑫是ESP8266的芯片廠商,安信可是依據(jù)ESP8266生產(chǎn)模組,并提供一系列開發(fā)方案的廠家。
  • ESP8266必須要借助服務器才能開發(fā)嗎?
  這個根據(jù)您的需求來定,若您只需要局域網(wǎng)就可以滿足產(chǎn)品需求,那么無需服務器,同樣可以使用ESP8266進行開發(fā)。
  • 如何購買ESP8266模組和測試板?
  安信可官方淘寶店鋪
  • 我該選擇哪個型號的ESP8266模組?
  模組硬件之間的差異主要是封裝區(qū)別,以及flash大小的區(qū)分,您可以查看ESP8266選型列表,若有疑問,可聯(lián)系我們的銷售人員。
  • 我該選擇AT開發(fā)還是SDK開發(fā)?
    SDK方法:
    優(yōu)勢:讓系統(tǒng)成本最少 體積最小
    劣勢:新手需要一個禮拜到半個月的時間去熟悉代碼的研讀
    AT方法:
    優(yōu)勢:只需要知道幾條AT指令即可用外部單片機實現(xiàn)網(wǎng)絡通訊!開發(fā)速度快。
    劣勢:增加了外置CPU成本
  您可以自已依此評估自己適合哪種方案
  • 我該選擇FreeRTOS還是NONOS?
  因為FreeRTOS是后面才開放的,所以一般常用的是NONOS
  若是您之前有開發(fā)過FreeRTOS,那么您可以直接使用FreeRTOS方案的SDK,且該方法有利于您之后使用ESP32系列
  • 開發(fā)中,遇到問題如何尋求幫助?
  若您是企業(yè)用戶,我們會專門委派一名工程師負責貴司的對接;
  若您是個人用戶,您可以在論壇發(fā)帖,或發(fā)郵件到support@aithinker.com,我們也會有專門的工程師去處理。

ESP8266 相關
* 為什么透傳會丟包?
因為沒有設置硬件流控。如果需要避免丟包,請設置硬件流控。透傳功能使用的是TCP協(xié)議,每包數(shù)據(jù)是1460(取決于協(xié)議棧),只要網(wǎng)絡良好,buffer空間沒有被消耗完,就可以不停地傳輸數(shù)據(jù)。對于透傳。串口接收的數(shù)據(jù)間隔超過20ms,就會認為 接受結束,將已經(jīng)接受的數(shù)據(jù)傳輸至網(wǎng)絡。如果網(wǎng)絡不好,就可能會丟失一些數(shù)據(jù),因此,為了避免這種情況,可以將串口設置為流控模式。
* ESP8266可以同時使用AP+STA嗎?
ESP8266沒有中繼和放大功能,即不可以同時使用AP+STA。
* ESP8266可以進行低功耗嗎?
ESP8266可以進行低功耗。AT指令進行低功耗說明:
設置睡眠模式,sleep只在單STA模式下生效,默認工作在modem-sleep模式。 AT+SLEEP=0   0為禁止休眠模式              1為light-sleep模式  功耗0.9mA              2為modem-sleep模式  功耗15mA
* 將建立的TCP Server 連接通過AT 指令保存到flash?
* 如何讓ESP8266上電后快速連接AP?

外設
*SDIO 是否支持 SD 卡?
  ESP8266 是 SDIO Slave ,不支持 SD 卡。
*ESP8266 有幾個 UART?
  ESP8266 有兩個 UART,其中 UARTO 有 TX、RX,可做數(shù)據(jù)傳輸;UART1 由于 RX 腳被 SPI-Flash 占用,只能使用 TX,可以做串口調試信息打印。
*GPIO 可以直接連 5V 嗎?
  不可以。GPIO 只能承受 3.6V。需要通過降壓電路,否則會造成 GPIO 損壞。

硬件
*ESP8266 電壓電流需求?
  ESP8266 的數(shù)字部分的電壓范圍是 1.8V ~ 3.3V,模擬部分的工作電壓是 3.0V ~ 3.6V,最低 2.7V。
模擬電源峰值 350 mA,數(shù)字電源峰值 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 和數(shù)字電路具有極高的集成度。上電后,RF 自校準會需要大電流。模擬部分電路最大的極限電路可能達到 500 mA;數(shù)字電路部分最大電流 達到 200 mA。一般的操作,平均電流在 100 mA 左右。因此,ESP8266 需要供電能達到 500 mA,能夠保證不會有瞬間壓降。
*可以使用鋰電池或者 2 節(jié) AA 紐扣電池直接給 ESP8266 供電嗎?
  2 節(jié) AA 紐扣電池可以給 ESP8266 供電。鋰電池放電時壓降比較大,不適合直接給 ESP8266 供電。ESP8266 的 RF 電路會受溫度及電壓浮動影響。不推薦不加任何校準的電源直接給 ESP8266 供電。推薦使用 DC-DC 或者 LDO 給 ESP8266 供電。
*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 自動動態(tài)加載到 iCache。
DRAM 空間為 96 KB: 對于 Non-OS_SDK,前 80 KB 用來存放 .data/.bss/.rodata/heap,heap 區(qū)的大小取決于 .data/.bss/.rodata 的大。贿有 16 KB 給 ROM code 使用。 對于 RTOS_SDK,96 KB 用來存放 .data/.bss/.rodata/heap,heap 區(qū)的大小取決于 .data/.bss/.rodata 的大小。

WiFi相關
*路由配置是正確的,但是發(fā)生找不到路由,連接失敗,為什么?
如果 SSID 和密碼配置是正確的,可能的原因有 2 個。
1.推薦使用英文字符,不要使用中文。
2.需要注意 bssid_set 的設置,如果不需要指定路由的 MAC 地址,那么需配置 stationConf.bssid_set = 0。
* ESP8266 SoftAP + Station 模式下網(wǎng)絡斷開或丟包的情況?
雖然 ESP8266 支持 SoftAP + Station 共存模式,但是 ESP8266 實際只有一個硬件信道。因此在 SoftAP + Station 模式時,ESP8266 SoftAP 會動態(tài)調整信道值與 ESP8266 Station 一致。這個限制會導致 ESP8266 SoftAP + Station 模式時一些行為上的不便,用戶請注意。例如:
情況一 如果 ESP8266 Station 連接到一個路由 (假設路由信道號為 6); 通過接口 wifi_softap_set_config 設置 ESP8266 SoftAP; 若設置值合法有效,該 API 將返回 true ,但信道號仍然會自動調節(jié)成與 ESP8266 Station 接口一致,在這個例子里也就是信道號為 6。
情況二 調用接口 wifi_softap_set_config 設置 ESP8266 SoftAP (例如信道號為 5); 其他 Station 連接到 ESP8266 SoftAP; 將 ESP8266 Station 連接到路由( 假設路由信道號為 6) ; ESP8266 SoftAP 將自動調整信道號與 ESP8266 Station 一致(信道 6); 由于信道改變,之前連接到 ESP8266 SoftAP 的 Station 的 Wi-Fi 連接斷開。
情況三 其他 Station 與 ESP8266 SoftAP 建立連接; 如果 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 使用的指定頻段中特定頻率的波段。不同國家地區(qū)使用的信道數(shù)目是不同的。您可以參考ESP8266 Wi-Fi 信道選擇指南。

應用
*為什么云端升級需要2個 “bin” 文件?“user1.bin” 和 “user2.bin” 有什么區(qū)別?
  user1.bin 和 user2.bin 是 2 個不同的 BIN 文件。生成 user1.bin 和 user2.bin 時,必須使用相同的 Flash 和 boot 設置,以保證 OTA 升級成功。2個 BIN 文件是互補的,運行 user1.bin 的時候,升級是下載 user2.bin;運行 user2.bin 的時候,升級是下載 user1.bin。這樣可以保證升級過程中,如果有掉線的情況發(fā)生,設備還是可以正常運行。

固件編譯調試相關
* 導入工程注意事項
  工程文件的導入的注意不要有空格和中文字符,例如:C:\Users\Administrator\Desktop\sdk\esp_iot_sdk_v1.3.0
* esp8266模組LED燈為什么上電閃一下就滅了?
  a,因為esp8266模組的LED接在GPIO2,而此IO與UART1_TX共用,此時模組上電會輸出一下打印信息,所以LED會閃直到打印信息輸出完畢,LED就滅了。
  b,若想查看啟動信息的內容,請選擇串口調試助手74880的波特率,硬件上把rst拉低再拉高,可以查看啟動信息。
  c,若想通過串口調試助手發(fā)送AT指令,請切換波特率到115200,即可。
* ESP8266啟動信息說明?
* 模組發(fā)送AT指令無響應?
a,請選擇74880的波特率,看下啟動日志,把RST復位引腳拉低再拉高,可使用安信可串口調試助手進行查看,aithinker_serial_tool_v1.2.3.7z
b,是否進入flash啟動模式,GPIO15下拉,GPIO0,GPIO2上拉?
c,是否燒錄了固件?燒錄配置flash size大小是否跟WiFi模組的flash一致?
* 如何屏蔽上電打?
U0TXD默認上電有系統(tǒng)打印,對此敏感應用可通過UART的內部引腳交換功能,在初始化的時候,調用system_uart_swap函數(shù)。將 U0TXD、U0RXD 分別于U0RTS(MTDO/GPIO15)、U0CTS (MTCK/GPIO13)交換來屏蔽該上電的系統(tǒng)打印。 交換后,硬件上的下載管腳還是使用U0TXD + U0RXD,通信時需要將MTDO對應接到MCU的RXD,MTCK對應加到MCU的TXD。
* 使用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();           }
* 上電為什么輸出亂碼?
上電輸出亂碼是正常的,因為外部晶振選擇是26M,請選擇74880的波特率,按下復位鍵或把RST引腳拉低再拉高,可以看到啟動信息?墒褂冒残趴纱谡{試助手進行查看,aithinker_serial_tool_v1.2.3.7z
* 為什么編譯sdk的時候會發(fā)生irom0_0_seg錯誤?


回復

使用道具 舉報

ID:100826 發(fā)表于 2019-3-19 10:57 | 顯示全部樓層
51有你更精彩  謝謝分享的經(jīng)驗資料
回復

使用道具 舉報

ID:521071 發(fā)表于 2019-4-25 09:17 來自手機 | 顯示全部樓層
樓主,怎么聯(lián)系你!謝謝
回復

使用道具 舉報

ID:625705 發(fā)表于 2019-10-21 11:01 | 顯示全部樓層
感謝分享,可以討論一下下
回復

使用道具 舉報

ID:629825 發(fā)表于 2019-10-25 09:15 | 顯示全部樓層
謝謝分享啊
回復

使用道具 舉報

ID:705998 發(fā)表于 2020-3-10 19:43 | 顯示全部樓層
相見恨晚
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表