ESP8266 物連網通訊微處理器
ESP8266 是位於大陸深圳的安信可科技有限公司,所開發的一顆,低價多功能的WiFi無線通訊微處理器,IC裡面有一個32位元、80MHz的MPU微處理器 (Arduino UNO 用的ATmega328p,只有16MHz),與 801.11 B/G/N WiFi 無線通訊功能。
IC裡面還有16通道的GPIO,可拿來控制一些開關、燈號,以及一個10-bit 解析度的類比數位轉換器 (ADC),可以接類比感測器,並讀取感測器的數位值。此外還有 SPI、I2C、I2S、UART等串列通訊介面,可以跟其他的模組,進行有線通訊,並將其他沒有無線通訊功能的模組,轉成有無線通訊能力。
ESP8266 的開發模組 ESP-01
目前在拍賣網站,很容易就能買到內建 ESP8266 的開發模組,最陽春的 ESP-01,40塊左右就能買來研究、或開發一些自動化的小玩意兒,除了電源之外,模組還拉出 UART 的 TX/RX 兩條線路,以及兩個 GPIO線路,搭配 Arduino,可以玩出很多功能。如果想要玩更透徹的話,可以考慮買 NodeMCU V3 Lua 這片全功能的開發模組,可以打發更多時間。
一般拍賣網買到的 ESP-01模組,多半是 8MBit (1MByte) ,可以更新到 v2.2.1版的韌體 (2018年6月發布),早期還有4MBit的版本。如果未來開始能買到16Mbit的版本,就可以更新到 v3.0.1版以上的韌體 (2019年7月發布),這套 AT指令集因為功能越來越多,需要的儲存空間也越來越大,到了 v3.0.0,已經不支援 8MBit 容量的ESP8266了。
將 ESP-01 連接 USB轉TTL 模組
要使用 ESP-01,除了 VCC (一定要 3.3V) 跟 GND 要接到電源之外,記得要把 CH_PD 這個信號腳位 (chip power-down),接到 VCC,拉成高電位,才會進入工作模式,才能跟這個模組進行通信。切記!ESP-01 要接 3.3V 的電源,不小心接到 5V電源的話,這片板子就報銷了。可以在拍賣網買到麵包板用的電源模組,這樣只要有一個 9V 或 12V 的充電電源,就可以輕鬆帶著小麵包板,隨處使用。
然後,把 TXD 接到 USB轉TTL 模組的 RXD,RXD 接到對方的 TXD,接線就完成了,可以開始透過電腦中的終端機軟體,像 Putty 或 Arduino 的 Serial Monitor,跟ESP-01對話。記得接線前,要先把跳線帽插在 VCC 跟 3.3V兩支pin腳,才能用 3.3V的電位跟ESP-01通訊。
透過 Putty 以 AT 指令,跟ESP-01聊天,還真麻煩
網路上大多不建議使用 Putty。因為用 Putty 輸入指令,按下 Enter,ESP-01並不會有任何反應,會以為接線出了什麼問題。但其實在 Putty 按下 Enter 鍵 (跟按 Ctrl+M 一樣功能),只會輸出 CR 字元 (Carrier Return),而不會輸出 LF 字元 (Line Feed)。
用 Putty 對 ESP-01 下AT指令的時候,除了要先按 Enter (或 Ctrl+M),接著還要按 Ctrl+J,才會輸出LF 字元,這樣ESP-01才會接收指令。CR字元字符是回車、LF是換行,早期人工打字機打完一行後,打字員要把印字頭拉回左邊 (回車 Return),然後轉動紙張滾輪換到下一行 (換行 Newline)。後來自動化電腦被發明以後,在 ASCII 字元碼裡面,按照機械打字機的習慣,保留了這兩個字元,CR就是 \r,LF就是 \n。現在寫程式用的文字編輯器,還有區分這兩個字元。至於文書處理器,通常就不會特別分開這兩個字元,像Microsoft Word只有用 ^l 換行,跟 ^p 段落,兩種符號。
用 Putty 跟 ESP-01交談,的確挺麻煩的。Putty 的 Terminal 設定裡面,雖然有一個 ‘Implicit LF in every CR’ ,讓每個回車字元後面,自動加一個換行字元。但這個功能只針對外面收進來終端機的字元,而不是鍵盤送出去的。
Putty 還有一個功能,Answerback to ^E,讓你按下 Ctrl+E 的時候,一口氣送出你在文字框裡面設定好的所有字元。很可惜的是,這個功能,同時會送出 ^E (go to end of line)。
在文字框中,輸入 ^M^J ,也就是同時送出CR字元跟LF字元,接著儲存設定,然後開啟 Putty 終端機跟ESP-01對話。當你在畫面輸入 AT 然後按下Ctrl+E,這時Putty會送出 AT^E^M^J,ESP-01回覆 Error。但如果你直接在文字框中輸入AT^M^J的話,按下Ctrl+E時,會送出^EAT^M^J,這樣ESP-01卻可以認得指令,回覆 OK。真是...。還是Arduino 的 Serial Monitor 比較適合 ESP-01。希望ESP8266的韌體團隊,以後可以處理一下^E的問題。
用 Putty 跟 ESP-01交談,的確挺麻煩的。Putty 的 Terminal 設定裡面,雖然有一個 ‘Implicit LF in every CR’ ,讓每個回車字元後面,自動加一個換行字元。但這個功能只針對外面收進來終端機的字元,而不是鍵盤送出去的。
Putty 還有一個功能,Answerback to ^E,讓你按下 Ctrl+E 的時候,一口氣送出你在文字框裡面設定好的所有字元。很可惜的是,這個功能,同時會送出 ^E (go to end of line)。
在文字框中,輸入 ^M^J ,也就是同時送出CR字元跟LF字元,接著儲存設定,然後開啟 Putty 終端機跟ESP-01對話。當你在畫面輸入 AT 然後按下Ctrl+E,這時Putty會送出 AT^E^M^J,ESP-01回覆 Error。但如果你直接在文字框中輸入AT^M^J的話,按下Ctrl+E時,會送出^EAT^M^J,這樣ESP-01卻可以認得指令,回覆 OK。真是...。還是Arduino 的 Serial Monitor 比較適合 ESP-01。希望ESP8266的韌體團隊,以後可以處理一下^E的問題。
其他關於 Putty 序列埠串口通訊的設定,以及 ESP8266的AT指令,可以 Google 一下,就能找到很多教學資料,在此就不贅述了。
更新升級 ESP-01 裡面的韌體
若是買來的 ESP-01 模組,裡面安裝的韌體是比較舊的版本 (我買到的是 v1.1.1),可以自己升級,但是需要買一個USB轉TTL的模組,才能直接把ESP-01透過TX/RX連接到電腦,並透過電腦程式,把韌體寫進去IC中。查詢韌體版本,可以用AT指令,AT+GMR 就可以查到。
要更新韌體,ESP-01 必須要先安排一些特殊的接線,有些腳位要接到 3.3V,有些腳位要安裝開關,開啟韌體寫入模式。接線方法,可以參考這篇教學,我是看這篇,順利完成韌體升級:
教學文章中的硬體接線,有加電容讓電源信號更穩定,降低寫入韌體過程中的失敗風險。
最新的韌體可以在這裡下載:
v3.0.0之後,bin目錄裡面,只有 1024+1024的韌體,8MBit版本的ESP-01就沒辦法安裝了,而 v2.2.1,裡面還有放 512+512與1024+1024兩種容量的韌體。可以安裝 bin/at/512+512目錄中的user1.1024.new.2.bin 韌體。
沒有留言:
張貼留言