在IOT Kit開(kāi)發(fā)板上提供了一些基礎(chǔ)的外設(shè)及傳感器,本篇通過(guò)驅(qū)動(dòng)按鍵、LED燈、繼電器、光敏電阻和電機(jī)來(lái)學(xué)習(xí)ESP8266的IO口功能,即數(shù)字輸入、數(shù)字輸出、模擬輸入和PWM模擬輸出功能。
1. 數(shù)字IO
Arduino for ESP8266可以使用Arduino操作IO口的方式,即使用pinMode、digitalRead和digitalWrite函數(shù)進(jìn)行操作:
- 使用pinMode(pin, mode)來(lái)設(shè)置GPIO口工作模式,pin取值范圍0 ~ 16,mode可選值見(jiàn)下文;
- 使用digitalRead(pin)來(lái)讀取GPIO口電平,返回值為HIGH或LOW,即1和0;
- 使用digitalWrite(pin, value)來(lái)設(shè)置輸出狀態(tài),value可選值為HIGH或LOW,即1和0;
- 數(shù)字引腳0-15可設(shè)置為INPUT、OUTPUT、INPUT_PULLUP模式(輸入、輸出、上拉輸入);數(shù)字引腳16可設(shè)置為INPUT、OUTPUT、INPUT_PULLDOWN_16模式(輸入、輸出、下拉輸入);啟動(dòng)時(shí),這些引腳默認(rèn)配置為INPUT模式;
- 引腳還可以提供其他功能,例如串口、I2C、SPI,這些函數(shù)通常由相應(yīng)的庫(kù)配置。
在IOT Kit開(kāi)發(fā)板上,按鍵一端連接GPIO16引腳,另一端通過(guò)電阻連接到3.3V電源,配置按鍵下拉輸入模式,則按鍵按下輸入高,按鍵抬起輸入低。
char keyCheck(void)
{
static char key_up=1;//按鍵松開(kāi)
if(key_up&&(digitalRead(Key_Pin)==HIGH))
{
delay(10);//去抖動(dòng)
key_up=0;
if(digitalRead(Key_Pin)==HIGH)return 1;
}else if(digitalRead(Key_Pin)==LOW)key_up=1;
return 0;// 無(wú)按鍵按下
}
繼電器連接GPIO15,通過(guò)下圖可知,輸出高電平繼電器開(kāi),輸出低電平繼電器關(guān)。ESP8266模塊上的LED燈連接GPIO2,輸出高電平關(guān)閉,輸出低電平打開(kāi)。
繼電器電路圖
if(keyCheck()==1)
{
key_sta = !key_sta;
digitalWrite(Relay_Pin, key_sta);
digitalWrite(Led_Pin, !key_sta);
}
2. 模擬IO
ESP8266 有一個(gè)可供用戶使用的 ADC 通道。它可用于讀取 ADC 引腳上的電壓,或讀取模塊電源電壓 (VCC)。要讀取施加到 ADC 引腳的外部電壓,使用analogRead(A0),電壓量程為0 ~ 1.0V,ADC值范圍為0 ~ 1023。
在IOT Kit開(kāi)發(fā)板上,光敏電阻通過(guò)分壓電阻連接到ADC引腳。當(dāng)光線亮?xí)r,光敏電阻阻值減小,分壓電壓小,ADC值小,反之ADC值變大。
oled.print("ADC:");
oled.print(analogRead(A0)); //A0引腳ADC值 范圍0~1023
GPIO0 ~ 16支持PWM輸出,具體說(shuō)明如下:
- 使用analogWrite(pin, value)來(lái)對(duì)pin上輸出PWM信號(hào),value表示高電平保持時(shí)間,默認(rèn)下value取值為0 ~ 1023,當(dāng)value為0時(shí)即停止PWM輸出;
- 使用analogWriteRange(new_range)修改PWM value可寫(xiě)范圍,默認(rèn)range為1023;
- 使用analogWriteFreq(new_frequency)修改PWM頻率,new_frequency取值范圍100 ~ 40000Hz,默認(rèn)為1000Hz;
IOT Kit開(kāi)發(fā)板上的電機(jī)驅(qū)動(dòng)芯片為L(zhǎng)9110S,當(dāng)兩個(gè)控制引腳INA和INB同時(shí)高電平或低電平時(shí),電機(jī)停止,當(dāng)兩個(gè)引腳一高一低時(shí)可對(duì)電機(jī)進(jìn)行正反轉(zhuǎn)控制。
電機(jī)驅(qū)動(dòng)電路
//加速正轉(zhuǎn)
analogWrite(MotorB_Pin, 0);
for(int i=10;i<30;i++)
{
analogWrite(MotorA_Pin, i);
delay(10);
}
//減速反轉(zhuǎn)
analogWrite(MotorA_Pin, 0);
for(int i=30;i>10;i--)
{
analogWrite(MotorB_Pin, i);
delay(10);
}
3. 程序下載驗(yàn)證
將開(kāi)發(fā)板連接電腦進(jìn)行程序下載,上傳完成后,OLED顯示ADC值,通過(guò)遮擋光敏電阻可看到數(shù)字改變。通過(guò)按鍵可控制繼電器及LED指示燈,電機(jī)以不同速度正反轉(zhuǎn)。
實(shí)現(xiàn)現(xiàn)象
-
傳感器
+關(guān)注
關(guān)注
2573文章
53868瀏覽量
780026 -
PWM
+關(guān)注
關(guān)注
116文章
5809瀏覽量
222540 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
6007瀏覽量
110126 -
IO口
+關(guān)注
關(guān)注
3文章
170瀏覽量
25413 -
ESP8266
+關(guān)注
關(guān)注
51文章
965瀏覽量
48586
發(fā)布評(píng)論請(qǐng)先 登錄
使用esp8266實(shí)現(xiàn)STM32聯(lián)網(wǎng)(最簡(jiǎn)單USART方法)
esp8266串口wifi實(shí)例
esp8266 at指令集詳解

esp8266中文資料匯總(esp8266引腳圖_與單片機(jī)連接_串口wifi實(shí)例)

ESP8266 Nodemcu學(xué)習(xí)心得②

ESP8266-NodeMCU

ESP8266 wifi模塊開(kāi)發(fā)匯總

小白驅(qū)動(dòng)C51+ESP8266局域網(wǎng)與APP通訊控制IO口

esp筆記(2)使用Arduino IDE 開(kāi)發(fā) esp8266

ESP8266初次如何實(shí)現(xiàn)無(wú)線通信(基于電腦與ESP8266)

評(píng)論