参考链接:
https://www.bilibili.com/video/BV1gE411D7xP?p=1
https://www.oschina.net/p/blinker?hmsr=aladdin1e1

0x00 环境搭建:Arduino IDE + ESP8266 + 点灯.blinker

Arduino IDE:
下载:https://www.arduino.cc/en/software
ESP8266 Boards:https://pan.baidu.com/s/17C1USjDVSmCSlMGLUuV-rQ 提取码:a12l

ESP8266:
某宝

点灯.blinker:
应用商店下载
配置及下载blinker Arduino库:https://github.com/blinker-iot/blinker-doc/wiki/%E4%BD%BF%E7%94%A8esp8266&WiFi%E6%8E%A5%E5%85%A5

0x01 ESP开发板引脚

LDE使用D4引脚。

182ED161818C3C3B0B39F1E839AB04CC.jpg902CEF450461DBF13A184218A7575289.jpg0A55294088D803643B9BAEC92A479F48.jpg
接线:
4D584FADA915F261F8AB2AE16D45E059.jpg

0x02 WiFi通信

路由器属于AP(Access Point,无线接入点),平板、手机和其他可以无线联网的设备属于STA(Station,站点)。

下面是ESP8266的WiFi模块通信的实现过程,写出来凑点字数
image.png

Esp8266有AP和STA两种模式。


STA模式:**

  1. #include <ESP8266WiFi.h> // 加载ESP8266EiFi库
  2. const char *STAid = "小守的破手机"; // 要连接的路由器名称
  3. const char *STApassword = "*********"; // 要连接的路由器密码
  4. int LED = 2; // 设置指示灯GPIO2,D4
  5. void setup(){
  6. pinMode(LED, OUTPUT); // 设置LED为输出模式
  7. digitalWrite(LED, 0); // 设置指示灯的初始状态为熄灭
  8. WiFi.mode(WIFI_STA); // 设置Esp8266为STA模式
  9. WiFi.begin(STAid, STApassword); // 配置连接信息,开始连接
  10. // 运行自定义函数,在未连接到路由器的过程中,闪烁LED的灯,直到连接成功,点亮LED灯
  11. gotoWiFi();
  12. }
  13. void loop(){
  14. if(WiFi.status() != WL_CONNECTED){ // 判断连接是否断开,断开则重新连接
  15. WiFi.disconnect(); // 清除之前的连接配置信息
  16. WiFi.begin(STAid, STApassword); // 配置连接信息,重新连接
  17. gotoWiFi(); // 根据LED指示灯判断连接状态
  18. }
  19. }
  20. void gotoWiFi(){
  21. // while循环监听连接状态,连接成功前,闪烁LED灯
  22. while(WiFi.status() != WL_CONNECTED){ // 如果没有连接上,持续执行,使LED灯闪烁
  23. bool is = digitalRead(LED); // is接收当前LED的电平状态
  24. digitalWrite(LED, !is); // 设置LED电平状态与之前相反
  25. delay(500);
  26. }
  27. digitalWrite(LED, 1); // 此时连接成功,置LED电平状态为高电平,点亮LED
  28. }


AP模式:**

  1. #include <ESP8266WiFi.h>
  2. const char *id = "ESP8266"; // AP的SSID,即WiFi名称
  3. const char *password = "123456"; // AP的密码
  4. int LED = 2; // IO2, D5
  5. void setup(){
  6. // 开启窗口监视器
  7. Serial.begin(115200);
  8. Serial.println("");
  9. pinMode(LED, OUTPUT);
  10. digitalWrite(LED, 0);
  11. WiFi.mode(WIFI_AP); // 设置ESP8266为AP模式
  12. WiFi.softAP(id, password); // 配置AP信息,并开启AP
  13. // 默认IP为192.168.4.1,可以自定义AP的IP段
  14. IPAddress softLocal(192,168,1,1); // IP地址,设置IP第四字段
  15. IPAddress softGateway(192,168,1,1); // IP网关,设置IP第三字段
  16. IPAddress softSubnet(255,255,255,0);
  17. // 配置自定义的IP信息
  18. WiFi.softAPConfig(softLocal, softGateway, softSubnet);
  19. IPAddress myIP = WiFi.softAPIP(); // 用变量myIP接收AP当前的IP地址
  20. Serial.println(myIP); // 打印输出myIP的IP地址
  21. }
  22. void loop(){
  23. int gotoAP = WiFi.softAPgetStationNum(); // 获取当前连接到AP的设备数量
  24. // 如果没有设备连接到AP,熄灭LED灯,否则点亮LED灯
  25. if(gotoAP == 0){ // 连接数为0,说明没有设备连接
  26. digitalWrite(LED, 0); // 熄灭LED
  27. }else{
  28. digitalWrite(LED, 1); // 点亮LED
  29. }
  30. }

STA模式UDP通信

  1. #include <ESP8266WiFi.h>
  2. #include <WiFiUdp.h>
  3. const char *STAid = "小守的破手机"; // 要连接的路由器名称
  4. const char *STApassword = "*********"; // 要连接的路由器密码
  5. // UDP设置项
  6. unsigned int listen_Port = 41001; // 监听端口
  7. unsigned int sent_Port = 41002; // 发送端口
  8. char read_data[512]; // 缓存数据
  9. WiFiUDP Udp; // 定义UDP对象
  10. int deng = 2;
  11. void setup(){
  12. Serial.begin(115200);
  13. Serial.println();
  14. pinMode(deng, OUTPUT);
  15. digitalWrite(deng, 0);
  16. WiFi.mode(WIFI_STA); // 设置为STA模式
  17. WiFi.begin(STAid, STApassword); // 配置连接信息,开始连接
  18. // 运行自定义函数,在未连接到路由器的过程中,打印输出...,直到连接成功
  19. gotoWiFi();
  20. Serial.println("路由器连接成功");
  21. Udp.begin(listen_Port);
  22. }
  23. void loop(){
  24. //检测WiFi连接状态
  25. if(WiFi.status() != WL_CONNECTED){
  26. WiFi.disconnect();
  27. WiFi.begin(STAid, STApassword);
  28. gotoWiFi();
  29. }else{
  30. Udp_Handler(Read_Udp());
  31. }
  32. }
  33. void gotoWiFi(){
  34. while(WiFi.status() != WL_CONNECTED){
  35. delay(500);
  36. Serial.print(".");
  37. }
  38. Serial.println("");
  39. }
  40. // 接收数据,将数据以字符串形式返回,方便处理
  41. String Read_Udp(){
  42. String data = "";
  43. int packetSize = Udp.parsePacket();
  44. if(packetSize){
  45. memset(read_data, 0x00, sizeof(read_data));
  46. Udp.read(read_data, 511);
  47. Udp.flush();
  48. for(int i = 0; i < packetSize; i++){
  49. data += read_data[i];
  50. }
  51. Serial.println(data);
  52. }
  53. return data;
  54. }
  55. // 分析处理数据
  56. void Udp_Handler(String data){
  57. if(data != ""){
  58. if(data == "打开"){
  59. digitalWrite(deng, 1);
  60. myPrint("打开", 1);
  61. }
  62. else if(data == "关闭"){
  63. digitalWrite(deng, 0);
  64. myPrint("关闭", 1);
  65. }
  66. }
  67. }
  68. // 发送数据
  69. // 第一个参数,使用string类型作为发送内容
  70. // 第二个参数,a为真,指定发送, 对发送方返回数据, a为假,广播发送,群发信息
  71. void myPrint(String data, bool a){
  72. if(a){
  73. Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
  74. }else{
  75. Udp.beginPacket("", sent_Port);
  76. }
  77. Udp.print(data);
  78. Udp.endPacket();
  79. }

0x03 blinker远程点灯

手机和ESP8266按上面的教程配置好之后,就可以直接实现远程点灯。手机有网就行,ESP8266通过WiFi联网。


代码:**

  1. #define BLINKER_WIFI
  2. #include <Blinker.h>
  3. #define LED_BUILTIN 2 // IO2, D4
  4. // 修改成自己的key、ssid和pswd
  5. char auth[] = "2a09f**5a59a";
  6. char ssid[] = "Lif**ver";
  7. char pswd[] = "000**000";
  8. // 新建组件对象
  9. BlinkerButton Button1("btn-abc");
  10. BlinkerNumber Number1("num-abc");
  11. BlinkerText Text1("tex-ltw");
  12. int counter = 0;
  13. // 按下按键即会执行该函数
  14. void button1_callback(const String & state)
  15. {
  16. BLINKER_LOG("get button state: ", state);
  17. digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
  18. if(digitalRead(LED_BUILTIN)){
  19. Text1.print("灯已打开");
  20. }else{
  21. Text1.print("灯已关闭");
  22. }
  23. }
  24. // 如果未绑定的组件被触发,则会执行其中内容
  25. void dataRead(const String & data)
  26. {
  27. BLINKER_LOG("Blinker readString: ", data);
  28. counter++;
  29. Number1.print(counter);
  30. }
  31. void setup()
  32. {
  33. // 初始化串口
  34. Serial.begin(115200);
  35. BLINKER_DEBUG.stream(Serial);
  36. BLINKER_DEBUG.debugAll();
  37. // 初始化有LED的IO
  38. pinMode(LED_BUILTIN, OUTPUT);
  39. digitalWrite(LED_BUILTIN, LOW);
  40. Text1.print("灯已关闭");
  41. // 初始化blinker
  42. Blinker.begin(auth, ssid, pswd);
  43. Blinker.attachData(dataRead);
  44. Button1.attach(button1_callback);
  45. }
  46. void loop() {
  47. Blinker.run();
  48. }

直接使用blinker给的示例即可,修修改改就可以了~~~

效果图:
B14FBCC7C42884BC6E84FA750F142E33.jpg