求助 web配置blinker秘钥和网络 高手给指点下 失败原因-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2110|回复: 3

[已解答] 求助 web配置blinker秘钥和网络 高手给指点下 失败原因

[复制链接]
发表于 2021-7-10 14:13 | 显示全部楼层 |阅读模式
求助  web配置blinker秘钥和网络  高手给指点下 失败原因



#define BLINKER_WIFI
#include <Blinker.h>       //设置点灯科技类库
#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>

//初始blinker的三个参数
char sta_miyao[] = "";     //设备key,打开点灯app,添加设备,选择arduino设备,选择wifi接入,这里就会获得一个密钥,把密钥填写在这里。
char sta_ssid[] = "";      //路由器wifi ssid
char sta_password[] = "";  //路由器wifi 密码
int pinRelay = 0;

// 新建blinker.app组件对象
BlinkerButton Button1("btn-abc");//在点灯科技app里面新建一个开关按钮 名字命名为btn-abc
BlinkerNumber Number1("num-abc");

//暂时存储wifi账号密码
const char* AP_NAME = "配网WIFI";//wifi名字

//配网页面代码 放进数组指针里
const char* page_html = "\
                <!DOCTYPE html>\r\n\
                <html lang='en'>\r\n\
                <head>\r\n\
                  <meta charset='UTF-8'>\r\n\
                  <meta name='viewport' content='width=device-width, initial-scale=1.0'>\r\n\
                  <title>Document</title>\r\n\
                </head>\r\n\
                <body>\r\n\
                  <form name='input' action='/' method='POST'>\r\n\
                        wifi名称: <br>\r\n\
                        <input type='text' name='ssid'><br>\r\n\
                        wifi密码:<br>\r\n\
                        <input type='text' name='password'><br>\r\n\
                        blinker密钥:<br>\r\n\
                        <input type='text' name='miyao'><br>\r\n\
                        <input type='submit' value='保存'>\r\n\
                    </form>\r\n\
                </body>\r\n\
                </html>\r\n\
                ";
const byte DNS_PORT = 53;//DNS端口号
IPAddress apIP(192, 168, 4, 1);//esp8266-AP-IP地址
DNSServer dnsServer;//创建dnsServer实例
ESP8266WebServer server(80);//创建WebServer

//////////////////////////////从这里开始才是正式的函数////////////////////////////////////

void handleRoot() {                         //访问主页回调函数 访问主页时的函数
  server.send(200, "text/html", page_html);
}

////////////////////////////////////////////////////////////////////////////////////////
//Post回调函数
void handleRootPost() {
  Serial.println("handleRootPost");
  //判断是否有账号参数
  if (server.hasArg("ssid")) {
    Serial.print("输入无线名称:   ");
    strcpy(sta_ssid, server.arg("ssid").c_str());//将账号参数拷贝到sta_ssid中
    Serial.println(sta_ssid);
  } else {//没有参数
    Serial.println("error, not found ssid");
    server.send(200, "text/html", "<meta charset='UTF-8'>error, not found ssid");//返回错误页面
    return;
  }

  //密码与账号同理
  if (server.hasArg("password")) {
    Serial.print("输入无线密码:   ");
    strcpy(sta_password, server.arg("password").c_str());
    Serial.println(sta_password);
  } else {
    Serial.println("error, not found password");
    server.send(200, "text/html", "<meta charset='UTF-8'>error, not found password");
    return;
  }

  //密钥与账号同理
  if (server.hasArg("miyao")) {
    Serial.print("输入电灯密钥:   ");
    strcpy(sta_miyao, server.arg("miyao").c_str());
    Serial.println(sta_miyao);
  } else {
    Serial.println("error, not found miyao");
    server.send(200, "text/html", "<meta charset='UTF-8'>error, not found password");
    return;
  }
  //返回保存成功页面
  server.send(200, "text/html", "<meta charset='UTF-8'>保存成功");
  //连接wifi
  connectNewWifi();
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void initSoftAP(void) { //初始化AP模式
  WiFi.mode(WIFI_AP);
  WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
  if (WiFi.softAP(AP_NAME)) {
    Serial.println("ESP8266 SoftAP is right");
  }
}
/////////////////////////////////////////////////强制访问主页函数///////////////////////////////////////////////////////
void initWebServer(void) { //初始化WebServer
  //server.on("/",handleRoot);
  //上面那行必须以下面这种格式去写否则无法强制门户
  server.on("/", HTTP_GET, handleRoot);//设置主页回调函数
  server.onNotFound(handleRoot);//设置无法响应的http请求的回调函数
  server.on("/", HTTP_POST, handleRootPost);//设置Post请求回调函数
  server.begin();//启动WebServer
  Serial.println("WebServer started!");
}
/////////////////////////////////初始化DNS服务器////////////////////////////////////////////////////////////////////////
void initDNS(void) {
  if (dnsServer.start(DNS_PORT, "*", apIP)) { //判断将所有地址映射到esp8266的ip上是否成功
    Serial.println("start dnsserver success.");
  }
  else Serial.println("start dnsserver failed.");
}
///////////////////////////////////////////////////////////////////////////////////////////////////////

void connectNewWifi(void)
{
  Blinker.begin(sta_miyao,sta_ssid,sta_password);
  Serial.print(Blinker.connect());
  delay(5000);
  Serial.println("");
  Serial.print("正在尝试连接wifi");
  Serial.println("");
  int count = 0;
  while (Blinker.connect()==0)
  {
    Blinker.connect();
    delay(1000);
    count++;
    Serial.println(count);
    if (count > 20) { //如果10秒内没有连上,就开启Web配网 可适当调整这个时间
      initSoftAP();
      initWebServer();
      initDNS();
      break;//跳出 防止无限初始化
    }
    Serial.print(".");
  }
  Serial.println(" ");
  if (Blinker.connect())
  { //如果连接上 就输出IP信息 防止未连接上break后会误输出
    Serial.println("WIFI Connected!");
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());//打印esp8266的IP地址
    server.stop();
  }
}

void heartbeat()  //心跳包
{
  Button1.icon("fas fa-lightbulb");
  Button1.color("#fddb00");
  Button1.text("关灯", "打开啦");
  Number1.print(WiFi.RSSI());  //信号强度
}

// 按下按键即会执行该函数
void button1_callback(const String & state)  //查找日志文件 把结果写进定义的字符串state中
{
  BLINKER_LOG("get button state:", state); //获取按钮状态 写进字符串
  if (state == "on")                      //如果按钮状态为开
  {
    digitalWrite(LED_BUILTIN, LOW);      //把内置led状态设置为低电平
    digitalWrite(pinRelay, LOW);         //继电器给低电平
    // 反馈开关状态
    Button1.print("on");                //把按钮状态更改为开
  }
  else if (state == "off")               //如果按钮状态为关
  {
    digitalWrite(LED_BUILTIN, HIGH);   //把内置led状态设置为高电平
    // 反馈开关状态
    digitalWrite(pinRelay, HIGH);       //继电器给高电平
    Button1.print("off");               //把按钮状态更改为关
  }
}
void setup()
{
  Serial.begin(115200);
  WiFi.hostname("Smart-ESP8266");//设置ESP8266设备名
  pinMode(LED_BUILTIN, OUTPUT);  //LED_BUILTIN 宏就是开发板指示灯的io口 // 初始化有LED的IO
  pinMode(pinRelay, OUTPUT);     //0号端口为输出模式
  digitalWrite(LED_BUILTIN, LOW);
  digitalWrite(pinRelay, LOW);
  connectNewWifi();  // /////////////////////调用配网函数
}
void loop() {
  server.handleClient();                 //启动客户端函数
  dnsServer.processNextRequest();        //启动dns服务器函数
  Blinker.run();                        //启动blinker
  //Blinker.run()语句负责处理Blinker收到的数据,每次运行都会将设备收到的数据进行一次解析。
  //在使用WiFi接入时,该语句也负责保持网络连接
}



webpeimiyao.rar

2.97 KB, 下载次数: 27

web秘钥

发表于 2021-7-12 11:01 | 显示全部楼层
这是您自己开发的功能,非我们提供的功能,不属于bug范畴
发表于 2021-9-26 10:12 来自手机 | 显示全部楼层
搞出来没,没搞出来加q1286167796
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-28 11:44 , Processed in 0.076206 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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