视频教程:https://www.bilibili.com/video/BV1Ki4y1u7Aa/
Blink程序分析
Esp8266不像普通的C++程序,拥有一个main函数的入口,Esp8266的SDK提供了2个接口,void setup() 和 void loop()。setup函数在系统启动上电完成或者按下reset按钮后调用一次,类似于初始化。而loop函数在setup初始化完以后就会不停的被调用,不管你写了多长的代码,程序只要执行完以后又会重新执行loop,你可以把这个机制想象为外部包裹了一层代码。
int main(int argc, char* argv[]) {
setup();
for (;;) {
loop();
}
return 0;
}
在Blink程序中,setup函数中只有一行代码,
pinMode(LED_BUILTIN, OUTPUT);
这行代码表示将LED_BUILTIN,也就是板载led的引脚的gpio设置为输出,这样就可以通过程序向LED_BUILTIN输出高电平或者低电平了,LED_BUILTIN的定义就在,见下图,也就是GPIO2这个引脚上。我用过的板子都是在2上,没有见过16的。

就是下图所对应的引脚,如果你在这个引脚上接一个led,那么这个led也会随主板上的led一起闪烁。

loop函数中
// 将GPIO2设置为低电平,表示LED熄灭
digitalWrite(LED_BUILTIN, LOW);
// 延迟1秒,其实就是程序卡在这里1秒什么也不做,表现就是灯熄灭1秒
delay(1000);
// 将GPIO2设置为高电平,表示LED亮起
digitalWrite(LED_BUILTIN, HIGH);
// 延迟2秒
delay(2000);
因此表现出来的效果就是LED灭1秒,然后亮2秒这样不停的循环,是不是很简单?你可以尝试写一个SOS的灯出来吗?
程序调试
Esp8266调试基本是靠打Log完成的,Log可以实时通过串口输出到串口监视器上,还是挺方便的。
首先需要在setup函数里面加入几行代码
// 设置串口的波特率是115200
Serial.begin(115200);
// 输出两个换行,避免和其他输出混在一起
Serial.println();
Serial.println();
// 在日志中输出"setup complete",表示setup函数执行完毕
Serial.println("setup complete");
注意第一行的波特率,这里的波特率需要和开发板的 Upload Speed 保持一致,这个选项可以见上图。
而对于loop函数,可以加入如下的代码,这样每次运行完一次loop都会输出一次计数。
// 定义一个静态变量计数用
static int count = 0;
// 输出计数
Serial.print("Count = ");
Serial.println(count++);
然后打开 工具->串口监视器(快捷键 ctrl+shift+m),打开如下窗口,可以看到setup complete只打印了一次,后面就是每次调用loop后的计数打印。这里需要注意的是:
- 右下角绿色框内的波特率和你setup函数初始化时的波特率必须相同
- 在程序上传的时候同时打开串口监视器会出错,因为上传程序和监视用的是同一个串口,上传过程中占用串口会导致打开监视器失败。
- 如果你打开监视器的时候已经错过了你需要查看的信息,不要急于关闭监视器或者重新编译程序,只需要按下开发板的reset按钮,程序重新执行就可以看到全部日志了。
- 如果发现log无法打印可以尝试关闭监视器再重新打开。
