事實上 ESP8266 本身就是一個 32 位元處理器 (512K/1M/4M Flash), 比起 Arduino 那 8 位元的 ATMEGA328P 處理器(32K Flash) 要強多了. 當 Arduino IDE 支援 ESP8266 開發板後, 就可以直接用 Arduino 語法 (C 語言系列) 開發 ESP8266 物聯網應用程式了, 以下測試是以 ESP8266 模組 Standalone 作為微控器, 與 Arduino 板子無關, 只是使用 Arduino IDE 作為開發工具, 使用 C 語言語法撰寫程式而已. 不過 Arduino IDE 預設並未含有 ESP8266 開發板函式庫與驅動程式, 必須在 "檔案/偏好設定" 的 "額外的開發板管理員位址" 欄位輸入下列網址 :
http://arduino.esp8266.com/stable/package_esp8266com_index.json
然後在 "工具/開發板/開發板管理員" 中, 搜尋 "ESP8266" 會看到 "esp8266 by ESP8266 Community" 這一項, 按底下的 "安裝" 鈕進行下載安裝 :
安裝完成後會顯示 "Installed" :
這時再切到 "工具/開發板" 就可以看到 "ESP8266 Modules" 選單了. 如果是使用 ESP-01/ESP-12 等模組應選 "Generic ESP8266 Module" :
事實上往下拉還支援很多 ESP8266 開發板, 我手上有的板子是 NodeMCU 與 WeMOS D1 Mini :
選取板子類型後再切到 "工具", 就可看到此板子的資訊, 例如 Flash 大小與 baud rate (預設 115200 bps) 等 (這裡我用的是 ESP-01 模組) :
這樣就可以開始撰寫 Arduino 程式上傳 ESP8266 了. 注意, 燒錄韌體時必須先將 GPIO 0 接地 , 燒錄完之後再拔掉. 如果沒有將 GPIO 0, 會出現如下的 "espcomm_sync failed" 與 "error: espcomm_upload_mem failed" 錯誤訊息 :
warning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_upload_mem failed
error: espcomm_upload_mem failed
參考 :
# warning: espcomm_sync failed error: espcomm_open failed
我這次是使用手邊之前玩 Arduino+ESP8266 時剩下的 ESP-01 512K Flash 模組進行測試, 我把它插在好用的 ESP-01 專用轉接板上, 配合一個小麵包板與 2 個 LED + 220 歐姆電阻, 複製雙 LED 交互閃爍實驗 :
我是從加工後的背板引出 ESP-01 模組的 GND, GPIO 0, GPIO 2 三支腳到麵包板上, GPIO 0 與 GPIO 2 分別驅動兩個 LED, 此兩個 LED 各串接 200 歐姆電阻後共接 ESP-01 的 GND.
關於 ESP-01 專用轉接板參考 :
# ESP-01 專用轉接板加工
我把上面這篇文章末尾的 MircoPython 程式改寫為 Arduino 程式如下 :
const int LED0=0; //GPIO 0
const int LED2=2; //GPIO 2
void setup() {
pinMode(LED0,OUTPUT);
pinMode(LED2,OUTPUT);
}
void loop() {
digitalWrite(LED0,HIGH);
digitalWrite(LED2,LOW);
delay(1000);
digitalWrite(LED0,LOW);
digitalWrite(LED2,HIGH);
delay(1000);
}
草稿碼使用了 222229 bytes (51%) 的程式儲存空間。上限為 434160 bytes。
全域變數使用了 31572 bytes (38%) 的動態記憶體,剩餘 50348 bytes 給區域變數。上限為 81920 bytes 。
Uploading 226384 bytes from C:\Users\cht\AppData\Local\Temp\arduino_build_695446/arduesp_1.ino.bin to flash at 0x00000000
................................................................................ [ 36% ]
................................................................................ [ 72% ]
.............................................................. [ 100% ]
天啊! 短短的程式編譯後竟然高達 222KB! 已經把 512K Flash (實際上只有 434KB 可用) 占掉一半了 (51%)! 反觀 Arduino Nano 才 30KB Flash, 同樣程式碼應該不到 10%. 韌體上傳完成後, 拔掉 GPIO 0 的接地線, 將 ESP8266 重開機即可看到兩個 LED 交互閃爍了.
參考 :
# Arduino/doc/esp8266wifi/ (ESP8266WiFi.h 函式庫文件)
# http://ruten-proteus.blogspot.tw/2015/09/esp8266-kits-support-arduino-ide.html
作者已經移除這則留言。
回覆刪除作者已經移除這則留言。
回覆刪除Tony您好~
回覆刪除我也是使用ESP01板子,在Arduino IDE環境設定上,均依文中介紹設定,但編譯卻一直無法成功,訊息如下,請問該朝何方下方向除錯呢?謝謝您。
未知的板子generic(平台esp8266,套件esp8266)
開發板 Generic ESP8266 Module 編譯錯誤。
如果確定 gpio0 有接地, 那就是板子的問題了. 我之前買過樣子完全一樣, 但編號是 ESP01S 的板子, 燒錄完全成功, 但就是不能用, 試過好幾次都不行就收起來了. 你的卻出現未知的板子, 應該是 IDE 看不懂這是啥板子. 有試過下載最新版 ide 嗎?
回覆刪除另外就是接線要再確認正確與否.
回覆刪除◆ IDE已升級至1.8.8版,仍然不行,後來安裝FireBeetle-ESP8266開發板函式庫與驅動程式,便順利燒錄成功,但始終還是不知其所然。
回覆刪除◆ 另外,請教~如何讓ESP8266『單機』執行AT COMMAND呢?例如要執行AT+CWJAP="SSID","PASSWORD",我嘗試著用Arduino的語法Serail.println("AT+CWJAP="SSID","PASSWORD"")燒錄至ESP8266裡,但未能執行動作...謝謝您。
若要 ESP8266 執行 AT 指令, 需燒錄 AT 的韌體, 或者自行實作 AT.
回覆刪除您好
回覆刪除我的是 USB to UART(FT232RL)再接R/Tx,上述的GPIO0有接GND,但是還是燒不了,
我是否是漏了什麼呢?
Rx 與 Tx 要對接, 即 Rx 接 Tx, Tx 接 Rx, 這沒問題吧? 另外 EXP8266 電源要夠力.
回覆刪除ㄛ 我放棄了
回覆刪除Rx/Tx我沒接錯,下AT指令會回應,
我用MP2104DJ轉3.3V,足夠600mA,用示波器看,沒看到電掉下來
我決定去買塊板子
請問是買Arduino uno R3這塊嗎?
3Q
UNO R3 是標準的 ARDUINO, 這塊 OK. 您打算改用 ARDUINO 嗎? 它是用 C 語言的.
回覆刪除Aduino或Python我都有下載來試看看,
回覆刪除Python的版本好多,環境也摸不太熟,
我看再不行,我就要去報名付錢上課了~
謝謝您的指導
我覺得網路資料相當多, 自己摸索學習收穫較多, 當然如果是工作需要急用, 上課可能較快, 但上完還是得自己動手摸才有用.
回覆刪除請問一下 我用d1 mini加指紋辨識 指紋的範例裡面有softwareserial(2,3); 我把它改成softwareserial(D1,D2) 並且有去下載NEWsoftwareserial 也有把它放在library裡面 但是都顯示溝通失敗..
回覆刪除應該要用 (2,3), 除非 D1, D2 事先有 define 為 2,3
回覆刪除您好!我用esp01s板,其中有2个脚IO0&IO2可用来控制2个继电器的,一直弄不成,可否有现成编好了的程序给我学习一下?多谢您!杨学生。
回覆刪除抱歉, 漏看您的貼文了, 不知解決否.
回覆刪除