ESP8266-01是最小的ESP8266模塊,只有8個(gè)管腳。在這些VCC中,GND,RST(復(fù)位)和CH_PD(片選)不是I/O引腳,但需要模塊操作。這樣就可以將GPIO0,GPIO2,TX和RX用作可能的I/O引腳,但即使這些引腳都具有預(yù)先分配的功能。 GPIO0和GPIO2確定模塊以哪種模式啟動(dòng),并且TX/RX引腳用于對(duì)模塊進(jìn)行編程以及用于串行I/O(通常用于調(diào)試)。 GPIO0和GPIO2需要連接上拉電阻,以確保模塊正確啟動(dòng)。
步驟2:ESP8266編程技巧(espcomm失?。?/p>
使用Arduino IDE編程ESP8266時(shí)(請(qǐng)參閱ESP8266-01 Wifi Shield),有時(shí)(通常)會(huì)在Arduino IDE中收到錯(cuò)誤消息,例如:-
esp_com打開(kāi)失敗
錯(cuò)誤:失敗打開(kāi)COM33錯(cuò)誤:espcomm_open失敗
錯(cuò)誤:espcomm_upload_mem失敗
在這種情況下,請(qǐng)按照以下步驟操作:-
檢查是否已在Arduino工具菜單中選擇了ESP8266板
檢查是否已在Arduino工具菜單中選擇了COM端口
將GPIO0接地的ESP8266重新通電(干凈)電源應(yīng)用程序,請(qǐng)參閱下文)
如果3)不能解決問(wèn)題,請(qǐng)從計(jì)算機(jī)上拔下USB電纜,等待幾秒鐘,然后再將其重新插入
如果4)不能解決問(wèn)題,從PC上拔掉USB電纜,關(guān)閉Arduino IDE,打開(kāi)Arduino IDE,重新插入U(xiǎn)SB電纜。
在給ESP8266供電時(shí),將GPIO0接地后,請(qǐng)確保干凈地供電。不要搖晃連接。 ESP8266 led應(yīng)該亮起并保持不閃爍。
步驟3:最佳技巧–使用I2C
使ESP8266-01額外輸入的最好技巧是使用I2C接口。
一種選擇是使用GPIO0和GPIO2作為I2C總線。
使模塊正確啟動(dòng)所需的上拉電阻可以加倍,因?yàn)镮2C總線上拉電阻和總線上的其他從器件均是集電極開(kāi)路,因此不應(yīng)下拉總線通電時(shí)。但是,在某些情況下,從站(尤其是具有備用電池的從站)可能會(huì)卡住并壓低總線。在這種情況下,您需要隔離總線,直到ESP8266進(jìn)入引導(dǎo)階段為止。
通過(guò)為I2C總線使用TX和RX可以避免此問(wèn)題
注意:
GPIO1(TX)用作數(shù)據(jù)線,因?yàn)樵诩与姇r(shí),您總是會(huì)在GPIO1上獲得一些調(diào)試輸出。沒(méi)有辦法抑制此輸出,但時(shí)鐘線(RX)會(huì)保持高電平,因此這些數(shù)據(jù)都不會(huì)被時(shí)鐘傳給從機(jī)
在對(duì)ESP8266進(jìn)行編程時(shí),RX線會(huì)連接到ESP8266。程序員的輸出。編程結(jié)束時(shí),ESP8266會(huì)重新啟動(dòng),并且330保護(hù)電阻可防止RX短路編程器的輸出驅(qū)動(dòng)器。
I2C串聯(lián)電阻可為T(mén)X,RX提供防止I2C總線短路的保護(hù)
ESP8266是3.3V器件,因此最好使用3.3V I2C從器件。如今,許多(但不是全部)I2C器件均為3.3V。 “通常,在一個(gè)設(shè)備的電壓高于另一個(gè)設(shè)備的電壓的系統(tǒng)中,有可能通過(guò)I2C連接兩個(gè)設(shè)備,而它們之間沒(méi)有任何電平轉(zhuǎn)換電路。技巧是將上拉電阻器連接到兩個(gè)電壓中的較低者?!保⊿parkFun I2C教程)對(duì)于5V和3.3V器件的混合,將上拉電阻器連接到3.3V線,如上所示。
使用I2C是向ESP8266-01添加多通道A-to-D轉(zhuǎn)換器的好方法,該轉(zhuǎn)換器不會(huì)暴露底層模塊的單個(gè)ADC輸入。例如,使用Adafruit 12位I2C 4通道ADC或模擬輸出SparkFun的I2C DAC Breakout – MCP4725板。 I2C總線還提供許多其他類(lèi)型的傳感器。
有關(guān)克服I2C問(wèn)題的更多信息,請(qǐng)參見(jiàn)http://www.i2c-bus.org/i2c-primer/common-problems.。.。另請(qǐng)參閱I2C電池后備RTC可靠啟動(dòng)的簡(jiǎn)短方法,以幫助清除總線
第4步:將GPIO0/GPIO2用于OUTPUT,將RX用于INPUT
雖然可以通過(guò)WiFi連接發(fā)送調(diào)試消息,但是使用TX連接通常很方便。下一個(gè)示例顯示如何將GPIO0和GPIO2用作輸出,將RX用作輸入。
使用
Serial.begin(115200,SERIAL_8N1,SERIAL_TX_ONLY);
允許您將RX用作通用輸入(或其他輸出),同時(shí)仍將調(diào)試消息寫(xiě)入串行。 RX引線中的330歐姆電阻再次連接到Flash編程器,可以防止編程器的驅(qū)動(dòng)器短路。注意:必須先打開(kāi)S1才能對(duì)ESP8266進(jìn)行編程。
可以從草圖訪問(wèn)TX引腳,因?yàn)镚PIO1和RX為GPIO3
使用GPIO0作為輸出時(shí)如何重新編程
注意:需要將GPIO0接地才能進(jìn)入編程模式。如果您將其拉高,則將其接地可能會(huì)損壞ESP8266芯片。當(dāng)代碼驅(qū)動(dòng)GPIO0輸出時(shí),對(duì)ESP8266進(jìn)行重新編程的安全方法是:-
a)關(guān)閉開(kāi)發(fā)板電源 b)短GPIO0到gnd c)打開(kāi)開(kāi)發(fā)板電源,使其進(jìn)入編程模式由于GPIO0短路
d)消除了GPIO0的短路,因此在程序運(yùn)行時(shí)您不會(huì)短路輸出
e)重新編程開(kāi)發(fā)板 f)必要時(shí)重啟開(kāi)發(fā)板。
步驟5:另一個(gè)技巧-使用GPIO0/GPIO2驅(qū)動(dòng)繼電器并讀取按鈕
這里是另一種配置方式別針。注意:僅當(dāng)您的繼電器模塊具有隔離的輸入(N1和N1-com)時(shí),此技巧才有效。由于此限制和支持代碼的復(fù)雜性,上一個(gè)示例以RX作為輸入為佳。
使用ESP8266 GPIO0/GPIO2/GPIO15引腳已經(jīng)介紹了如何一起使用GPIO0/GPIO2獲得額外的輸入。在這里,該示例將擴(kuò)展為使用GPIO0作為繼電器驅(qū)動(dòng)器輸出,并使用GPIO0/GPIO2作為輸入。
此處是pdf格式的原理圖。
此處GPIO0被用作輸出以驅(qū)動(dòng)繼電器,GPIO0/GPIO2用作輸入來(lái)讀取瞬時(shí)按鈕,該按鈕除了可以通過(guò)WiFi連接進(jìn)行遠(yuǎn)程控制之外,還可以用作手動(dòng)操作來(lái)打開(kāi)和關(guān)閉繼電器。如果在通電時(shí)按下瞬時(shí)按鈕,則也可用于啟用配置模式。
這里的訣竅是在ESP8266模塊初始化時(shí)仍保持GPIO0和GPIO2為高電平的同時(shí)進(jìn)行所有操作。
上拉電阻R1和R3為這兩個(gè)引腳提供了必要的高電平,但是必須確保連接到GPIO0和GPIO2的任何額外電路都不能將引腳拉低。光電隔離繼電器連接在+ 3.3V和GPIO0之間。這樣可在啟動(dòng)時(shí)使GPIO0保持高電平,但在啟動(dòng)后允許GPIO0作為輸出,并使繼電器輸入接地以操作繼電器。模塊初始化時(shí)是否操作瞬時(shí)按鈕都沒(méi)有關(guān)系,因?yàn)橹恍鑼PIO0連接到GPIO2并將這兩個(gè)都連接到其上拉電阻即可。
檢測(cè)配置模式
使用ESP8266作為一個(gè)臨時(shí)訪問(wèn)點(diǎn),您可以按此處所述通過(guò)網(wǎng)頁(yè)進(jìn)行配置。該過(guò)程的一部分是在加電時(shí)使用按鈕或短路鏈接來(lái)指示要進(jìn)入配置模式的軟件。
ESP8266模塊初始化后,將運(yùn)行 setup()代碼。在該代碼中,要檢測(cè)瞬時(shí)按鈕是否被按下,您無(wú)需使GPIO0為低電平即可為按鈕提供GND,然后檢查GPIO2輸入是否為低。該檢查的副作用是,當(dāng)設(shè)備進(jìn)入配置模式時(shí),繼電器將始終處于運(yùn)行狀態(tài)。一旦看到繼電器操作,就可以釋放按鈕,因?yàn)閷脮r(shí)將已檢測(cè)到其輸入。這是一些示例代碼,可在 setup()
boolean configMode = false; // not in config mode normally
void setup() {
pinMode(0, OUTPUT);
digitalWrite(0, LOW); // make GPIO0 output low
// check GPIO2 input to see if push button pressed connecting it to GPIO0
configMode = (digitalRead(2) == LOW);
if (configMode) {
// start AP and get ready to serve config web page
// leave relay on to indicate in config mode
//。..。..
} else {
// normal usage
// make GPIO0 HIGH to turn off the relay
digitalWrite(0, HIGH);
//。..。.
}
// rest of setup()
}
檢測(cè)手動(dòng)覆蓋按鈕
中進(jìn)行此操作。開(kāi)機(jī)時(shí)按下按鈕以啟用配置模式。除了能夠通過(guò)WiFi鏈接控制繼電器之外,我們還希望使用該按鈕作為手動(dòng)替代來(lái)打開(kāi)和關(guān)閉繼電器。
此處不介紹繼電器的WiFi控制,但可以使用pfodApp輕松完成。有關(guān)如何使用pfodDesigner為ESP8266模塊生成Arduino代碼的信息,請(qǐng)參見(jiàn)OLIMEX菜單生成器。
本節(jié)將介紹如何檢測(cè)何時(shí)按下按鈕,指示用戶想要切換繼電器,即打開(kāi)它。如果是OFF,則將其打開(kāi);如果關(guān)閉,則將其打開(kāi)。原理圖與上面相同,所有技巧都在代碼中。有兩種情況需要考慮:-
繼電器已關(guān)閉,用戶希望使用按鈕將其打開(kāi),
繼電器已打開(kāi),用戶希望
繼電器關(guān)閉,用戶希望使用按鈕將其打開(kāi)。
在這種情況下, GPIO0為高電平。在這種情況下,實(shí)際上GPIO0可以作為輸入,因?yàn)樯侠娮鑂1將確保繼電器不會(huì)打開(kāi)。那是訣竅。在這種情況下,將GPIO0設(shè)為輸入,將GPIO2輸出設(shè)為L(zhǎng)OW,然后當(dāng)用戶按下按鈕時(shí),將發(fā)生兩件事:-a)由于GPIO2通過(guò)按鈕提供的接地,繼電器將打開(kāi),并且b)輸入GPIO0將變?yōu)榈碗娖健T摯a檢查輸入GPIO0的狀態(tài),并在輸入GPIO0變?yōu)榈碗娖綍r(shí)知道使用已按下按鈕并希望繼電器打開(kāi)。然后,該代碼使GPIO0變?yōu)镺utput LOW,以在釋放按鈕時(shí)使繼電器保持打開(kāi)狀態(tài)。
繼電器打開(kāi),用戶希望使用按鈕將其關(guān)閉。
在這種情況下,從上述情況開(kāi)始,GPIO0為輸出低電平,繼電器保持打開(kāi)狀態(tài)?,F(xiàn)在,在這種情況下,將GPIO2設(shè)為輸入(由R3上拉),然后當(dāng)用戶按下按鈕時(shí),輸入GPIO2被GPIO0上的LOW輸出拉低。當(dāng)用戶釋放按鈕時(shí),代碼將檢測(cè)到低電平到高電平的過(guò)渡,然后將GPIO0設(shè)為輸入,由于上拉電阻R1而釋放繼電器,并使GPIO2變?yōu)檩敵鯨OW,以針對(duì)上述情況i)進(jìn)行設(shè)置。
還有另一個(gè)竅門(mén)。對(duì)于情況ii),我們需要GPIO2作為輸入,該輸入可檢測(cè)到從低電平到高電平的轉(zhuǎn)換以關(guān)閉繼電器。但是,如果我們?cè)谇闆ri)的末尾制作GPIO2并輸入,那么當(dāng)用戶釋放他們剛剛按下以打開(kāi)繼電器的按鈕時(shí),我們將獲得從低到高的轉(zhuǎn)換。為避免立即再次關(guān)閉繼電器,將忽略繼電器打開(kāi)后的第一個(gè)從低到高的過(guò)渡,因?yàn)檫@只是用戶釋放他們按下的按鈕來(lái)打開(kāi)繼電器。
示例循環(huán)( )繼電器手動(dòng)超越控制代碼
在此代碼中,為簡(jiǎn)單起見(jiàn),我忽略了開(kāi)關(guān)的反跳。輸入應(yīng)在任何實(shí)際應(yīng)用中進(jìn)行去抖動(dòng)。
示例代碼在此處,ESP8266_01pinMagic_1.ino
再次使TX/RX引腳可用進(jìn)行串行調(diào)試或用作其他I/O
結(jié)論
此頁(yè)顯示了如何充分利用ESP8266-01上可用的有限引腳。將GPIO0/GPIO2用作I2C總線可提供最大的擴(kuò)展,但是如果您的項(xiàng)目不使用I2C,您仍可以使用GPIO0/GPIO2來(lái)驅(qū)動(dòng)繼電器并檢測(cè)按鈕輸入。無(wú)論哪種情況,TX/RX都可用于串行調(diào)試,或者如果您通過(guò)WiFi鏈接發(fā)送調(diào)試打印語(yǔ)句,則這些引腳也可用于常規(guī)I/O。
責(zé)任編輯:wv
-
指示燈
+關(guān)注
關(guān)注
3文章
417瀏覽量
28673 -
ESP8266
+關(guān)注
關(guān)注
51文章
965瀏覽量
46944
發(fā)布評(píng)論請(qǐng)先 登錄
評(píng)論