esp8266网页配置wifi 及Blinker秘钥,实现远程开灯-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15440|回复: 64

[分享] esp8266网页配置wifi 及Blinker秘钥,实现远程开灯

[复制链接]
发表于 2021-8-2 12:14 | 显示全部楼层 |阅读模式
经过一段时间的学习借鉴,写了一段可以web配网,配Blinker秘钥的程序,借鉴很多大佬,从零开始一步一步慢慢琢磨,还有很多不完善的还希望大家多多指正!
首先要感谢以下大佬,程序主要借鉴他们的程序,稍加改动,从中学到很多
远程点灯的教程已经有很多,但是每个设备烧些之前都要改一下blinker的秘钥很麻烦,通过本程序就可以统一烧录,web配置秘钥,省掉很多麻烦。

==================感谢以下大佬的教程及代码=========================
csdn // perseverance52 //  至强ESP8266Web配网,利用FS闪存文件系统+EEPROM双重记录配网信息和其他相关参数设定
太极创客 // http://www.taichi-maker.com/   //物联网零基础教程
点灯科技 //  https://www.diandeng.tech/home
单片机菜鸟 // 深入学习 esp8266 wifimanager源码解析(打造专属自己的web配网)
哔哩哔哩  //提供学习平台
阳阳学编程 //https://www.feiyangkeji.com/

代码开源,希望大家多指正,提供宝贵意见,共同研究学习
===========================================================

==============================
需要用到的材料有以下
esp8266-esp01
继电器
烧写器
220变5伏变压器
2.jpg
================================
连接图
1.jpg
===============================

代码如下,我已经打包,代码单独不能运行,缺少data文件,我一并打包上传 Web配网,配秘钥.rar (616.96 KB, 下载次数: 628)

=============================代码有多余的参数并未删除,不影响执行===================================
  1. #include <ESP8266WiFi.h>
  2. #define BLINKER_ALIGENIE_LIGHT //天猫精灵
  3. #define BLINKER_MIOT_LIGHT   //设置小爱同学控制为语音控制灯设备
  4. #define BLINKER_DUEROS_LIGHT //设置小度灯类库
  5. #define BLINKER_WIFI      //blinker库不调用该库可能出现编译失败问题
  6. #define BLINKER_MQTT    //blinker库不调用该库可能出现app不上线问题
  7. #include <ESP8266WebServer.h>
  8. #include <FS.h> //闪存文件系统
  9. #include <ArduinoJson.h>//json数据处理库(第三方)
  10. #include <Blinker.h>

  11. String ssid, password, location0, apikey0;//定义blinker用到的参数
  12. int pinRelay = 0;  //定义输出端口号 IO0号端口


  13. BlinkerButton Button1("btn-abc");//在点灯科技app里面新建一个开关按钮 名字命名为btn-abc
  14. BlinkerNumber Number1("num-abc");//在点灯科技app里面新建一个开关按钮 名字命名为num-abc 显示文本1:信号强度  单位:db

  15. ESP8266WebServer server(80); //创建Web服务端口为80
  16. IPAddress apIP(192, 168, 4, 1);//esp8266-AP-IP地址


  17. void setup() {
  18.   pinMode(pinRelay, OUTPUT);
  19.   pinMode(LED_BUILTIN, OUTPUT);
  20.   digitalWrite(pinRelay, HIGH);
  21.   digitalWrite(LED_BUILTIN, LOW);
  22.   Serial.begin(115200);
  23.   BLINKER_DEBUG.stream(Serial);//blinker的调试状态回显
  24.   BLINKER_DEBUG.debugAll();
  25.   peiwang();
  26.   Blinker.attachHeartbeat(heartbeat);//心跳包
  27.   Button1.attach(button1_callback); //绑定按键执行回调函数
  28.   BlinkerDuerOS.attachPowerState(duerPowerState); //小度语音操作注册函数
  29.   BlinkerMIOT.attachPowerState(miotPowerState); //小爱语音操作注册函数
  30.   BlinkerAliGenie.attachPowerState(aligeniePowerState);//天猫语音操作注册函数
  31. }



  32. void peiwang() {

  33.   if (SPIFFS.begin()) {   // 打开闪存文件系统
  34.     Serial.println("");
  35.     Serial.println("闪存文件系统打开成功");
  36.   }
  37.   else {
  38.     Serial.println("");
  39.     Serial.println("闪存文件系统打开失败");
  40.   }

  41.   if (SPIFFS.exists("/config.json"))     // exists 判断有没有config.json这个文件
  42.   {
  43.     Serial.println("存在配置信息,正在自动连接");

  44.     const size_t capacity = JSON_OBJECT_SIZE(1) + JSON_OBJECT_SIZE(2) + 156; //分配一个内存空间
  45.     DynamicJsonDocument doc(capacity);// 声明json处理对象

  46.     File configJson = SPIFFS.open("/config.json", "r");
  47.     deserializeJson(doc, configJson); // json数据序列化
  48.     const char* ssid = doc["ssid"];            Serial.println(ssid);
  49.     const char* password = doc["password"];    Serial.println(password);
  50.     const char* location = doc["location0"];   Serial.println(location);
  51.     const char* apikey = doc["apikey0"];       Serial.println(apikey);

  52.     WiFi.mode(WIFI_STA); // 更换wifi模式      //WiFi.mode(WIFI_AP_STA);//设置模式为AP+STA
  53.     Serial.println("开始联网!");
  54.     Blinker.begin(location, ssid, password);
  55.     int s = 1;
  56.     while (!Blinker.connect()) {
  57.       digitalWrite(LED_BUILTIN, HIGH);
  58.       delay(500);
  59.       digitalWrite(LED_BUILTIN, LOW);
  60.       delay(500);
  61.       Serial.println(s++);
  62.       if (s > 10) {
  63.         Serial.println("联网失败!重新配网");
  64.         peiwang1();
  65.         removeConfig();
  66.         break;
  67.       }
  68.     }
  69.     if (Blinker.connect() == 1) {
  70.       Serial.println("联网成功!");
  71.       digitalWrite(LED_BUILTIN, LOW);
  72.       Serial.println("获取的IP地址:");
  73.       Serial.println(WiFi.localIP());
  74.       configJson.close();//关闭缓存
  75.     }
  76.   }
  77.   else {
  78.     Serial.println("不存在配置信息,正在打开web配网模式");
  79.     peiwang1();
  80.   }
  81. }

  82. void peiwang1() {
  83.   WiFi.mode(WIFI_AP);
  84.   WiFi.softAP("智能开关配网"); //这里是配网模式下热点的名字和密码,热点配网。
  85.   Serial.println(WiFi.softAPIP());
  86.   server.on("/", handleRoot);//web首页监听
  87.   server.on("/set", handleConnect); // 配置ssid密码监听,感觉跟express的路由好像
  88.   server.begin();
  89. }

  90. void loop() {
  91.   server.handleClient();
  92.   KeySwitch();
  93.   Blinker.run();
  94. }

  95. void handleRoot() { //展示网页的关键代码
  96.   if (SPIFFS.exists("/index.html")) {//先判断文件系统中是否有文件
  97.     File index = SPIFFS.open("/index.html", "r");//打开文件
  98.     Serial.println("发现网页!");
  99.     server.streamFile(index, "text/html");//发送响应信息
  100.     index.close();
  101.   } else {
  102.     Serial.println("网页不存在!");
  103.   }
  104. }

  105. void handleConnect() { //处理配置信息的函数
  106.   ssid = server.arg("ssid");   //arg是获取请求参数
  107.   password = server.arg("password");
  108.   location0 = server.arg("location"); //从JavaScript发送的数据中找laction的值
  109.   apikey0 = server.arg("apikey"); //从JavaScript发送的数据中找apikey的值
  110.   server.send(200, "text/html", "<meta charset='UTF-8'>保存成功");
  111.   delay(500);//等待保存成功回显时间
  112.   Blinker.begin(location0.c_str(), ssid.c_str(), password.c_str());
  113.   int a = 0;
  114.   while (!Blinker.connect()) {
  115.     digitalWrite(LED_BUILTIN, HIGH);
  116.     delay(500);
  117.     digitalWrite(LED_BUILTIN, LOW);
  118.     delay(500);
  119.     Serial.println(a++);
  120.     Blinker.run();
  121.     if (a > 20) {
  122.       Serial.println("重启esp8266配网!");
  123.       delay(50);
  124.       ESP.restart();
  125.     }
  126.   }
  127.   Serial.println("联网成功!");
  128.   digitalWrite(LED_BUILTIN, LOW);
  129.   Serial.println("获取的IP地址:");
  130.   Serial.println(WiFi.localIP());
  131.   removeConfig(); // 不管有没有配置先删除一次再说。
  132.   String payload; // 拼接构造一段字符串形式的json数据长{"ssid":"xxxxx","password":"xxxxxxxxxxx","location0":"xxxx","apikey0":"xxxx"}
  133.   payload += "{"ssid":"";
  134.   payload += ssid;
  135.   payload += "","password":"";
  136.   payload += password;
  137.   payload += "","location0":"";
  138.   payload += location0;
  139.   payload += "","apikey0":"";
  140.   payload += apikey0;
  141.   payload += ""}";
  142.   File wifiConfig = SPIFFS.open("/config.json", "w");
  143.   wifiConfig.println(payload);//将数据写入config.json文件中
  144.   Serial.println("配置文件写入成功!");
  145.   wifiConfig.close();
  146. }


  147. void removeConfig() {  //移除缓存中配置信息文件
  148.   if (SPIFFS.exists("/config.json")) { // 判断有没有config.json这个文件
  149.     if (SPIFFS.remove("/config.json")) {
  150.       Serial.println("删除旧配置");
  151.     }
  152.     else {
  153.       Serial.println("删除旧配置失败");
  154.     }
  155.   }
  156. }


  157. void KeySwitch()     //机械开关动作判断
  158. {
  159.   delay(500);
  160.   static bool is_btn = digitalRead(LED_BUILTIN);//按钮的标志位,用来逻辑处理对比,判断按钮有没有改变状态
  161.   bool is = digitalRead(LED_BUILTIN);   //按钮状态
  162.   if ( is != is_btn)
  163.   {
  164.     bool is_led = digitalRead(pinRelay);

  165.     digitalWrite(pinRelay, !digitalRead(pinRelay));
  166.     if (is_led == 0)
  167.     {
  168.       button1_callback(BLINKER_CMD_OFF);
  169.     }
  170.     else
  171.     {
  172.       button1_callback(BLINKER_CMD_ON);
  173.     }
  174.     is_btn = digitalRead(LED_BUILTIN);  //更新按钮状态
  175.   }   
  176. }

  177. // 按下按键即会执行该函数
  178. void button1_callback(const String & state) //按钮回调函数
  179. {
  180.   BLINKER_LOG("get button state:", state); //获取按钮状态 写进字符串
  181.   if (state == "on")                      //如果按钮状态为开
  182.   {
  183.     digitalWrite(pinRelay, LOW);         //继电器给低电平
  184.     // 反馈开关状态
  185.     kaideng();
  186.   }
  187.   else if (state == "off")               //如果按钮状态为关
  188.   {
  189.     // 反馈开关状态
  190.     digitalWrite(pinRelay, HIGH);       //继电器给高电平
  191.     guandeng();
  192.   }
  193. }


  194. void kaideng() {
  195.   Button1.print("on");       //把按钮状态更改为开
  196.   Button1.icon("fas fa-lightbulb");
  197.   Button1.color("#000000");
  198.   Button1.text("已经关灯");
  199.   Number1.print(100-abs(WiFi.RSSI()));  //信号强度
  200. }


  201. void guandeng() {
  202.   Button1.print("off");               //把按钮状态更改为关
  203.   Button1.icon("fas fa-lightbulb");
  204.   Button1.color("#fddb00");
  205.   Button1.text("已经开灯");
  206.   Number1.print(100-abs(WiFi.RSSI()));  //信号强度
  207. }

  208. void heartbeat()  //心跳包
  209. {
  210.   Button1.icon("fas fa-lightbulb");
  211.   Number1.print(100-abs(WiFi.RSSI()));  //信号强度
  212. }
  213. //天猫精灵
  214. void aligeniePowerState(const String & state)
  215. {
  216.   BLINKER_LOG("need set power state: ", state);
  217.   if (state == BLINKER_CMD_ON)
  218.   {
  219.     digitalWrite(pinRelay, LOW);
  220.     BlinkerAliGenie.powerState("off");
  221.     BlinkerAliGenie.print();
  222.     kaideng();
  223.   }
  224.   else if (state == BLINKER_CMD_OFF) {
  225.     digitalWrite(pinRelay, HIGH);
  226.     BlinkerAliGenie.powerState("off");
  227.     BlinkerAliGenie.print();
  228.     guandeng();
  229.   }
  230. }

  231. //小爱电源类回调
  232. void miotPowerState(const String & state)
  233. {
  234.   BLINKER_LOG("need set power state: ", state);
  235.   if (state == BLINKER_CMD_ON) {
  236.     BlinkerMIOT.powerState("on");
  237.     BlinkerMIOT.print();
  238.     kaideng();

  239.   }
  240.   else if (state == BLINKER_CMD_OFF) {
  241.     BlinkerMIOT.powerState("off");
  242.     BlinkerMIOT.print();
  243.     guandeng();

  244.   }
  245. }


  246. //小度电源类回调
  247. void duerPowerState(const String & state)
  248. {
  249.   BLINKER_LOG("need set power state: ", state);

  250.   if (state == BLINKER_CMD_ON) {
  251.     BlinkerDuerOS.powerState("on");
  252.     BlinkerDuerOS.print();
  253.     kaideng();
  254.   }
  255.   else if (state == BLINKER_CMD_OFF) {
  256.     BlinkerDuerOS.powerState("off");
  257.     BlinkerDuerOS.print();
  258.     guandeng();
  259.   }
  260. }



复制代码


发表于 2021-9-3 21:43 | 显示全部楼层
  1. #include <ESP8266WiFi.h>
  2. #define BLINKER_ALIGENIE_LIGHT //天猫精灵
  3. #define BLINKER_MIOT_LIGHT   //设置小爱同学控制为语音控制灯设备//kaiguan
  4. #define BLINKER_DUEROS_LIGHT //设置小度灯类库
  5. #define BLINKER_WIFI
  6. #define BLINKER_MQTT
  7. #include <ESP8266WebServer.h>
  8. #include <FS.h> //闪存文件系统
  9. #include <ArduinoJson.h>//json数据处理库(第三方)
  10. #include <Blinker.h>

  11. char auth[] = "22222222";
  12. char ssid1[] = "2222222";//你家的WiFi名字
  13. char pswd[] = "22222222";//你家WiFi的密码
  14. String ssid, password, location0, apikey0;//定义blinker用到的参数
  15. int pinRelay = 0;  //定义输出端口号 IO0号端口


  16. BlinkerButton Button1("btn-abc");//在点灯科技app里面新建一个开关按钮 名字命名为btn-abc
  17. BlinkerButton Button2("btn-abd");
  18. BlinkerNumber Number1("num-abc");//在点灯科技app里面新建一个开关按钮 名字命名为num-abc 显示文本1:信号强度  单位:db

  19. ESP8266WebServer server(80); //创建Web服务端口为80
  20. IPAddress apIP(192, 168, 4, 1);//esp8266-AP-IP地址


  21. void setup() {
  22.   pinMode(pinRelay, OUTPUT); //设置pinRelay脚为输出状态
  23.   pinMode(LED_BUILTIN, OUTPUT);//设置Led_Builtin为输出状态
  24.   digitalWrite(pinRelay, HIGH);/*输出HIGH电平,继电器模块闭合*/
  25.   digitalWrite(LED_BUILTIN, LOW);//设置Led_Builtin为低电平
  26.   Serial.begin(115200);
  27.   BLINKER_DEBUG.stream(Serial);//blinker的调试状态回显
  28.   BLINKER_DEBUG.debugAll();
  29.   peiwang();
  30.   //Blinker.begin(auth, ssid1, pswd);
  31.   Blinker.attachHeartbeat(heartbeat);//心跳包
  32.   Button1.attach(button1_callback); //绑定按键执行回调函数
  33.   Button2.attach(button2_callback);
  34.   BlinkerDuerOS.attachPowerState(duerPowerState); //小度语音操作注册函数
  35.   BlinkerMIOT.attachPowerState(miotPowerState); //小爱语音操作注册函数
  36.   BlinkerAliGenie.attachPowerState(aligeniePowerState);//天猫语音操作注册函数
  37.   button1_callback(BLINKER_CMD_OFF);
  38. }



  39. void peiwang() {

  40.   if (SPIFFS.begin()) {   // 打开闪存文件系统
  41.     Serial.println("");
  42.     Serial.println("闪存文件系统打开成功");
  43.   }
  44.   else {
  45.     Serial.println("");
  46.     Serial.println("闪存文件系统打开失败");
  47.   }

  48.   if (SPIFFS.exists("/config.json"))     // exists 判断有没有config.json这个文件
  49.   {
  50.     Serial.println("存在配置信息,正在自动连接");

  51.     const size_t capacity = JSON_OBJECT_SIZE(1) + JSON_OBJECT_SIZE(2) + 156; //分配一个内存空间
  52.     DynamicJsonDocument doc(capacity);// 声明json处理对象

  53.     File configJson = SPIFFS.open("/config.json", "r");
  54.     deserializeJson(doc, configJson); // json数据序列化
  55.     const char* ssid = doc["ssid"];            Serial.println(ssid);
  56.     const char* password = doc["password"];    Serial.println(password);
  57.     const char* location = doc["location0"];   Serial.println(location);
  58.     const char* apikey = doc["apikey0"];       Serial.println(apikey);

  59.     WiFi.mode(WIFI_STA); // 更换wifi模式      //WiFi.mode(WIFI_AP_STA);//设置模式为AP+STA
  60.     Serial.println("开始联网!");
  61.     Blinker.begin(auth, ssid, password);
  62.     //Blinker.begin(auth, ssid1, pswd);
  63.     int s = 1;
  64.     while (!Blinker.connect()) {
  65.       digitalWrite(LED_BUILTIN, HIGH);
  66.       delay(500);
  67.       digitalWrite(LED_BUILTIN, LOW);
  68.       delay(500);
  69.       Serial.println(s++);
  70.       if (s > 10) {
  71.         Serial.println("联网失败!重新配网");
  72.         peiwang1();
  73.         removeConfig();
  74.         break;
  75.       }
  76.     }
  77.     if (Blinker.connect() == 1) {
  78.       Serial.println("联网成功!");
  79.       digitalWrite(LED_BUILTIN, LOW);
  80.       Serial.println("获取的IP地址:");
  81.       Serial.println(WiFi.localIP());
  82.       configJson.close();//关闭缓存
  83.     }
  84.   }
  85.   else {
  86.     Serial.println("不存在配置信息,正在打开web配网模式");
  87.     peiwang1();
  88.   }
  89. }

  90. void peiwang1() {
  91.   WiFi.mode(WIFI_AP);
  92.   WiFi.softAP("智能开关配网"); //这里是配网模式下热点的名字和密码,热点配网。
  93.   Serial.println(WiFi.softAPIP());
  94.   server.on("/", handleRoot);//web首页监听
  95.   server.on("/set", handleConnect); // 配置ssid密码监听,感觉跟express的路由好像
  96.   server.begin();
  97. }

  98. void loop() {
  99.   server.handleClient();
  100.   KeySwitch();
  101.   Blinker.run();
  102. }

  103. void handleRoot() { //展示网页的关键代码
  104.   if (SPIFFS.exists("/index.html")) {//先判断文件系统中是否有文件
  105.     File index = SPIFFS.open("/index.html", "r");//打开文件
  106.     Serial.println("发现网页!");
  107.     server.streamFile(index, "text/html");//发送响应信息
  108.     index.close();
  109.   } else {
  110.     Serial.println("网页不存在!");
  111.   }
  112. }

  113. void handleConnect() { //处理配置信息的函数
  114.   ssid = server.arg("ssid");   //arg是获取请求参数
  115.   password = server.arg("password");
  116.   location0 = server.arg("location"); //从JavaScript发送的数据中找laction的值
  117.   apikey0 = server.arg("apikey"); //从JavaScript发送的数据中找apikey的值
  118.   server.send(200, "text/html", "<meta charset='UTF-8'>保存成功");
  119.   delay(500);//等待保存成功回显时间
  120.   //Blinker.begin(location0.c_str(), ssid.c_str(), password.c_str());
  121.   Blinker.begin(auth, ssid.c_str(), password.c_str());
  122.   int a = 0;
  123.   while (!Blinker.connect()) {
  124.     digitalWrite(LED_BUILTIN, HIGH);
  125.     Blinker.delay(500);
  126.     digitalWrite(LED_BUILTIN, LOW);
  127.     Blinker.delay(500);
  128.     Serial.println(a++);
  129.     Blinker.run();
  130.     if (a > 20) {
  131.       Serial.println("重启esp8266配网!");
  132.       delay(50);
  133.       ESP.restart();
  134.     }
  135.   }
  136.   Serial.println("联网成功!");
  137.   digitalWrite(LED_BUILTIN, LOW);
  138.   Serial.println("获取的IP地址:");
  139.   Serial.println(WiFi.localIP());
  140.   removeConfig(); // 不管有没有配置先删除一次再说。
  141.   String payload; // 拼接构造一段字符串形式的json数据长{"ssid":"xxxxx","password":"xxxxxxxxxxx","location0":"xxxx","apikey0":"xxxx"}
  142.   payload += "{"ssid":"";
  143.   payload += ssid;
  144.   payload += "","password":"";
  145.   payload += password;
  146.   payload += "","location0":"";
  147.   payload += location0;
  148.   payload += "","apikey0":"";
  149.   payload += apikey0;
  150.   payload += ""}";
  151.   File wifiConfig = SPIFFS.open("/config.json", "w");
  152.   wifiConfig.println(payload);//将数据写入config.json文件中
  153.   Serial.println("配置文件写入成功!");
  154.   wifiConfig.close();
  155. }


  156. void removeConfig() {  //移除缓存中配置信息文件
  157.   if (SPIFFS.exists("/config.json")) { // 判断有没有config.json这个文件
  158.     if (SPIFFS.remove("/config.json")) {
  159.       Serial.println("删除旧配置");
  160.     }
  161.     else {
  162.       Serial.println("删除旧配置失败");
  163.     }
  164.   }
  165. }


  166. void KeySwitch()     //机械开关动作判断
  167. {
  168.   //Blinker.delay(500);
  169.   static bool is_btn = digitalRead(LED_BUILTIN);//按钮的标志位,用来逻辑处理对比,判断按钮有没有改变状态
  170.   bool is = digitalRead(LED_BUILTIN);   //按钮状态
  171.   if ( is != is_btn)
  172.   {
  173.     bool is_led = digitalRead(pinRelay);

  174.     digitalWrite(pinRelay, !digitalRead(pinRelay));
  175.     if (is_led == 0)
  176.     {
  177.       button1_callback(BLINKER_CMD_OFF);
  178.     }
  179.     else
  180.     {
  181.       button1_callback(BLINKER_CMD_ON);
  182.     }
  183.     is_btn = digitalRead(LED_BUILTIN);  //更新按钮状态
  184.   }
  185.   }

  186. // 按下按键即会执行该函数
  187. void button1_callback(const String & state) //按钮回调函数
  188. {
  189.   BLINKER_LOG("get button state:", state); //获取按钮状态
  190.   //digitalWrite(pinRelay, !digitalRead(pinRelay));
  191.   
  192.   if (state == BLINKER_CMD_ON)                      //如果按钮状态为开
  193.   {
  194.     digitalWrite(pinRelay, LOW);         //低电平,继电器吸合
  195.     kaideng();
  196.    
  197.     //开灯
  198.   }
  199.   else if (state == BLINKER_CMD_OFF)               //如果按钮状态为关
  200.   {
  201.     // 反馈开关状态
  202.     digitalWrite(pinRelay, HIGH);       //高电平,继电器断开
  203.     guandeng();
  204.      //关灯
  205.   }
  206.   
  207.   Blinker.delay(20);
  208.   Blinker.vibrate();
  209. }

  210. // 按下按键即会重新配网
  211. void button2_callback(const String & state) //按钮回调函数
  212. {
  213.     Serial.println("重启esp8266配网!");
  214.     removeConfig();
  215.     peiwang();

  216. }

  217. void kaideng() {

  218.   
  219.   Button1.icon("fas fa-lightbulb");
  220.   Button1.color("#fddb00");
  221.   Button1.text("已经开灯");
  222.   Button1.print("on");       //把按钮状态更改为开
  223.   Number1.print(100 - abs(WiFi.RSSI())); //信号强度
  224. }


  225. void guandeng() {
  226.   
  227.   Button1.icon("fas fa-lightbulb");
  228.   Button1.color("#000000");
  229.   Button1.text("已经关灯");
  230.   Button1.print("off");               //把按钮状态更改为关
  231.   Number1.print(100 - abs(WiFi.RSSI())); //信号强度
  232. }

  233. void heartbeat()  //心跳包
  234. {
  235.   
  236.   if (digitalRead(pinRelay) == HIGH)
  237.   {
  238.    
  239.     Button1.icon("fas fa-lightbulb");
  240.     Button1.color("#000000");
  241.     Button1.text("已经关灯");
  242.     Button1.print("off");       //把按钮状态更改为关

  243.   }
  244.   else if (digitalRead(pinRelay) == LOW)
  245.   {
  246.    
  247.     Button1.icon("fas fa-lightbulb");
  248.     Button1.color("#fddb00");
  249.     Button1.text("已经开灯");
  250.     Button1.print("on");               //把按钮状态更改为开
  251.   }
  252.   
  253.   //Button1.icon("fas fa-lightbulb");
  254.   Number1.print(100 - abs(WiFi.RSSI())); //信号强度
  255. }
  256. //天猫精灵
  257. void aligeniePowerState(const String & state)
  258. {
  259.   BLINKER_LOG("need set power state: ", state);
  260.   if (state == BLINKER_CMD_ON)
  261.   {
  262.     digitalWrite(pinRelay, LOW);
  263.     BlinkerAliGenie.powerState("off");
  264.     BlinkerAliGenie.print();
  265.     kaideng();
  266.   }
  267.   else if (state == BLINKER_CMD_OFF) {
  268.     digitalWrite(pinRelay, HIGH);
  269.     BlinkerAliGenie.powerState("off");
  270.     BlinkerAliGenie.print();
  271.     guandeng();
  272.   }
  273. }

  274. //小爱电源类回调
  275. void miotPowerState(const String & state)
  276. {
  277.   BLINKER_LOG("need set power state: ", state);
  278.   if (state == BLINKER_CMD_ON) {
  279.     digitalWrite(pinRelay, LOW);
  280.     BlinkerMIOT.powerState("on");
  281.     BlinkerMIOT.print();
  282.     kaideng();

  283.   }
  284.   else if (state == BLINKER_CMD_OFF) {
  285.     digitalWrite(pinRelay, HIGH);
  286.     BlinkerMIOT.powerState("off");
  287.     BlinkerMIOT.print();
  288.     guandeng();

  289.   }
  290. }


  291. //小度电源类回调
  292. void duerPowerState(const String & state)
  293. {
  294.   BLINKER_LOG("need set power state: ", state);

  295.   if (state == BLINKER_CMD_ON) {
  296.     BlinkerDuerOS.powerState("on");
  297.     BlinkerDuerOS.print();
  298.     kaideng();
  299.   }
  300.   else if (state == BLINKER_CMD_OFF) {
  301.     BlinkerDuerOS.powerState("off");
  302.     BlinkerDuerOS.print();
  303.     guandeng();
  304.   }
  305. }
复制代码


发表于 2021-8-3 02:35 来自手机 | 显示全部楼层
6666666666
 楼主| 发表于 2021-8-3 13:19 | 显示全部楼层
loop循环中调用的delay函数这一句需要注释掉,忘记注释了,需要的非系统自带的库可以去太极创客网站看一下他们的视频教程,有很多是有教程的
发表于 2021-8-3 15:13 | 显示全部楼层
这个是不是得要注册和风气象的账号才能活动apikey?不写这key能不能联网? 连这个是为了可以远程控制开关么?
 楼主| 发表于 2021-8-3 16:12 来自手机 | 显示全部楼层
代码中我把和风的那个改成blinker密钥了,还有一个apikey没有用到,配网的时候空着就可以,考虑后期还要开发天气,所以就保留了
发表于 2021-8-7 21:07 | 显示全部楼层
大佬 我想要这个上电启动的功能  应该怎么修改比较好  
 楼主| 发表于 2021-8-8 20:10 | 显示全部楼层
blinker默认的吧?上电自动连接
发表于 2021-8-9 00:06 | 显示全部楼层
折腾了一天了。示例都可以使用 论坛上复制的代码和你这个打包的代码就是一直错误
Arduino:1.8.15 (Windows 10), 开发板:"Generic ESP8266 Module, 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, dtr (aka nodemcu), 26 MHz, 40MHz, DOUT (compatible), 1MB (FS:64KB OTA:~470KB), 2, nonos-sdk 2.2.1+100 (190703), v2 Lower Memory, Disabled, None, Only Sketch, 115200"
webconfig:9:10: fatal error: ArduinoJson.h: No such file or directory

    9 | #include <ArduinoJson.h>//json数据处理库(第三方)

      |          ^~~~~~~~~~~~~~~

compilation terminated.

exit status 1
ArduinoJson.h: No such file or directory
在文件 -> 首选项开启
“编译过程中显示详细输出”选项
这份报告会包含更多信息。
 楼主| 发表于 2021-8-9 09:08 | 显示全部楼层
需要json库  第三方的库  下载加压到Arduino\libraries目录里
 楼主| 发表于 2021-8-9 21:44 | 显示全部楼层
普通的单开物理开关可以接上,按照图片上的接线方法,既可以物理开关打开关闭,同时也可以手机app开关,小爱同学代码有点问题,测试发现不能控制,目前测试天猫精灵没有问题,后期研究下代码.改好了再发,增加一个电动开关控制方式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 01:56 , Processed in 0.252273 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表