ESP8266 UART連接電路

ESP8266 UART連接電路

ESP所使用的電壓為3.3V,意謂著GPIO輸出電壓HIGH準位3.3V,然而輸入容忍最大電壓也是3.3V,如果要透過ESP提供的UART與其他開發板連接時就要注意電壓準位問題,

Arduino UNO板子為例,它主要是以5V電壓為主,輸出電壓HIGH準位為5V。這種有輸入與輸入的電壓差需要轉換叫作Logic Level Shift,作法有很多種,依照你連接電路的方式選擇適合你的,下面提供幾個作法:

分壓法

分壓法與其名稱一樣,是利用電阻分壓的方式讓最高準位為3.3V,所以這理使用的是10K、20K電阻串聯,一端接到Arduino的輸出,另一端接地,串聯兩端另外接線至ESP輸入,如下:

當Arduino輸出時,經過分壓的方式:

out = Vcc * (R2/(R1 + R2)


得到約為3.3333333333的電壓,剛好與3.3V接近,如此一來就能當做ESP的輸入。

穩壓法

使用齊納(Zener)二極體穩壓的方法,讓電壓超過3.3V時電壓穩定輸出在3.3V,如此就能保護輸入至RX的電壓不會超過3.3V

二極體法

二極體具有順向導通與逆向不導通的特性,所以利用Arduino UNO TX輸出時產生的5V讓二極體順向導通,導通後就像開關打開一樣。

電路中二極體採用1N4148,其順向壓降約為0.45V~0.55V,所以先計算在電阻上所產生的壓降:

電阻壓降 = 總電壓 – 二極體順向壓降 – 終點電壓

    5v - 0.45v - 3.3v = 1.25v


計算得到壓降後再用輸入電壓減掉壓降得到端點電壓:

    5v - 1.25v = 3.75v


或是用推導的方式,可以更快算出結果,終點電壓3.3v,再加上二極體順向壓降0.45v得到3.75v的端點電壓。

ESP8266 Datasheet的4.3版本中的GPIO章節曾經提到一點有關於保護電路的說明:

All digital IO pins must add an overvoltage protection circuit (snap back circuit) between the pin and ground. Usually bounce (snap back) voltage is about 6V, while maintaining the voltage is 5.8V. This prevents excessive voltage and generating ESD. Diodes also avoid reverse voltage output devices.


所以上述結果得到3.75v輸入到ESP8266是可被接受的。

匯流排收發器(BUS TRANSCEIVER)

使用匯流排收發IC對於數位輸出波形來說是最接近方波,在數位電路是較可靠的,但此類的IC體積還有價格上或許不那麼容易被考慮,以下為電路連接方式:

結論

此篇介紹許多邏輯位準轉換的方法應用在ESP上連接UART的使用,對於後面會介紹如何將程式碼燒寫於Flash及使用官方支援AT command控制WiFi來說是必需要了解,當然你也可以將此篇的邏輯位準轉換方法應用在其他開發板上面也是可行的。

參考資料

5V to 3.3V Logic Level Shifting Stragety Notes

Effects of Varying I2C Pull-Up Resistors