ESP8266从零学 笔记
L1 ESP8266的入门测试
P1 blinker APP控制Esp8266板载LED
前言
因为是初学者所以特别希望能有一份详细的教程,可是俺没找到,所以就写了这么一篇文章,希望同学们(大朋友们)能够喜欢,不过呢还是建议:自己多百度多思考,才能理解的更多。
注释中的“[小白说]”,代表的是个人的观点,如果有理解的不对的地方,希望能够进行沟通并改正。
因为注释的过于细致,所与继续代码玩一玩的同学,在这先提供一份完整的代码
材料:Esp8266一块、烧写器一块、安装有blinker APP的手机、自家的WiFi网络(手机热点也行)
#define BLINKER_PRINT Serial
#define BLINKER_WIFI
#include <Blinker.h>
char auth[] = "我是来自blinker的密钥";
char ssid[] = "HUAWEI nova 21";
char pswd[] = "我是密码";
// 新建组件对象
BlinkerButton Button1("btn");
// 按下按键即会执行该函数
void button1_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
}
void setup() {
// 初始化串口
Serial.begin(115200);
#if defined(BLINKER_PRINT)
BLINKER_DEBUG.stream(BLINKER_PRINT);
#endif
// 初始化有LED的IO
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
// 初始化blinker
Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead);
Button1.attach(button1_callback);
}
void loop() {
Blinker.run();
}
P2 代码的注释
接下来是硬货了哦!!!
第一段
//预定义blinker的两个库
#define BLINKER_PRINT Serial
#define BLINKER_WIFI
//声明blinker的头文件
#include <Blinker.h>
//下面就是要你的8266联网的部分了。密钥、wifi名称、wifi密码。
char auth[] = "在这写来自blinker的密钥";
char ssid[] = "在这写你要芯片接入的wifi的名称";
char pswd[] = "在这写你的wifi密码";
关于密钥“ Secret Key”的获取方法!
{
打开blinker APP
– 选择右上角‘加号’
– 在DIY设备中选择‘Arduino’
– 进入‘设备接入向导’后
– 选择右下角‘wifi接入’方式
– 新的界面中间会显示你的secret key
}
关于“wifi名称”!
我比较保守的选择了英文的WiFi名字,没尝试中文的WIFI能不能用,我感觉有点悬!
关于“wifi密码”!
你自己的wifi密码当然是你自己知道了哦!
第二段
// 新建组件对象
BlinkerButton Button1("btn");//需要你在blinker APP里新建一个组件
方式如下
{
回到blinker APP的界面
–选择刚刚新建的“按钮组件”;
–找到右上角的“编辑”按钮;
–再来到最下面找到“按键”并点击;
–选择你新建产生的“按键组件”;
–着重更改 “数据键名”的内容。注意与本行代码( )中的内容一致;
–调整完成之后,点击右上角“保存”;
–在右上角的 “锁头” 图标,锁定你的控制界面。
}
第三段
// 按下按键即会执行该函数
void button1_callback(const String & state)
//关于按钮button_1的回调函数,函数的返回值类型为void(无类型)。
//state 是这个函数的变量
//“const String &” 是对一个string类型变量的常引用。
//常引用参数就是在函数内不能修改传入的变量的值,这样做可以防止数据被随意的篡改。
{
BLINKER_LOG("get button state: ", state);
//blinker日志(“获取按钮状态:”,状态);
//get button state在程序中有变色所以是一个blinker库中的函数,功能如上所述
//state 是保存按钮状态的变量。
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
//引脚写入程序,控制板载LED的‘亮与灭’
//LED_BUILTIN是blinker库中的板载led引脚。
//digitalRead(LED_BUILTIN),读取现在板载LED的之前的状态,
//‘ !’代表非,即下一次的板载LED状态与上一次的相反。上次是亮的,这次就要灭;上次是灭的,这次就要亮。
}
第四段
//[官方] 如果未绑定的组件被触发,则会执行其中内容
//[小白话]如果你的blinker APP上的按键组件与程序中的名称不一致,触发时执行这个函数而不是上一个函数。
void dataRead(const String & data)
//与上一个函数一样的哦。
//dataRead是这个函数的名字;
//data 是这个函数的变量;
{
BLINKER_LOG("Blinker readString: ", data);
//blinker日志("blinker读取字符串:",数据)
//[小白说]blinker用来读取字符串格式的数据。
}
第五段
void setup()//[小白说]这部分应该是没有问题的,Arduino IDE的编程框架
{
// 初始化串口
Serial.begin(115200);//[小白说]在这废话一句,咱也不是到为啥是115200
#if defined(BLINKER_PRINT)//如果已定义(BLINKER_PRINT)
//关于为什么再if前有个‘#’,在最下面有解释,可以自助了解。
BLINKER_DEBUG.stream(BLINKER_PRINT);
//[官方]用于指定调试信息输出的串口,设备开发时调试使用,项目或产品成型后,可以删除不用。
//[小白说]小白在这表示自己也不明白,有明白的大神可以帮帮忙
#endif//#endif是#if的搭档
// 初始化有LED的IO
pinMode(LED_BUILTIN, OUTPUT);//设置板载LED为输出模式
digitalWrite(LED_BUILTIN, HIGH);//点亮板载LED,[小白说]他要一开始是亮的
// 初始化blinker
Blinker.begin(auth, ssid, pswd);
//[小白说]auth ssid pswd 这三个家伙在最开始用来保存你的密钥、wifi名、密码来着
//[小白说]没有查到直接对这句的解释,猜测是用来设置与blinker网端通信的
Blinker.attachData(dataRead); //没有绑定的组件的函数注册
Button1.attach(button1_callback);//绑定的按键组件的函数注册
//[小白说]这里对应的是绑定与未绑定组件的自定义函数。将两种组件进行网端注册
}
#if 和 if 都是C和C++中的指令,但是二者区别很大。
1)#if属于条件编译技术,用于给编译器提供信息,控制有些代码变成机器语言;
2)if属于程序判断,在程序运行时控制语句是否被执行;
3)#if在程序编译前执行,if在程序运行时执行;
4)#if后面不能写变量,if后面可以写变量。
第六段
void loop() //[小白说]这也是Arduino IDE编程的框架,意为程序的循环部分
{
Blinker.run();//[小白说]小家伙开始工作啦!!!
//用来保持设备间的连接及处理收到的数据,需要频繁被调用所以放在loop()函数中
}
完整代码在开头
感谢阅读
作者QQ:2489055370,
欢迎大神指教与同学的提问(提问这篇的内容或者更简单的可以 [笑哭] )