星期三, 11月 04, 2015

ESP8266 ESP-201 X Arduino

網路上較少ESP-201當Arduino的中文文章, 所以每次要接線都要翻閱資料許久. 英文資源雖不少, 但每次重看都需要稍微消化一下才懂.
這張全pin引出, 且可安裝在麵包版的ESP-201(雖然需要小小改造一下), 是很適合拿來開發的板子. 我把開發ESP-201的基本設置筆記如下, 方便記性不太好的我可以翻閱.



ESP-201 header改造

ESP-201這張模組雖然拉出所有pin-out很方便, 但犯傻做錯了兩件事情:
  1. RX/TX的header方向讓ESP-201無法安裝在麵包板上
  2. 把pin的名字印在電路板的背面, 這樣裝上麵包板誰看的到
或許一開始設計就不打算讓大家裝在麵包板上.......
首先要解決第一個問題, 根據[2], 把RX/TX的header焊到另外一端即可, 或者你要更搞剛把兩個11-pin header焊到另外一邊, 這樣上述兩個問題就一次解決.......否則就照下圖的方式修改[2]:
before

after



ESP-201接線

但是ESP8266 Arduino官網卻沒提到如何燒錄/連結ESP-201的資訊, 這讓我有點頭痛.
另外ESP-201上面標示的pin-out也跟一般ESP8266不一樣, 必須了解一下對應關係....
幸好已經有心人整理出下面這些圖[1]:




ESP8266 Arduino官網提到Generic ESP8266的連接方法[3]:



但是這個方法需要USB-Serial可以拉出RTS, 以便控制ESP8266 Reset. 我手邊的USB-Serial都沒有拉出RTS, 像這種:



全部pin-out都有拉出的模組是比較適合搭配ESP-201的:


若你的USB-Serial也沒有RTS, 可以手工焊上鍍銀線把RTS拉出來, 但是沒地方可固定感覺不是很穩固, 只好作罷. 後來找到這張表:


模式
GPIO
1520
1SDIO1xx系統工作在 SDIO 模式, 可以用外部 MCU 驅動内部WIFI
2工作模式011系统從外部FLASH 啟動
3燒錄模式010系统自動進入升級狀態,等待Serial-port下達命令



照表操課, 如果要燒錄的話, 要這樣接[2]:
GPIO0和GPIO15有接地即可燒錄. GPIO2可能內部有上拉電阻(?), 所以沒接也ok.



但每次上電後只能燒錄一次, 若要再燒錄必須斷電, 或者讓 RST接地讓ESP-201Reset.
我是直接拉出RST到微動開關,微動開關接地, 再加一個上拉電阻10k確保不會沒事Reset, 這樣每次要重新燒錄前, 按一下微動開關就好了.




還有人將ESP8266所有pin-out整理成一張非常棒的表[4], 開發時接線很方便:



我試著將上述幾張表整合成一張, 方便查詢:


Arduino IDE環境設置

接好線後, 設置ArduinoIDE環境, 我是使用 Arduino core for ESP8266 WiFi chip 提供的core, Board Manager URLs 為:
 http://arduino.esp8266.com/stable/package_esp8266com_index.json


安裝好官方Arduino IDE後, 再設定Boards Manage即可使用. 細節請直接見 Arduino core for ESP8266 WiFi chip官網.


ESP-201燒錄

從node.info()讀出來的訊息[2]:
flash size(byte)flash mode (SPI mode)flash speed(Hz)
512040000000

但我後來發現, 每一片ESP-201的flash不一定一樣, 同樣從node.info()讀出來, 我手上的ESP-201 flash參數如下:
flash size(byte)flash mode (SPI mode)flash speed(Hz)
512220000000

其中flash mode的部分不太確定數字對應的意義, 若參照[5]的說明:spi mode(0=QIO, 1=QOUT, 2=DIO, 3=DOUT)

註: 後來發現node.info()讀出來的值, 跟當初燒錄韌體時的設定是連動的, 也就是說這裡的值是設定好的, 未必直接關連到板子上的flash.
若你是用NodeMCU的燒錄工具, node.info()的值則直接關連到下圖的設定值:


Arduino IDE燒錄時的設定應該如下:



Flash Frequency的地方, 預設只有40和80MHz, 額外的頻率需要自行設定, 在 AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\1.6.5-947-g39819f0  的目錄下(可能因為esp8266-arduino版本不同而目錄名稱略有不同), 編輯 boards.txt:




找到FlashFreq的欄位, 新增20/26.7兩種頻率即可.


[參考]

  1. ESP8266 ESP-201 module - first impressions
  2. ESP8266: ESP-201 breakout board review
  3. Generic ESP8266 modules
  4. ESP8266之GPIO功能、資源探索
  5. MOD-WIFI-ESP8266 Reflashing question

http://www.barissanli.com/electronics/nodemcu.php
http://www.areresearch.net/2015/05/flashing-running-esp-201-module.html

ESP8266 ESP-201 module - antenna troubleshooting


3 則留言:

匿名 提到...

請問可以提問嗎?
我如果使用下面這行程式碼,就會讓ESP-201 一直重新啟動()
pinMode(6, OUTPUT);
而 GPIO6 在你的對應表中是對應到 SPICLK ,請問有什麼特別的意思嗎?
是不是不能拿來當一般的GPIO使用只能有特定用途?

重啟的錯誤代碼是:4(watchdog reset)
https://github.com/esp8266/Arduino/blob/master/doc/boards.md#minimal-hardware-setup-for-bootloading-and-usage

skyforce 提到...

我猜測, 跟SPI相關的幾個pin可能無法使用, 像是SPI-CLK / SPIQ/SPID等等...
esp6288剛上電需要透過SPI跟 flash download firmware, 因此arduino佔掉這幾個pin可能造成init失敗.

不過init之後應該就不再需要去讀flash, 如果你在loop裡面pinMode GPIO6, 是否還會有一樣的問題呢?(抱歉手邊沒有esp8266, 無法幫你測試)

skyforce 提到...

另外, SPI-CLK指的是SPI傳輸協定中的CLK pin.
SPI 是mcu常用的高速傳輸介面, 細節可以看一下wiki:

https://zh.wikipedia.org/wiki/%E5%BA%8F%E5%88%97%E5%91%A8%E9%82%8A%E4%BB%8B%E9%9D%A2

esp6288的SPI是預設跟flash溝通的介面, esp6288的code是放在周邊的flash上, 而不像傳統avr的arduino, 是放在mcu本身的flash, 因此SPI初始就會被占用.

Mr.Color飛機模型用Color 與 水性AQUEOUS HobbyColor 對照表

          最近跟兒子一起研究長谷川的飛機模型, 其中說明書中採用的模型漆色號以Mr.Color硝基漆為主, 水性漆AQUEOUS 為輔. 很多Mr.Color有的顏色, AQUEOUS 都沒有, 前100的色號大致上都有對應到, 但Mr.Color 300號以後的都是特...