今天尝试点了下esp8266板上的LED灯。虽然使用安装的开发包中自带了例程;不过我还是想写一个自己的,从而熟悉它基本的工程设置。
首先我查了下开发板配套的图,发现LED灯是连接在GPIO2端口的,因此只需要控制GPIO2输出高低电平即可控制LED灯的亮灭。
自带的例程中,其使用了digitalWrite(LED_BUILTIN, HIGH)和digitalWrite(LED_BUILTIN, LOW)来控制灯亮和灭。我尝试找了下LED_BUILTIN的定义,发现没有找到。后面在Arduino的界面中,发现了一个可以配置的项,如下图所示。也就是安装好后的ESP8266开发包将这块做成了一个可配置的项,LED_BUILTIN具体的值取决于这里的选择。
当然,可以不使用LED_BUILTIN,而是直接给出引脚的数值。总之,指定好和板上连接LED对应的引脚即可。
写了一点代码,效果和ESP8266自带的例程一样,也是控制反复亮灭。代码要更简单一些。
/**
* 功能:控制LED灯闪烁
* 详细:使用简单的循环间隔来控制LED周期性的闪烁
*
* 编写:李小童
* 日期:2022-8-8
* 开发型号:NodeMUC 1.0(ESP-12E)
* 如需获取更多资料,以及相关的支持,可以联系:527676163@qq.com
*/
#include <ESP8266WiFi.h>
#define LED_PERIOD 300 // 灯亮与来之间的时间间隔,以毫秒为单位
static int led_on = 0; // 当前LED是否显示
/**
* 初始化函数,在启动后只运行一次
*/
void setup() {
// 设置LED引脚为输出模式,以便能够控制LED灯显示
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
led_on = !led_on; // 如果之前LED亮,则灭;反之,则亮
// 根据当前的led_on决定当前是显示还是熄灭
digitalWrite(LED_BUILTIN, led_on ? HIGH : LOW);
delay(LED_PERIOD);
}
以上共两个函数,setup在esp8266初始化时调用一次,loop是会被反复调用。这两个函数是arduino规范要求必须实现的。我个人感觉其内部的运行流程大概下面这样子。
int main (void) {
....... 初始化........
..........setup()......
while (1) {
......... 一些代码
.......... loop();
}
}