esp8266通过WEB配置点灯科技秘钥-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7083|回复: 8

esp8266通过WEB配置点灯科技秘钥

[复制链接]
发表于 2020-4-2 17:23 | 显示全部楼层 |阅读模式
本帖最后由 xue886 于 2020-4-2 20:05 编辑

如题esp8266通过WEB配置点灯科技秘钥怎么保存下来,不能断电一次就重新配置一次呀。
看了flash但是没搞明白,希望有大神能够把具有此功能的具体代码写出来!谢谢!下面b站up:小年轻只爱他  写的用web进行配置无线网账号密码的。请大神大佬来看看加点什么可以配置密钥而且断电后不用重新配置。
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

#ifndef STASSID
#define STASSID "qwer"
#define STAPSK  "asdfghjkl"
#endif

const char* ssid = STASSID;
const char* password = STAPSK;

ESP8266WebServer server(80);
bool LED_Flag = false;
String str =
"<!DOCTYPE html><html><head><meta charset=\"UTF-8\"><meta name=\"viewport\"content=\"width=device-width, initial-scale=1.0\"><meta http-equiv=\"X-UA-Compatible\"content=\"ie=edge\"><title>不知名up的ESP8266网页配网</title></head><body><form name=\"my\">WiFi名称:<input type=\"text\"name=\"s\"placeholder=\"请输入您WiFi的名称\"id=\"aa\"><br>WiFi密码:<input type=\"text\"name=\"p\"placeholder=\"请输入您WiFi的密码\"id=\"bb\"><br><input type=\"button\"value=\"连接\"onclick=\"wifi()\"></form><script language=\"javascript\">function wifi(){var ssid=my.s.value;var password=bb.value;var xmlhttp=new XMLHttpRequest();xmlhttp.open(\"GET\",\"/HandleVal?ssid=\"+ssid+\"&password=\"+password,true);xmlhttp.send()}</script></body></html>";
/*****************************************************
* 函数名称:handleRoot()
* 函数说明:客户端请求回调函数
* 参数说明:无
******************************************************/
void handleRoot() {
  server.send(200, "text/html", str);
}
/*****************************************************
* 函数名称:HandleVal()
* 函数说明:对客户端请求返回值处理
* 参数说明:无
******************************************************/
void HandleVal()
{
    String wifis = server.arg("ssid"); //从JavaScript发送的数据中找ssid的值
    String wifip = server.arg("password"); //从JavaScript发送的数据中找password的值
    Serial.println(wifis); Serial.println(wifip);
    WiFi.begin(wifis,wifip);
}
/*****************************************************
* 函数名称:handleNotFound()
* 函数说明:响应失败函数
* 参数说明:无
******************************************************/
void handleNotFound() {
  digitalWrite(LED_BUILTIN, 0);
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i = 0; i < server.args(); i++) {
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
  digitalWrite(LED_BUILTIN, 1);
}
/*****************************************************
* 函数名称:autoConfig()
* 函数说明:自动连接WiFi函数
* 参数说明:无
* 返回值说明:true:连接成功 false:连接失败
******************************************************/
bool autoConfig()
{
  WiFi.mode(WIFI_STA);
  WiFi.begin();
  Serial.print("AutoConfig Waiting......");
  for (int i = 0; i < 20; i++)
  {
    if (WiFi.status() == WL_CONNECTED)
    {
      Serial.println("AutoConfig Success");
      Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
      Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
      WiFi.printDiag(Serial);
      return true;
      //break;
    }
    else
    {
      Serial.print(".");
      LED_Flag = !LED_Flag;
      if(LED_Flag)
          digitalWrite(LED_BUILTIN, HIGH);
      else
          digitalWrite(LED_BUILTIN, LOW);
      delay(500);
    }
  }
  Serial.println("AutoConfig Faild!" );
  return false;
  //WiFi.printDiag(Serial);
}
/*****************************************************
* 函数名称:htmlConfig()
* 函数说明:web配置WiFi函数
* 参数说明:无
******************************************************/
void htmlConfig()
{
    WiFi.mode(WIFI_AP_STA);//设置模式为AP+STA
    digitalWrite(LED_BUILTIN, LOW);
    WiFi.softAP(ssid, password);
    Serial.println("AP设置完成");

    IPAddress myIP = WiFi.softAPIP();
    Serial.print("AP IP address: ");
    Serial.println(myIP);

    if (MDNS.begin("esp8266")) {
      Serial.println("MDNS responder started");
    }

    server.on("/", handleRoot);
    server.on("/HandleVal", HTTP_GET, HandleVal);
    server.onNotFound(handleNotFound);//请求失败回调函数

    server.begin();//开启服务器
    Serial.println("HTTP server started");
    while(1)
    {
        server.handleClient();
        MDNS.update();  
        if (WiFi.status() == WL_CONNECTED)
        {
            Serial.println("HtmlConfig Success");
            Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
            Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
            Serial.println("HTML连接成功");
            break;
        }
    }  
}

void setup(void) {
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, HIGH);
    Serial.begin(115200);

    bool wifiConfig = autoConfig();

    if(wifiConfig == false)
        htmlConfig();//HTML配网
}

void loop(void) {
    digitalWrite(LED_BUILTIN, HIGH);
    delay(100);
    digitalWrite(LED_BUILTIN, LOW);
    delay(100);
}



发表于 2020-4-3 09:01 | 显示全部楼层
这个就是简单的webserver的操作 好像也没有特殊的 就照着例子去调试调试了
 楼主| 发表于 2020-4-3 10:39 来自手机 | 显示全部楼层
单片机菜鸟 发表于 2020-4-3 09:01
这个就是简单的webserver的操作 好像也没有特殊的 就照着例子去调试调试了

esp8266 可以自动保存链接过的wifi账号密码,但是怎么才能让它自动保存点灯科技的密钥呀?
发表于 2020-11-21 16:54 | 显示全部楼层
楼主,你现在解决了吗
发表于 2021-3-25 10:50 | 显示全部楼层
1、先运行网页程序
2、获取WiFi参数、秘钥
3、秘钥存入EEPROM
4、Blinker初始化验证
发表于 2021-5-15 12:00 | 显示全部楼层
在void setup(void) 中,
写入Blinker.begin(auth, WiFi.SSID().c_str(), WiFi.psk().c_str());//连接上一次的wifi
auth直接就char auth=“”里边写就是了,你也可以在web上加上返回auth函数


我也还没有实现,就可以实现web配网,目前想试试强制门户,连接后自动转到配置信息界面
发表于 2021-8-12 20:20 来自手机 | 显示全部楼层
这个Wifi自动保存密码应该是Wifi自动连接的原因,就跟手机一样,连上一个Wifi后,之后都会自动连,但是密钥恐怕要写到flash中或者配置文件中吧,要实现就要搞数据库吧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-28 12:56 , Processed in 0.103410 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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