ESP-12F WIFI模塊開發(NonOS, RTOS, NodeMCU固件編譯)(原創)




  • 2020-08 新增RTOS固件編譯和NodeMCU固件編譯內容



一、概述

  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

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

  更多選型資料請查看 舊選型表 或咨詢我們 sales@aithinker.com



啟動信息解釋

​ 在 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固件,使用命令:

1)FOTA固件:

make COMPILE=gcc  BOOT=new  APP=1  SPI_SPEED=40  SPI_MODE=QIO  SPI_SIZE_MAP=6

2)NON-FOTA固件:

make COMPILE=gcc  BOOT=none  APP=0  SPI_SPEED=40  SPI_MODE=QIO  SPI_SIZE_MAP=6

build directory設置:

${workspace_loc:/ESP8266_NONOS_SDK}/at

注:
在編譯AT的NON-FOTA固件時,最后的鏈接可能會出錯,參考下文修改irom的大小即可。
https://blog.csdn.net/ydogg/article/details/72598777?locationNum=14&fps=1



編譯RTOS固件

獲取ESP8266 RTOS源碼

官方地址:https://github.com/espressif/ESP8266_RTOS_SDK

設置環境變量和交叉編譯工具

  1. 設置交叉編譯工具

RTOS SDK V3.0 使用 V5.2.0版本的交叉編譯工具。

RTOS SDK版本小於V3.0 使用 V4.8.5版本的交叉編譯工具。

ubuntu下設置交叉編譯工具的環境變量,這里就不介紹了。

  1. 設置IDF_PATH變量
export IDF_PATH=~/esp/ESP8266_RTOS_SDK

ESP8266_RTOS_SDK 目錄路徑根據自己情況填寫。

編譯一個hello項目

examples/get-started文件夾下,復制 hello_world文件夾到SDK根目錄。

進入剛復制到SDK根目錄下的hello_world 文件夾。

  1. 執行 make menuconfig,進入SDK配置,選擇Serial flasher config 選項,設置串口和flash大小等。

然后保存,退出。

  1. 執行 make all,開始編譯項目。

生成的鏡像文件在hello_world/build目錄下。

​ 圖為 成功編譯完成

  1. 執行make flash 燒寫項目的鏡像到ESP8266模塊。

  2. 執行make monitor打開串口監視,讀取RTOS固件輸出的信息。

也可以用其他串口工具。



編譯NodeMCU固件

獲取NodeMCU固件

官方地址:https://github.com/nodemcu/nodemcu-firmware/



環境變量設置

NodeMCU在編譯時,會自己下載交叉編譯工具,和其他相關文件。

注意: 在編譯NodeMCU時,關閉編譯RTOS或NONOS的交叉編譯工具環境配置。否則會出現編譯失敗。



編譯NodeMCU固件

進入NodeMCU的根目錄,執行make命令,第一次執行,會下載相關工具。

編譯完成如下圖:

生成的鏡像文件在bin/ 目錄下,如下圖:

使用安信可提供的ESP8266燒錄工具,設置好燒錄地址即可燒錄。



使用ESPlorer工具測試固件

工具下載地址:https://github.com/4refr0nt/ESPlorer

Windows下,雙擊ESPlorer.bat文件,即可打開。

左側欄可以輸入lua代碼,發送到ESP模塊執行。其他功能自行探索。

注:NodeMCU V3.0版本,有些API的使用方法做了改變,,具體參考官方文檔。

官方文檔地址:https://nodemcu.readthedocs.io/en/master/



NodeMCU讀取DHT11模塊的溫濕度

在lua編程中用到pin的編號是NodeMCU開發板的編號,比如下圖:

ESP8266引腳 NodeMCU引腳
GPIO16 D0
GPIO5 D1
...以此類推 ...

圖片的參考文檔: https://github.com/nodemcu/nodemcu-devkit-v1.0

讀取DHT11模塊的lua代碼 (適用於NodeMCU SDK V3.0版本):

-- connect to WiFi access point (DO NOT save config to flash)
print("Connecting WIFI...")
wifi.setmode(wifi.STATION)
station_cfg={}
station_cfg.ssid = "SSID"
station_cfg.pwd  = "SSID_Password"
station_cfg.save = false
wifi.sta.config(station_cfg)

wifi.sta.connect()

-- get dht11 Temperature and Humidity function.
function mydht11()
	pin = 7
	status, temp, humi, temp_dec, humi_dec = dht.read11(pin)
	if status == dht.OK then
		-- Integer firmware using this example
		print(string.format("DHT Temperature:%d.%03d;Humidity:%d.%03d\r\n",
			  math.floor(temp),
			  temp_dec,
			  math.floor(humi),
			  humi_dec
		))

		-- Float firmware using this example
		print("DHT Temperature:"..temp..";".."Humidity:"..humi)

	elseif status == dht.ERROR_CHECKSUM then
		print( "DHT Checksum error." )
	elseif status == dht.ERROR_TIMEOUT then
		print( "DHT timed out." )
	end
end



local mytimer = tmr.create()
mytimer:alarm(1000, tmr.ALARM_AUTO, function() 
	if wifi.sta.getip() == nil then 
		print("IP unavaiable, Waiting...") 
	else
		mytimer:stop()
		print("Config done, IP is "..wifi.sta.getip())
		mydht11()
	end 
end)



參考文檔

  • 官方文檔: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



NonOS_AT_V1.7.4.0_4MB Flash的可用固件

最后附上(內含燒錄配置圖,ESP-12F Flash為32Mbit的固件):

  1. 合成的單文件bin固件:https://files.cnblogs.com/files/wybliw/NonOS_AT_V1.7.4.0_4MB_single.zip
  2. 未合成的多文件bin固件:https://files.cnblogs.com/files/wybliw/NonOS_AT_V1.7.4.0_4MB_multi.zip



NodeMCU_integer_V3.0.0-master 4MB Flash的可用固件

(內含燒錄配置圖)

  1. 合成的單文件bin固件:https://files.cnblogs.com/files/wybliw/NodeMCU_integer_V3.0.0-master_20200610-DIO.bin.zip

== end ==


免責聲明!

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



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