2015年10月14日 星期三

製作 ESP8266 轉接板

完成 ESP8266 與 Arduino 互連測試後, 我就回頭研究製作 ESP-01 模組的轉接板了, 因為總不能每次要用 ESP8266 連網都要準備電阻做位準轉換, 以及一堆公對母杜邦線連來連去的, 看起來很凌亂. 而且經過實驗發現, 一堆杜邦線插在麵包板上, 零件太多, 有時會有接觸不良現象. 以下是此次 try and error 的製作紀錄, 前面的部分雖然有些錯誤, 但我還是保留下來, 後半部才是最後成功的作品.

之前研究過網路上找到的轉接板, 參考 :

# ESP8266 轉接板
Designing a Breadboard Adaptor for the $5 ESP8266 Microcontroller

=== 以下是 try & error 部分 ===

這次要做的轉接板主要是給 5V 運作的 Arduino 與 ESP8266 介接之用. 如果用的是 3.3V 運作的 Arduino, 其 RX/TX 直接與 ESP8266 互連即可, 就不需要這麼麻煩了; 但考量到 ESP-01 模組無法直接插入麵包板做實驗, 轉接板還是需要的, 電路圖如下所示 (使用 Upverter 繪製) :


這裡最主要的是一顆 LD1117V33 的 +3.3V 線性穩壓晶片, 它跟 AMS1117V33 是同樣規格的, 最高輸入電壓 12V, 具有 3.3V 輸出與 800mA 驅動能力, 足以應付 ESP8266 開機時高達 200mA 的啟動電流. LD1117 或 AMS1117 接腳如下圖 :

其次是 CH_PD 與 RX 都採用了 1K+2K 分壓電阻來與 5V 系統的 Arduino 介接. 其中 CH_PD 還用一個 Jumper 接到 3.3V, 如果要節省 ESP8266 功耗, 可以拔掉跳接帽, 讓 Arduino 在不需連網時送 Low 到 CH_PD, 要連網時再送 High, 因此也需要跟 RX 一樣做位準轉換, 參考 :

An IoT Temperature Monitor for my Balcony Garden

我用一塊從禾樺買來的萬用板 (NT$15, 這是我看過品質最好的洞洞板), 先把零件插上去, 如下圖所示 :


左邊有兩排針腳, 各六支, 左邊那排用尖嘴鉗把針腳往下壓到與塑膠座平, 用來插入麵包板中; 第二排與其相連, 用來給母杜邦線連接用. 中間下方是 LD1117V33 穩壓晶片與兩顆 1uF 電容, 上方則是 CH_PD 與 RX 要用的分壓電阻, 最上面是 CH_PD 的跳接帽. 最右邊是給 ESP8266 用的 2*4 排母. 零件佈局接線與接腳安排如下圖所示 :


VCC 輸入, +3.3V 輸出, 以及 GND 針腳安排是配合與 LD1117V33 正面朝左時的腳位相對應, 兩顆緩衝用的 1uF 電容分別跨接 VCC/+3.3V 與 GND 之間. ESP8266 的 RST, GPIO0, 與 GPIO2 都連到 +3.3V 高電位. 而 CH_PD 進來後會經過 1K+2K 分壓電阻接地, 1K 與 2K 串接處連到跳接針腳接 +3.3V, 若不需要控制 CH_PD 時就插上跳接帽保持 High. RX 也是一樣經分壓電阻轉換位準後再接到排母的 RX 腳.

所需的零件如下 :
  1. 1K 電阻 2 個
  2. 2K 電阻 2 個
  3. 2*4 排母 1 個
  4. 1*6 排針 2 個
  5. 1*2 排針 1 個
  6. 跳線帽 1 個
  7. 1uF 電容 2 個
  8. LD1117V33 1 個
  9. 小洞洞板 1 塊


圖中電阻是 1/4W 的, 其實用 1/8W 即可, 比較便宜 (一個 0.25 元). 排母一個約 5 元, LD1117V33 一個約 3 元, 其他電阻電容等合計不會超過 5 元. 洞洞板一塊 15 元可做 4 個, 平均一個 4 元, 整個成本約 17 元.  

接下來進入焊接程序, 首先焊兩排針腳, 因為它們在萬用板上會搖晃, 可能會歪掉不整齊, 所以我先用三秒膠將它們定住 (其實所有零件我都是這樣處理) :  


排針焊好後, 開始焊接穩壓 IC, 這 LD1117 我是直接三隻腳插在圓孔, 剛好到達背面的圓孔銅箔, 我以為這樣焊接就 OK :


LD1117V33 與電容焊好後有量電壓, 正常輸出 3.3V, 但是整個焊接完成後再量, 卻發現 +3.3V電壓輸出僅有 2V 不到, 有時還 0V. 檢查老半天發現穩壓 IC LD1117 這樣插是不對的, 它跟背面的圓孔銅板僅一點點相連而已, 雖然看起來固定住了, 但搖一搖可能使接觸不良, 難怪 +3.3V 輸出變來變去. 其次, CH_PD 的跳接帽設計是錯的, 因為它會跟 LD1117V33 輸出端的電容形成RC 充放電, 使得送電時 CH_PD 要一段時間才會達到 HIGH 準位. 所以第一次焊接結果失敗. 我不死心又再焊一次, 結果當然還是不能用.

=== 以上是 Try & Error ===

為了精簡佈線, 剔除不必要的零件, 將電路修改為如下, 改用 SPDT 開關 (單極雙擲) 取代跳接帽, 當不需要控制 CH_PD 腳時, 切到 +3.3V HIGH 電位; 需要控制 CH_PD 時, 則由 1K+2K 分壓電路將輸入信號 (來自 Arduino) 的 HIGH 位準 +5V 降成 +3.3V. 同時拿掉兩顆防突波電容.


元件實際布局也有修改, LD1117V33 改到背面 (有圓孔銅板那面) 直接與排針連接. 我又再次且戰且走, 從排針開始向排母方向逐一焊接, 沒有預先規劃布局的結果是, 到最後發現背面需要六條跨接線才能完成與 ESP8266 排母針腳的連接, 感覺很凌亂 :

背面 (隨意佈線造成的凌亂)

正面

後來仔細想了一下, 發現如果稍微調整一下佈線方式, 背面就只需要一條跨接線了 :

背面佈線規劃


這裡有三個重點 :
  1. 最上面的 GND 用銅裸線焊在圓孔銅箔上, 一路向右繞過排母到達右下角的排母 GND 腳. 同時, 此 GND 線座標 (1,4) 的圓孔 (在 LD1117V33 IC 的右上角下面), 要用銅裸線穿過圓孔到正面, 到座標 (4,4) 位置時再穿過圓孔回到背面與 RX/CH_PD 的 2K 電阻共接以接地, 如上圖之虛線所示. TX 也是用裸銅線在下方一路向右直達排母左下角的 UXTD 腳.
  2. +3.3V 由 LD1117V33 的頭部銅片向右直達排母的 +3.3V, 同時在 (2,6) 座標位置向下接到 SPDT 的接點給 CH_PD 切換至 +3.3V 用.
  3. RX 與 CH_PD 的 1K+2K 電阻接法較特殊, 為了佈線方便, 1K 電阻從第三行跨到第五行的圓孔, 而 2K 電阻則是跨第四行跨到第五行的圓孔, 共接於第四行, 而且接地到 GND. 
經過這樣的佈線規劃後, 唯一需要用包覆線跨接的, 就只剩下 CH_PD 分壓電阻至排母 CH_PD 腳的這段, 如上圖中的橘色線. 實際焊接結果如下 :

背面 (較整齊的佈線)

注意, ESP01 模組上的 GPIO0, GPIO2, 以及 RST 三支腳沒有用到, 理應接到 +3.3V 為宜, 但我不想再增加跳線, 所以就空接在那邊, 其實也不會有任何影響. 使用三用電表測試排母的 RX 與 CH_PD 電位變化, VCC, GND, 以及 TX 腳的連通性無誤後, 插上 ESP8266 模組如下 :


然後接上 Arduino Nano, 以軟體串列埠介接 ESP8266 轉換板, 用下列程式測試所有 AT 指令均可正常運作 :

#include <SoftwareSerial.h>
SoftwareSerial sSerial(10,11); //(RX,TX) 與 ESP8266 介接的軟體串列埠

void setup() {
  sSerial.begin(9600);
  Serial.begin(9600);
  Serial.println("SoftSerial to ESP8266 AT commands test ...");
  }

void loop() {
  if (sSerial.available()) {  //若軟體串列埠 RX 有收到來自 ESP8266 的回應字元
    Serial.write(sSerial.read());  //在串列埠監控視窗顯示 ESP8266 的回應字元
    }
  if (Serial.available()) {  //若串列埠 RX 有收到來自 PC 的 AT 指令字元 (USB TX)
    char c=Serial.read();  //先暫存在字元變數 c 緩衝一下
    sSerial.write(c);  //將 PC 的傳來的字元傳給 ESP8266
    }
  }

然後拔下 ESP8266, 用小電鑽掛上磨片充當電鋸, 將轉換板切下來 :


為了搭配 Fritzing 繪製麵包板接線圖, 我還特地用 Google 網路硬碟中的簡報軟體, 畫了 ESP8266 插上此轉換板的圖案, 左圖是 CH_PD 滑動開關切到 +3.3V, 而右邊則是切到外部針腳由 Arduino 控制 :

 

插到麵包板上與 Arrduino 連線, 這裡我直接從 Nano 的 +5V 針腳對轉換板供電, CH_PD 未進行控制, 故單極雙擲 (SPDT) 滑動開關切在右方 +3.3V 位置, 測試 AT 指令, 可正常執行無誤. 接線圖如下 :



有了轉換板後, 麵包板接線可簡潔多啦! 只要四條線就搞定了! 這樣要做 TCP/IP 相關實驗就不會被一堆線搞得雜亂無章矣. 不過這板子只是單純用來給 Arduino WiFi 連網之用, 無法讓 ESP8266 獨挑大樑作主控器, 因為我沒拉出 GPIO2 腳. 這以後再說吧 (可以考慮取消 +3.3V 輸出, 改為接到 GPIO2 取代, 仍維持 6 支針腳介面). 另外, 此轉換板也不能拿來更新韌體, 因為 GPIO0 腳我也沒有拉出來, 在燒錄韌體時 GPIO0 須接地.

這次一共做了 2 片轉接板, 切剩下的洞洞板還能再做兩個, 別浪費了, 這幾天有空再來焊接, 考慮改用 AMS1117 試試 :


OK, 總算完成了, 這工作花了我整整一個禮拜的大部分閒暇時光, 但是省了以後很多拉線的麻煩, 值得. 我是學電機的, 不是電子的, 以前從來沒焊過電路板, 這第一次的經驗讓我深刻體會到古人說的 "豫則立, 不豫則廢" (中庸第二十章之六). 凡事要先規劃, 才不至於潦潦草草, 雜亂無章. 雖然人算不如天算, 但不算絕對會完蛋.

2015-10-27 補充 :

排母旁邊剛好還有兩個空洞可以放一個 2*1 排針接到 GPIO0, 這樣要燒錄韌體時只要用跳線帽將排針短路即可, 第二版電路圖如下 :


背面焊接點的布局圖修也改為第二版 :


右下角的兩個孔在正面就是插 2*1 排針, 左端點用跳線連接到 ESP01 排母的 GPIO0 腳. 實際焊接圖如下, 可見背面多了一條跳線 (紅色) :


從下列側面圖可以看到此 GPIO0 短路排針, 平常是空著, 要更新韌體時再插上跳線帽即可 :


本想再把 GPIO2 也接出來取代 3.3V 輸出腳位, 這樣將來若燒錄 NodeMCU 韌體後, ESP8266 本身當主控器不需要 Arduino 時, 這個轉換板就變成最簡開發板了. 但還要多一條跳線, 會使背面高度增加不甚平坦. 可行的做法是排母後面再增加一排洞將 GND 線往後移, 讓 GPIO2 用包覆線引出到正面, 再拉到原 3.3V 孔下去背面連接針腳, 而 AMS1117V33 的第二腳剪掉或扳開往上即可.


8 則留言 :

barryhong 提到...

請問LD1117V33 的頭部銅片是3.3V 輸出pin嗎?(通常我會以為是GND)AMS1117也是嗎?我查到的datasheet都沒有提到頭部銅片是不是3.3V輸出,另外感覺LD1117V33似乎可以立起來而不用平躺在板子上?(讓pin2的3.3V 可以直接連到排母跟開關上)

小狐狸事務所 提到...

沒錯, 那個大銅片是 3.3v 輸出, 與 pin2 是連通的. LD1117 與 AMS1117 是完全一樣的規格, 不同廠家出產而已. 我試過把 LD1117 立起來焊在洞洞板上, 但是因為針腳的長度不夠, 穿越洞洞板的孔時, 沒辦法貫穿到另一面的焊點, 本來以為只要焊錫多一點流進洞裡就可以跟焊點連接, 實作發現這不太容易控制, 很容易導致假焊或接觸不良, 所以才改成躺著焊在背面, 直接跟針腳跳焊. 這個方式在焊接時有個訣竅, 就是邊邊地線的焊點不要先焊 (LD1117 旁邊那個焊點不焊也行, 反正靠其他點也夠牢靠), 以免因為凸起來讓 LD1117 一邊高一邊低不好焊.

barryhong 提到...

感謝你的回答,我最近也在學習ESP8266,想自已製作轉接板,不過附近電子材的AMS1117一顆要價20元,買不下去,等材料收集齊全才能動工

小狐狸事務所 提到...

20 元都能買一片 AMS1117 的穩壓模組了, 到露天搜尋一下, 一顆大約 5 元, 參考 :
http://goods.ruten.com.tw/item/show?21436106992171
我通常看這賣家有哪些我可能需要的零件一起買, 合併運費較划算.

barryhong 提到...

對呀,我最後是在露天買的,我有找到單顆2元甚至1元的,不過為了節省運費(我只買5顆),我跟其他有賣我需要零件的賣家一起買,單顆含運費大概是6元左右。如果沒有事先計劃好會用到的元件,等實驗用到才來買的話,運費成本真的滿高的,文章最後關於GPIO2拉到3.3V的那段我一時沒有意會過來,原來是把3.3V的那根pin改接GPIO2,AMS1117的3.3輸出pin不要碰到針腳所以要抬起來(我應該會直接剪斷吧),我自已的轉接板只有用到一組6x1的排針,我是買針腳比較長的那種,背面露出來的長度也夠插到麵包板上了,另外想再請教一下,你的轉接板背面佈線圖是用什麼軟體畫的呀?

小狐狸事務所 提到...

我是用 Google 雲端硬碟上的簡報程式畫的. 我公司離高雄長明街很近, 所以現在有臨時要用的零件就去單買. 至於我用兩組排針, 是因為方便用杜邦母接頭連線用.

匿名 提到...

你好~最近自己也在學習esp8266,自己的背景非電機、資工,所以目前是以網路上販售的ESP8266降壓模組為供電。目前使用上遇到一個問題,在嘗試ESP8266硬體接線執行AT指令時,當CH_PD與VCC共接3.3V時,會出現短路的現象(供電模組與ESP8266指示燈皆熄滅)。一開始在想是否為韌體異常,重新燒錄後,狀況也一樣,想請教您這樣的現象會是甚麼問題? 該怎麼解決呢?

小狐狸事務所 提到...

這表示 CH_PD 似乎有接到 GND 造成短路了. 您是使用麵包板嗎? 我擔心會不會接腳或孔洞插錯. 它的孔洞方向有時我也會一時不察插錯. 仔細檢查針腳接線看看.