這張全pin引出, 且可安裝在麵包版的ESP-201(雖然需要小小改造一下), 是很適合拿來開發的板子. 我把開發ESP-201的基本設置筆記如下, 方便記性不太好的我可以翻閱.
ESP-201 header改造
ESP-201這張模組雖然拉出所有pin-out很方便, 但犯傻做錯了兩件事情:
- RX/TX的header方向讓ESP-201無法安裝在麵包板上
- 把pin的名字印在電路板的背面, 這樣裝上麵包板誰看的到
或許一開始設計就不打算讓大家裝在麵包板上.......
首先要解決第一個問題, 根據[2], 把RX/TX的header焊到另外一端即可, 或者你要更搞剛把兩個11-pin header焊到另外一邊, 這樣上述兩個問題就一次解決.......否則就照下圖的方式修改[2]:
首先要解決第一個問題, 根據[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 | ||||
15 | 2 | 0 | |||
1 | SDIO | 1 | x | x | 系統工作在 SDIO 模式, 可以用外部 MCU 驅動内部WIFI |
2 | 工作模式 | 0 | 1 | 1 | 系统從外部FLASH 啟動 |
3 | 燒錄模式 | 0 | 1 | 0 | 系统自動進入升級狀態,等待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官網.
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) |
512 | 0 | 40000000 |
但我後來發現, 每一片ESP-201的flash不一定一樣, 同樣從node.info()讀出來, 我手上的ESP-201 flash參數如下:
flash size(byte) | flash mode (SPI mode) | flash speed(Hz) |
512 | 2 | 20000000 |
其中flash mode的部分不太確定數字對應的意義, 若參照[5]的說明:spi mode(0=QIO, 1=QOUT, 2=DIO, 3=DOUT)
若你是用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兩種頻率即可.
- ESP8266 ESP-201 module - first impressions
- ESP8266: ESP-201 breakout board review
- Generic ESP8266 modules
- ESP8266之GPIO功能、資源探索
- MOD-WIFI-ESP8266 Reflashing question
http://www.barissanli.com/electronics/nodemcu.php
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
我猜測, 跟SPI相關的幾個pin可能無法使用, 像是SPI-CLK / SPIQ/SPID等等...
esp6288剛上電需要透過SPI跟 flash download firmware, 因此arduino佔掉這幾個pin可能造成init失敗.
不過init之後應該就不再需要去讀flash, 如果你在loop裡面pinMode GPIO6, 是否還會有一樣的問題呢?(抱歉手邊沒有esp8266, 無法幫你測試)
另外, 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初始就會被占用.
張貼留言