(基于Ardunio)ESP8266之初识IO口

文章目录

  • io口的输入输出
  • io口的模拟输出/入(PWM)
  • 舵机库的使用
  • esp8266管脚图及原理图

io口的输入输出

首先,介绍三个函数:
pinMode(pin, mode)
–定义数字管脚的输入/输出;mode为INPUT/OUTPUT之一,表明该管脚是用于输入还是输出。

digitalWrite(pin, val)
–设置数字管脚输出电平,val取值为HIGH/LOW之一(或者1/0)。

digitalRead(pin)
–读取数字输入管脚的电平,函数返回值为1/0之一。

以下是通过一个按键,控制灯亮灭的程序:

int Button=5;                      //IO5(D1)
int LED = 2;                       //IO14(D4)
void setup() {
  pinMode(Button,INPUT_PULLUP);      //设置按钮引脚为上拉模式,默认为高电平
  pinMode(LED, OUTPUT);             //设置指定io为输出模式
  digitalWrite(LED, 0);             //初始化为低电平
}

void loop() {
  if(digitalRead(Button)==0){        //如果读取到按钮引脚为低电平,视为按钮被按下
    digitalWrite(LED, 1);           //引脚置低,点亮LED
  }
  else{
    digitalWrite(LED, 0);
  }
}

(基于Ardunio)ESP8266之初识IO口_第1张图片
详细原理图可见底部

io口的模拟输出/入(PWM)

analogRead(pin)
–读取模拟输入管脚的值,返回0-1023之间的。需要注意的是ESP8266只有一个模拟输入引脚(即A/D口)–A0口。

analogWrite(pin, val)
–设置数字管脚中的PWM管脚的输出值,val取值为0-1023。
(与Arduino UNO不同,UNO的pwm值在0-255)

以下为呼吸灯的代码:

int LED = 2;
void setup() {
  pinMode(LED,OUTPUT);
}

void loop() {
  for(int i=0;i<=1023;i++){           //模拟输出0-1023
    analogWrite(LED, i);             //i的值不断变大,LED亮度逐渐提高
    delay(1);                         //用来延缓过程,展现效果
  }
  for(int i=1023;i>=0;i--){ 
    analogWrite(LED, i);             //i的值不断变小,LED亮度逐渐降低
    delay(1);
  }
}

以上为通过改变PWM(周期)的方法,来改变led灯的方法。以上程序上传之后的效果为esp8266自带的led灯(蓝色的)开始明暗闪烁。
以上需要注意的是:

  1. 使用analogRead(A0)时,是不需要pinMode(pin, mode)定义的。
  2. esp8266的PWM口是固定的。以下为ESP8266技术手册截屏。
    (基于Ardunio)ESP8266之初识IO口_第2张图片

舵机库的使用

学会了使用PWM自然是可以正常的使用舵机的。但是ardunio却是有专门的库,省去了很多麻烦。
attach(pin)
–连接舵机,pin为连接舵机的引脚号。

write(angle)
–角度控制 。

我只在使用esp8266时用过以上函数,还有以下几个但未用过。使用时待查阅。
read()
–读取舵机当前的角度(最后一次用write()函数写入的值)。

attached()
–用于检测servo变量是否正确连接至Arduino对应引脚上。返回值为 true 和 false 。

detach()
–将servo变量与引脚脱离,如果所有servo变量均被脱离,则可以用analogWrite()函数进行PWM输出。

以下为舵机来回90度偏转的代码:

#include                   //加载舵机库         
Servo myservo;                      //定义一个舵机对象
int _servo = 14;                    //IO14(D5)
void setup() {
  myservo.attach(_servo);           //设置指定io为舵机
  myservo.write(0);                 //初始舵机为0度
}

void loop() {
  for(int i=0;i<=90;i++){           //控制舵机角度由0度旋转到90度    
    myservo.write(i);
    delay(50);                      //用以展现效果
  }
  for(int i=90;i>=0;i--){           //控制舵机角度由90度返回到0度          
    myservo.write(i);
    delay(50);
  }  
}

esp8266管脚图及原理图

(基于Ardunio)ESP8266之初识IO口_第3张图片
(基于Ardunio)ESP8266之初识IO口_第4张图片

你可能感兴趣的:(esp8266,ardunio)