1. 程式人生 > 實用技巧 >ESP-12F WIFI模組開發

ESP-12F WIFI模組開發

一、概述

  ESP8266/ESP8285 系列模組是深圳市安信可科技有限公司開發的一系列基於樂鑫ESP8266EX/ESP8285的低功耗UART-WiFi晶片模組,可以方便地進行二次開發,接入雲端服務,實現手機3/4G全球隨時隨地的控制,加速產品原型設計。

  模組核心處理器 ESP8266/ESP8285 在較小尺寸封裝中集成了業界領先的 Tensilica L106 超低功耗 32 位微型 MCU,帶有 16 位精簡模式,主頻支援 80 MHz 和 160 MHz,支援 RTOS,整合 Wi-Fi MAC/ BB/RF/PA/LNA,板載天線。支援標準的 IEEE802.11 b/g/n 協議,完整的 TCP/IP 協議棧。使用者可以使用該模組為現有的裝置新增聯網功能,也可以構建獨立的網路控制器。

  ESP8266/ESP8285 是高效能無線 SoC,以最低成本提供最大實用性,為 Wi-Fi 功能嵌入其他系統提供無限可能。

  特點

  • 802.11 b/g/n
  • 內建Tensilica L106 超低功耗 32 位微型 MCU,主頻支援 80 MHz 和160 MHz,支援 RTOS
  • 內建10 bit高精度ADC
  • 內建TCP/IP協議棧
  • 內建TR 開關、balun、LNA、功率放大器和匹配網路
  • 內建PLL、穩壓器和電源管理元件,802.11b 模式下+18 dBm的輸出功率
  • A-MPDU 、 A-MSDU 的聚合和 0.4 s的保護間隔
  • Wi-Fi @ 2.4 GHz,支援 WPA/WPA2 安全模式
  • 支援AT本地升級及雲端OTA升級
  • 支援 STA/AP/STA+AP 工作模式
  • 支援 Smart Config 功能(包括 Android 和 iOS 裝置)
  • HSPI 、UART、I2C、I2S、IR Remote Control、PWM、GPIO
  • 深度睡眠保持電流為 20 uA,關斷電流小於 5 uA
  • 2 ms 之內喚醒、連線並傳遞資料包
  • 待機狀態消耗功率小於1.0 mW (DTIM3)
  • 工作溫度範圍:詳情請見具體型號規格書

二、安信可在售選型表

型號 ESP-01E ESP-01S ESP-01M ESP-07S ESP-12L ESP-12F ESP-12
封裝 DIP-18 DIP-8 DIP-18 SMD-16 SMD-16 SMD-22 SMD-16
尺寸(mm) 18x17x2.8 24.7x14.4x11.0 18x18x2.8 17.0x16.0x3.0 24.0x16.0x3.0 24.0x16.0x3.0 24.0x16.0x3.0
板層 4 2 4 4 2 4 4
Flash 8Mbit/16Mbit 8Mbit 8Mbit/16Mbit 32Mbit 32Mbit 32Mbit 32Mbit
已認證 FCC、CE - FCC、CE、SRRC、REACH、RoHS FCC、CE、REACH、RoHS、SRRC SRRC、FCC、CE、RoHS FCC、CE、IC、SRRC、KCC、NCC、TELEC、ANATEL、REACH、RoHS FCC、SRRC、CE、RoHS
天線 IPEX天線 PCB天線 PCB天線 IPEX天線 PCB天線 PCB天線 PCB天線
指示燈 - GPIO2 - - GPIO2 GPIO2 GPIO2
可用IO 11 2 11 9 9 9 9

  全系列模組購買請戳:安信可官方淘寶店

  更多選型資料請檢視 舊選型表 或諮詢我們 [email protected]

啟動資訊解釋

​ 在 ESP8266 啟動時, ROM CODE 會讀取 GPIO 狀態和 rst cause 狀態, 進而決定 ESP8266 工作模式。通過了解和掌握 rst causeboot mode, 有助於定位某些系統問題。

  • ROM CODE 波特率為 74880

ESP8266 啟動時 rst cause 值的含義

ESP8266 啟動時會有如下列印:

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

其中 rst cause 說明如下:

列舉定義 意義
0 NO_MEAN 無意義
1 VBAT_REST 上電覆位(電源重啟)
2 EXT_SYS_RESET 外部復位 (deep-sleep 醒來)
3 SW_RESET 軟體復位
4 WDT_RESET 硬體看門狗復位
5 DEEPSLEEP_TIMER_RESET -
6 DEEPSLEEP_POWER_ON_RESET -

Notes:

  • 軟體 WDT 重啟或者軟體復位都會維持上次重啟狀態。比如第一次是電源重啟, rst cause 為 1, 軟體復位後 rst cause 仍然為 1 。

ESP8266 上電 boot mode 值得含義

ESP8266上電時會判斷 boot strapping 管腳的狀態, 並決定 boot mode

例如上電列印:

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

其中 boot mode 說明如下:

  • 第一個值 代表當前 boot 模式
  • 第二個值 代表 SDIO/UART 判斷

boot modestrapping 管腳的 3 位值 [GPIO15, GPIO0, GPIO2] 共同決定。如下表所示:

boot mode Strapping 管腳的 3 位值
[GPIO15, GPIO0, GPIO2]
SDIO/UART 判斷 意義
0 [0, 0, 0] - remap boot
1 [0, 0, 1] - UART boot
2 [0, 1, 0] - jump boot
3 [0, 1, 1] - fast flash boot
4 [1, 0, 0] 2 SDIO lowspeed V1 UART boot
5 [1, 0, 1] 2 SDIO lowspeed v2 uart boot
6 [1, 1, 0] 2 SDIO highspeed v1 uart boot
7 [1, 1, 1] 2 SDIO highspeed v2 uart boot
4 - 7 [1,0,0], [1,0,1], [1,1,0], [1,1,1] 非 2 SDIO boot
  • boot mode 4~7 為 SDIO 的不同的協議標準, 包括低速 (lowspeed) 和高速 (highspeed), 版本號(V1, V2)等, 但並非所有 MCU 都會同時支援這些標準。

參考文件

啟動模式設定

模式 CH_PD (EN) RST GPIO15 GPIO0 GPIO2 TXD0
下載模式
執行模式
測試模式 - - -

注意: 如果要進入下載模式,參考下面的接線圖,在該接線的基礎上將 GPIO0 接地即可。參考官方燒錄章節,進行燒錄。

電路連線圖

下圖參考官方文件:ESP8266系列入門教程。圖中電阻均為10K。

注:

  • RST引腳可不用上拉,內部已經上拉處理。

  • TXD在上電期間應避免被外部下拉到低電平,否則模組不能啟動。

韌體燒錄

注意:這裡只介紹 ESP-12F 產品的韌體燒錄,是32Mbit的Flash。

注意:這裡只介紹 ESP-12F 產品的韌體燒錄,是32Mbit的Flash。

其他產品請自行參考其資料做相應修改。

獲取官方韌體

其中

  • 樂鑫官網提供的韌體:NonOS V1.7.0 - V1.7.4 版本都是按照16Mbit硬體配置編譯的,燒錄到ESP-12F需要按16Mbit模式的配置來下載。

    • V1.6.2韌體可用於32Mbit的 ESP-12F 上。
  • 安信可韌體:博安通 AT 韌體 是基於NonOS V1.7.0的AT韌體,內含8Mbit和32Mbit兩個版本,

    • 其燒錄程式設定:
    • SPI Speed:40MHz,
    • SPI mode: DOUT,
    • Flash Size:32Mbit-C1

韌體檔案說明

不支援雲端升級 (NoBoot 模式)

檔名 32Mbit 地址分配 說明
eagle.flash.bin 0x00000 主程式,由程式碼編譯生成
eagle.irom0text.bin 0x10000 主程式,由程式碼編譯生成
blank.bin 0x3FB000 用於清空 RF_CAL引數區,由樂鑫在SDK中提供
esp_init_data_default_v08.bin 0x3FC000 配置檔案,由樂鑫在SDK中提供
blank.bin 0x3FE000 用於清空 系統引數區,由樂鑫在SDK中提供

注:eagle.irom0text.bin的上限值參考《ESP8266_SDK入門指南 esp8266-sdk_getting_started_guide_cn.pdf》文件的 4.1節 進行修改,其他快閃記憶體容量參考 4.1節 進行設定。

支援雲端升級 (Boot 模式)

檔名 32Mbit 地址分配
(1024+1024)
說明
boot.bin (boot_v1.x.bin) 0x00000 由樂鑫在SDK中提供,建議使用最新版本
user1.bin (user1.4096.new.6.bin) 0x01000 主程式,由程式碼編譯生成
user2.bin (user2.4096.new.6.bin) 0x101000 主程式,由程式碼編譯生成
blank.bin 0x3FB000 用於清空 RF_CAL引數區,由樂鑫在SDK中提供
esp_init_data_default_v08.bin 0x3FC000 配置檔案,由樂鑫在SDK中提供
blank.bin 0x3FE000 用於清空 系統引數區,由樂鑫在SDK中提供

注:地址分配 參考《ESP8266_SDK入門指南 esp8266-sdk_getting_started_guide_cn.pdf》文件的 4.2節 進行修改,其他快閃記憶體容量參考 4.2節 進行設定。

說明:樂鑫官方提供的V1.7.x韌體,user1.bin 是 user1.2048.new.5.bin 這是按照16Mbit的配置編譯的。

注意:支援雲端升級的 FOTA韌體,在 flash 佈局會分為兩個區,一個用來執行程式,另一個用來儲存要升級的韌體。當程式執行在 user1 時開始升級,程式會下載到 user2 區域,下載完畢後,下次啟動執行 user2 的程式,依次替換,實現雲端升級。

  • User1.Bin 檔案和 User2bin 檔案在燒錄時 只燒錄其中一個即可。
  • Boot.bin 檔案建議使用最新版本。

韌體Flash佈局圖

分割槽說明:

  • Boot資訊: 位於FOTA韌體的分割槽1,存放Boot檔案, 即FOTA升級相關資訊。

  • 系統程式: 用於存放執行系統必要的韌體。

  • 使用者資料: 當有多餘的Flash空間用於使用者資料區時,空閒區域均可用於存放使用者資料。使用者可在其中任意空閒位置設定使用者引數區,建議⾄至少為使用者引數區預留12KB空間。

  • RF_CAL引數:用於系統自動儲存校準後的 RF 引數。

  • 預設RF引數:將 esp_int_data_default.bin 下載至該區,用於儲存預設的引數資訊。

  • 系統引數:用於儲存系統引數資訊。

  • User.bin 其中user1.bin和user2.bin是同一個應用程式,選擇不同的編譯步驟分別生成的兩個韌體,存放在 SPI Flash 不同位置,啟動時先執行 Boot,Boot 讀取系統引數區中的標誌位,判斷執行行 user1.bin 還是user2.bin,然後到 SPI Flash 的對應位置讀取執行。

注意:

  • Flash 中每扇區為 4KB。
  • ESP8266目前 系統程式區 最大支援 1024KB。

燒寫韌體程式

將ESP-12F模組的GPIO0引腳連線到GND,上電,模組進入下載模式。

串列埠提示資訊如下:

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

32Mflash燒寫配置表(FOTA韌體):

Bin檔案 燒錄地址 說明
boot.bin 0x00000 載入程式
user1.4096.new.6.bin 0x01000 使用者程式
blank.bin 0x3FB000 初始化 RF_CAL 引數區
esp_init_data_default_v08.bin 0x3FC000 初始化其他射頻引數區,至少燒錄一次
當 RF_CAL 引數區初始化燒錄時,本區域也會燒錄
blank.bin 0x3FE000 初始化系統引數區

注:

  • 一般燒錄,請使用工具 ESP Flash Download Tool

  • 建議按照燒錄地址從低到高,按順序排列燒錄。

  • 支援FOTA的韌體無需下載user2.bin,使用者可以從雲端伺服器升級韌體。

  • 詳細的FOTA功能說明,請參考文件《ESP8266 雲端升級指南》。

開啟燒錄軟體,設定好選項,點選START開始燒錄程式,如下圖:(user1.bin是我自己編譯的v1.7.4)

再次說明:樂鑫官方提供的V1.7.x韌體,user1.bin 是 user1.2048.new.5.bin,其中5表示 5 = 2048KB(1024KB+1024KB) (見韌體編譯-make引數說明),這是按照16Mbit的配置編譯的,所以燒錄時要選擇16Mbit-C1模式才能成功。

  • 要使用NonOS V1.7.0版本,可下載安信可提供的出廠韌體:博安通 AT 韌體

  • 使用V1.7.4版本韌體,需要自己編譯,編譯韌體方法見下文。

上電啟動

燒錄完成後,將GPIO0引腳懸空或上拉到VCC,上電啟動模組,串列埠資訊如下:

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

load 0x40100000, len 2592, room 16 
tail 0
chksum 0xf3
load 0x3ffe8000, len 764, room 8 
tail 4
chksum 0x92
load 0x3ffe82fc, len 676, room 4 
tail 0
chksum 0x22
csum 0x22

2nd boot version : 1.7(5d6f877)
SPI Speed : 40MHz
SPI Mode : QIO
SPI Flash Size & Map: 32Mbit(1024KB+1024KB)

...

SDK ver: 3.0.5-dev(52383f9) compiled @ Jul  8 2020 16:00:05
phy ver: 1156_0, pp ver: 10.2

表示燒錄成功。

官方韌體合併配置圖

  • 官方flash模式使用的DOUT模式。

  • 為什麼要合併?

    使用軟體上的 CombineBin 按鍵可以將檔案打包合併成一個完整的韌體。

    • ESP系列模組在燒錄韌體時是按照要燒錄的檔案地址燒錄對應檔案的大小到flash,其他部分的 flash 未改動,

      例如 user1.bin 檔案為 320K,從flash地址0x01000地址開始燒錄,燒錄320K位元組,如果第二次燒錄的時候,編譯生成的 user1.bin 只有 300k,那麼比對上一次燒錄的user1.bin檔案在flash中的儲存,後面的20K falsh是不會擦除的。
      這樣的燒錄方式在大批量生產中是不安全的,尤其是有部分客戶會在 flash 中新增自己的一些資料直接燒錄進去。
      將所有的韌體打包合併成一個完整的韌體,燒錄時會填充整個flash,對應地址沒有程式部分的flash會被0xFF填充。

    詳細見:官方文件《 ESP8266系列入門教程 esp8266_start_guide_1_v2.0.pdf 》第3.6節,韌體合併說明。

其他說明

esp_init_data_default.bin檔案版本說明

從1.6.2版本中,可以看到官方新增了 esp_init_data_default_v08.bin 檔案。從GitHub更新日誌看到如下解釋:

Adjusted the default target power, from the 34th byte to the 39th byte of esp_init_data_default.bin,  lower the target power of each level, optimized the frequency spectrum Mask and the EVM.

翻譯:調整預設目標電源,從esp_init_data_default.bin的第34個位元組到第39個位元組,降低各級目標功率,優化頻譜掩碼和EVM。

參考文件:

韌體編譯之NonOS韌體

搭建編譯環境

Windows下搭建

參考: 官方windows編譯環境搭建教程

下載 IDE V1.5版本,安裝好。

獲取 NONOS SDK

git地址:

git clone https://gitee.com/xuhongv/ESP8266_NONOS_SDK

注:根目錄下的driver_libthird_party這2個資料夾,可以不用刪除。

編譯工程

  • 先按照官方文件,匯入工程檔案。
  • 設定make引數,選擇Properties --> C/C++ Build --> Build command 中新增編譯規則,當前硬體是 32Mbit的模組,所以這樣填:( make COMPILE=gcc BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=DIO SPI_SIZE_MAP=6 );
  • example目錄下的IoT_Demo資料夾複製到SDK的根目錄,(編譯AT韌體就將at資料夾複製到SDK根目錄)
  • 設定要編譯的工程檔案路徑,在Properties --> C/C++ Build --> Build directory 選擇編譯的工程路徑,比如根目錄下的 IoT_Demo工程。
  • 右鍵工程,選擇 編譯工程 build Project,開始編譯。

注:按照官方文件,基本上是一鍵編譯成功。

ESP8266_NONOS_SDK 檔案目錄圖(包含複製的at和IoT_Demo資料夾):

make相關引數含義

make COMPILE=gcc  BOOT=none  APP=0  SPI_SPEED=40  SPI_MODE=DOUT  SPI_SIZE_MAP=5
  • COMPILE=gcc 指定編譯器,不用修改。

  • BOOT=none 指定boot版本,

    • none 無boot版本 (編譯 Non-FOTA 選擇此項)
    • old boot_v1.1
    • new boot_v1.2+ (編譯 FOTA 選擇此項)
  • APP=0 指定 系統程式bin的型別

    • 0 生成 eagle.flash.bin + eagle.irom0text.bin 檔案 (Non-FOTA韌體)
    • 1 生成 user1.bin (FOTA韌體)
    • 2 生成 user2.bin
  • SPI_SPEED=40 指定和Flash通訊的SPI速度(需要Flash支援)

    • 20 為 20MHz
    • 26.7 為 26.7MHz
    • 40 為 40MHz (預設40MHz)
    • 80 為 80MHz
  • SPI_MODE=DOUT 指定和Flash通訊的SPI模式(需要Flash支援)

    • QIO Flash採用Quad SPI模式,地址為 4線模式輸入,資料為 4線模式輸出
    • QOUT Flash採用Quad SPI模式,地址為 1線模式輸入,資料為 4線模式輸出
    • DIO Flash採用Dual SPI模式,地址為 2線模式輸入,資料為 2線模式輸出
    • DOUT Flash採用Dual SPI模式,地址為 1線模式輸入,資料為 2線模式輸出(官方韌體是DOUT模式,可選其他模式)

    注:ESP-12F模組支援的SPI模式:QIO,QOUT,DIO,DOUT,編譯韌體時設定的模式要和燒錄時設定的模式統一。

    參考: 如何給 ESP32 選擇外接 Flash 以及如何使能 QIO 模式

  • SPI_SIZE_MAP=5 指定spi_size和map對映

    • 0 = 512KB( 256KB+ 256KB)
    • 2 = 1024KB( 512KB+ 512KB)
    • 3 = 2048KB( 512KB+ 512KB)
    • 4 = 4096KB( 512KB+ 512KB)
    • 5 = 2048KB(1024KB+1024KB)
    • 6 = 4096KB(1024KB+1024KB) (32Mbit的Flash選擇此項)
    • 7 = 4096KB(2048KB+2048KB) not support ,just for compatible with nodeMCU board
    • 8 = 8192KB(1024KB+1024KB)
    • 9 = 16384KB(1024KB+1024KB)

Flash燒錄程式中對應的選項圖:

IoT_Demo和AT韌體編譯說明

  1. 編譯IoT_Demo韌體,使用命令:
make COMPILE=gcc  BOOT=none  APP=0  SPI_SPEED=40  SPI_MODE=QIO  SPI_SIZE_MAP=6

build directory設定:

${workspace_loc:/ESP8266_NONOS_SDK}/IoT_Demo
  1. 編譯AT韌體,使用命令:
make COMPILE=gcc  BOOT=new  APP=1  SPI_SPEED=40  SPI_MODE=QIO  SPI_SIZE_MAP=6

build directory設定:

${workspace_loc:/ESP8266_NONOS_SDK}/at

參考文件

  • 官方文件:ESP8266_SDK入門指南 esp8266-sdk_getting_started_guide_cn.pdf
  • 官方文件:ESP8266_iot_demo指南 esp8266_non-os_sdk_iot_demo_guide_cn.pdf
  • 官方文件:ESP-12F 規格書 esp-12f_product_specification_zh_v1.0.pdf
  • 官方文件:ESP8266系列入門教程 esp8266_start_guide_1_v2.0.pdf
  • 官方文件:ESP8266AT指令集 esp8266_at_instruction_set_cn.pdf
  • 官方文件:ESP8266AT指令使用示例 esp8266_at_command_examples_cn.pdf

以上文件都在安信可官網下載:https://docs.ai-thinker.com/esp8266/docs

== end ==