大綱:
- ESP8266基本介紹
- ESP8266模組
- NodeMCU、韌體燒錄工具esptool、整合式開發環境ESPlorer、圖形介面的燒錄工具nodemcu-flasher與nodemcu-pyflasher
- Arduino SDK
- MicroPython
- CircuitPython
ESP8266基本介紹
ESP8266,乐鑫信息科技公司(Espressif Systems)推出的WiFi晶片,價格超低,受到國外人士關注,並且把資料文件從中文翻成英文;後來釋出開發工具SDK,開始湧出各種韌體。社群網站在此,資訊豐富。
基本規格如下,詳情可看維基百科ESP8266:
- CPU,32-bit RISC, Tensilica Xtensa L106,運作頻率80 MHz。
- 64 KB指令RAM,96 KB資料RAM。
- 外部Flash:0.5 MB到4 MB(最高可達16 MB)。
- WiFi:2.4 GHz ,IEEE 802.11 b/g/n、WEP or WPA/WPA2,可做為站台、AP存取點、或雙模。
- 網路協定:TCP/IP、DNS。
- 16個GPIO腳位,其他還有SPI、I2C、I2S、UART、10-bit ADC。
- 工作電壓:3.3 V。
- 功耗:待機小於200uA,正常狀態12mA(平均)到200mA(峰值),持續傳送狀態70mA(平均)到200mA (峰值)。
- 傳送速率:110到921600 bps。
通常會買模組而非單獨的晶片,知名模組廠商有安信可科技(Ai-Thinker、Anxinke),產品型號ESP-01、ESP-02 ... ESP-14等等,差異在於加裝的Flash大小、是否通過FCC與CE檢驗、天線類型、拉出來的腳位數量等,可到維基百科ESP8266查詢。注意,下圖中的模組尺寸比例,沒有依照實際大小。
NodeMCU、韌體燒錄工具esptool、整合式開發環境ESPlorer、圖形介面的燒錄工具nodemcu-flasher與nodemcu-pyflasher
此模組預設燒錄的韌體是NodeMCU(文件在此,有API與韌體的建置和燒錄),版本0.9.5(build 20150318、Lua 5.1.4),可使用PuTTY(Win)、CoolTerm(Mac)、screen(Linux)、或其他終端機軟體連線,速率是9600,關掉任何硬體交握或流量控制,行結尾應設為CRLF "\r\n" 。
我使用PuTTY連線,需按一下模組上的Reset重置鈕,看到底下畫面的提示字元,便可開始輸入Lua程式:
也可使用整合式開發環境ESPlorer(Java軟體),支援的韌體有NodeMCU、MicroPython、與AT指令。開啟後先到Settings-Select firmware選擇韌體為NodeMCU,選擇正確的序列埠與傳輸速率,按下Open連線,同樣地要按一下模組上的Reset重置鈕:
python esptool.py --port COM5 --baud 460800 write_flash --flash_size=detect -fm dio 0x00000 firmware.bin
--port指定序列埠號,--baud指定速率,write_flash代表要燒錄,0x00000代表燒錄起始位址,firmware.bin是想燒錄的韌體。--flash_size=detect代表自動偵測Flash的大小,-fm是燒錄模式,512 KB模組使用qio,4 MB以上模組使用dio,但-fm或可省略。詳情可參考esptool官網、NodeMCU的文件、Adafruit的文件。
如果發生奇怪的行為,可下參數erase_flash清除Flash,然後再燒錄,或可解決。原因可能是新舊版韌體有所差異而導致。
燒錄新版NodeMCU韌體後,再試著連線,雖然速率9600也可以,但改成115200會比較順。
如果想自己建置NodeMCU韌體,ESP8266核心的處理器,採用Tensilica公司的Xtensa LX106,所以需要該處理器的工具鍊。參考How to set up manually the GCC toolchain and SDK,原生建置環境,使用VirtualBox,安裝Ubuntu 12.04(15.04與16.10應該也可以),然後看Guts of the IoT: Building NodeMCU from Source for the ESP8266,下載esp-open-sdk,包含了Xtensa lx106架構的工具鍊、Espressif Systems釋出的ESP8266 IoT SDK(會被稱為vendor sdk)、以及其他程式庫,然後下載NodeMCU韌體的原始碼,進行建置。
Arduino SDK
社群有為ESP8266移植Arduino API,讓Arduino IDE支援ESP8266程式開發,安裝1.6.4以後的版本(官方建議1.6.8版),到選單-檔案-偏好設定-額外的開發板管理員網址,增加http://arduino.esp8266.com/stable/package_esp8266com_index.json,然後到選單-工具-開發板-開發板管理員,安裝「esp8266 by ESP8266 Community」。然後到選單-工具-開發板與序列埠,做好設定。
接著便可如平常撰寫Arduino草稿碼的方式,開始撰寫程式控制ESP8266。建置並燒錄的東西,就等同於韌體,也就是說會覆蓋掉之前的韌體。
MicroPython
到MicroPython官網下載供ESP8266用的韌體,例如esp8266-20170108-v1.8.7.bin,然後燒錄即可,序列埠連線速率是115200。MicroPython文件到此參閱,原始碼在GitHub。另可參考Adafruit的文件MicroPython Basics: How to Load MicroPython on a Board。
CircuitPython
CircuitPython是MicroPython的分支版本,主要加入Atmel SAMD21的支援,以及API的變動。到此下載供ESP8266用的韌體,例如供此模組用的adafruit-circuitpython-feather_huzzah-0.9.5.bin,然後燒錄即可,序列埠連線速率是115200。CircuitPython文件到此參閱,原始碼在GitHub,還有專屬的Gitter聊天室與論壇。
也可以自己建置,需要工具是ESP Open SDK,自己從頭搞的話太麻煩,參考這份文件,使用VirtualBox、Vagrant打造建置環境,然後便可建置CircuitPython(MicroPython也可以)。
注意,在0.9.0版以前,若是此模組Adafruit HUZZAH ESP8266 Breakout的話,序列埠連線會有問題,雖可出現Python提示符號(三個大於),但輸入沒反應。
若是0.9.1~0.9.4版,則無法正常連線。
其他: