当前位置:   article > 正文

07.ESP8266的IO口功能_esp8266 pinmode

esp8266 pinmode

IOT Kit开发板上提供了一些基础的外设及传感器,本篇通过驱动按键、LED灯、继电器、光敏电阻和电机来学习ESP8266的IO口功能,即数字输入、数字输出、模拟输入和PWM模拟输出功能。

1. 数字IO

Arduino for ESP8266可以使用Arduino操作IO口的方式,即使用pinMode、digitalRead和digitalWrite函数进行操作:

  • 使用pinMode(pin, mode)来设置GPIO口工作模式,pin取值范围0 ~ 16,mode可选值见下文;
  • 使用digitalRead(pin)来读取GPIO口电平,返回值为HIGH或LOW,即1和0;
  • 使用digitalWrite(pin, value)来设置输出状态,value可选值为HIGH或LOW,即1和0;
  • 数字引脚0-15可设置为INPUT、OUTPUT、INPUT_PULLUP模式(输入、输出、上拉输入);数字引脚16可设置为INPUT、OUTPUT、INPUT_PULLDOWN_16模式(输入、输出、下拉输入);启动时,这些引脚默认配置为INPUT模式;
  • 引脚还可以提供其他功能,例如串口、I2C、SPI,这些函数通常由相应的库配置。

在IOT Kit开发板上,按键一端连接GPIO16引脚,另一端通过电阻连接到3.3V电源,配置按键下拉输入模式,则按键按下输入高,按键抬起输入低。

char keyCheck(void)
{	 
	static char key_up=1;//按键松开
	if(key_up&&(digitalRead(Key_Pin)==HIGH))
	{
		delay(10);//去抖动 
		key_up=0;
		if(digitalRead(Key_Pin)==HIGH)return 1;
	}else if(digitalRead(Key_Pin)==LOW)key_up=1; 	    
 	return 0;// 无按键按下
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

继电器连接GPIO15,通过下图可知,输出高电平继电器开,输出低电平继电器关。ESP8266模块上的LED灯连接GPIO2,输出高电平关闭,输出低电平打开。

继电器电路图

if(keyCheck()==1)
{
  key_sta = !key_sta;
  digitalWrite(Relay_Pin, key_sta);
  digitalWrite(Led_Pin, !key_sta);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2. 模拟IO

ESP8266 有一个可供用户使用的 ADC 通道。它可用于读取 ADC 引脚上的电压,或读取模块电源电压 (VCC)。要读取施加到 ADC 引脚的外部电压,使用analogRead(A0),电压量程为0 ~ 1.0V,ADC值范围为0 ~ 1023。

在IOT Kit开发板上,光敏电阻通过分压电阻连接到ADC引脚。当光线亮时,光敏电阻阻值减小,分压电压小,ADC值小,反之ADC值变大。

oled.print("ADC:");
oled.print(analogRead(A0)); //A0引脚ADC值 范围0~1023
  • 1
  • 2

GPIO0 ~ 16支持PWM输出,具体说明如下:

  • 使用analogWrite(pin, value)来对pin上输出PWM信号,value表示高电平保持时间,默认下value取值为0 ~ 1023,当value为0时即停止PWM输出;

  • 使用analogWriteRange(new_range)修改PWM value可写范围,默认range为1023;

  • 使用analogWriteFreq(new_frequency)修改PWM频率,new_frequency取值范围100 ~ 40000Hz,默认为1000Hz;

IOT Kit开发板上的电机驱动芯片为L9110S,当两个控制引脚INA和INB同时高电平或低电平时,电机停止,当两个引脚一高一低时可对电机进行正反转控制。

电机驱动电路

 //加速正转
  analogWrite(MotorB_Pin, 0);
  for(int i=10;i<30;i++)
  {
    analogWrite(MotorA_Pin, i);
    delay(10);
  }

  //减速反转
  analogWrite(MotorA_Pin, 0);
   for(int i=30;i>10;i--)
  {
    analogWrite(MotorB_Pin, i);
    delay(10);
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

3. 程序下载验证

将开发板连接电脑进行程序下载,上传完成后,OLED显示ADC值,通过遮挡光敏电阻可看到数字改变。通过按键可控制继电器及LED指示灯,电机以不同速度正反转。

实现现象


关注公众号「TonyCode」,获取完整代码。

个人博客1
个人博客2
回复「1024」获取1000G学习资料

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/67689
推荐阅读
相关标签
  

闽ICP备14008679号