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

xiaomadema 发表于 2021-7-10 14:13

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

求助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接入时,该语句也负责保持网络连接
}



点灯官方 发表于 2021-7-12 11:01

这是您自己开发的功能,非我们提供的功能,不属于bug范畴

B站彩葫芦 发表于 2021-9-26 10:12

搞出来没,没搞出来加q1286167796

许普查 发表于 2021-9-27 17:39

:):):):):):):):):)
页: [1]
查看完整版本: 求助 web配置blinker秘钥和网络 高手给指点下 失败原因