AP配网web输入点灯科技密钥有大神帮忙解决一下吗-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3328|回复: 8

[过期] AP配网web输入点灯科技密钥有大神帮忙解决一下吗

[复制链接]
发表于 2021-3-24 11:37 | 显示全部楼层 |阅读模式
我看到有大神通过固件可以实现用ap模式进web配置网络也可以把点灯科技密钥输入到设备里,
有大神可以教一下吗?感激不尽。
发表于 2021-3-25 23:02 | 显示全部楼层
用  WiFiManager 库 + EEPROM库

#include <WiFiManager.h>
#include <EEPROM.h>

struct Settings {
    char auth_key[13];
} sett;

// 功能描述:设置点击保存的回调
void saveConfigCallback () {
  Serial.println("Should save config");
  shouldSaveConfig = true;
}

bool chkAuthkey(char* key, int len){
  if (len != 12) return false;
  for (int i=0;key[i]!=0;i++){
    if (!isxdigit(key[i])) return false;
  }
  return true;
}


//----------------------------------------------------------------------------------
    EEPROM.begin(1408);
    EEPROM.get<Settings>(1280, sett);

    WiFiManager wifiManager;
    WiFi.mode(WIFI_STA);
    //wifiManager.setDebugOutput(true);

    // 重置保存的修改
    if (digitalRead(GPIO_RESET) == LOW){
      Serial.println(F("WiFi resetSettings."));
      wifiManager.resetSettings();
    }
    //wifiManager.resetSettings(); //调试时打开

    wifiManager.setAPStaticIPConfig(IPAddress(192,168,10,1), IPAddress(192,168,10,1), IPAddress(255, 255, 255, 0));
     // 3分钟配网时间,如没有完成则退出配网.
     // 例如原正常连接的WIFI路由掉线死机或不通电等情况, 通过配网超时后, 会重新进行连接原WIFI信号。 避免停在配网模式下等待
    wifiManager.setConfigPortalTimeout(180);
    //wifiManager.setConnectTimeout(240);

    // 设置点击保存的回调
    wifiManager.setSaveConfigCallback(saveConfigCallback);

    WiFiManagerParameter custom_authkey("auth_key", "Authkey", sett.auth_key, 12);
    wifiManager.addParameter(&custom_authkey);

    //AP名称:ESP_AP 密码:12345678
    if(!wifiManager.autoConnect("ESP_AP","12345678")) {
        Serial.println(F("Failed to connect. Reset and try again. . ."));
        Blinker.delay(3000);
        ESP.restart();
        Blinker.delay(5000);
    }

    Serial.println(F("Connected to Wifi."));
    Serial.print(F("My IP:"));
    Serial.println(WiFi.localIP());

    // 保存自定义信息
    if (shouldSaveConfig) {
      Serial.println(F("saving config..."));
      //Serial.println(custom_authkey.getValue());
      strncpy(sett.auth_key, custom_authkey.getValue(), 12);
      sett.auth_key[12] = '\0';

      if (!chkAuthkey(sett.auth_key, strlen(sett.auth_key))){
        Serial.println(F("Authkey is wrong."));
        wifiManager.resetSettings();
        ESP.restart();
        Blinker.delay(5000);
      }

      EEPROM.put<Settings>(1280, sett);
      if (EEPROM.commit()) {
            Serial.println(F("EEPROM successfully committed"));
        } else {
            Serial.println(F("ERROR! EEPROM commit failed"));
        }
    }
    EEPROM.end();
    sett.auth_key[12] = '\0';

Blinker.begin(sett.auth_key,........................略........................);



发表于 2021-3-24 13:30 | 显示全部楼层
可以实现的,做过贝壳物联的案例
发表于 2021-3-24 14:11 | 显示全部楼层
我也想找哈,一直没找到
发表于 2021-3-24 14:12 | 显示全部楼层
fangqingyu 发表于 2021-3-24 13:30
可以实现的,做过贝壳物联的案例

方便分享一下吗
 楼主| 发表于 2021-3-24 17:41 | 显示全部楼层
fangqingyu 发表于 2021-3-24 13:30
可以实现的,做过贝壳物联的案例

点灯的可以做吗
发表于 2021-4-21 09:36 | 显示全部楼层
建议用专属设备,自动获取秘钥和设备界面不香吗
发表于 2021-5-3 13:29 | 显示全部楼层
chen70854022 发表于 2021-4-21 09:36
建议用专属设备,自动获取秘钥和设备界面不香吗

一年99 挺贵的
发表于 2021-5-20 12:24 | 显示全部楼层
本帖最后由 1195930823 于 2021-5-20 12:29 编辑

看这个你能用吗?复合配网模式加小爱控制
#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT

#include <Blinker.h>

char auth[] = "你的设备秘钥";



void smartConfig()//配网函数
{
  WiFi.mode(WIFI_STA);//使用wifi的STA模式
  Serial.println("\r\nWait for Smartconfig...");//串口打印
  WiFi.beginSmartConfig();//等待手机端发出的名称与密码
  //死循环,等待获取到wifi名称和密码
  while (1)
  {
    //等待过程中一秒打印一个.
    Serial.println("......");
    delay(1000);                                             
    if (WiFi.smartConfigDone())//获取到之后退出等待
    {
      Serial.println("SmartConfig Success");
      //打印获取到的wifi名称和密码
      Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
      Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
      break;
    }
  }
}

BlinkerButton Button1("btn-abc");
BlinkerNumber Number1("num-abc");

int counter = 0;
int count=0;
bool WIFI_Status = true;

// 按下按键即会执行该函数
void button1_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);




    digitalWrite(LED_BUILTIN,LOW );
    Blinker.delay(500);
    digitalWrite(LED_BUILTIN,HIGH );

}

// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);
    counter++;
    Number1.print(counter);
}

void WIFI_Init()
{
    Serial.println("\r\n正在连接");
    //当设备没有联网的情况下,执行下面的操作
    while(WiFi.status()!=WL_CONNECTED)
    {
        if(WIFI_Status)//WIFI_Status为真,尝试使用flash里面的信息去 连接路由器
        {
            Serial.print(".");
            delay(1000);                                       
            count++;
            if(count>=5)
            {
                WIFI_Status = false;
                Serial.println("WiFi连接失败,请用手机进行配网");
            }
        }
        else//使用flash中的信息去连接wifi失败,执行
        {
            smartConfig();  //smartConfig技术配网
        }
     }  
     //串口打印连接成功的IP地址
     Serial.println("连接成功");  
     Serial.print("IP:");
     Serial.println(WiFi.localIP());
}

void miotPowerState(const String & state)//当小爱同学向设备发起控制, 设备端需要有对应控制处理函数

//BlinkerMIOT.attachPowerState()
//用户自定义电源类操作的回调函数:
{
    BLINKER_LOG("need set power state: ", state);

    if (state == BLINKER_CMD_ON) {
        digitalWrite(LED_BUILTIN, LOW);

        BlinkerMIOT.powerState("on");
        BlinkerMIOT.print();
    }
    else if (state == BLINKER_CMD_OFF) {
        digitalWrite(LED_BUILTIN, HIGH);

        BlinkerMIOT.powerState("off");
        BlinkerMIOT.print();
    }
}

void setup()
{


    // 初始化串口
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
    BLINKER_DEBUG.debugAll();
    BlinkerMIOT.attachPowerState(miotPowerState);

    // 初始化有LED的IO
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, HIGH);
    // 初始化blinker
    WIFI_Init();//调用WIFI函数
    Blinker.begin(auth, WiFi.SSID().c_str(), WiFi.psk().c_str());//运行blinker
    //Blinker.begin(auth, ssid, pswd);
    Blinker.attachData(dataRead);

    Button1.attach(button1_callback);
}

void loop() {
    Blinker.run();
}

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-28 12:55 , Processed in 0.074821 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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