error Please set a mode BLINKER_BLE/BLINKER_WIFI/BLINKER_MQTT-Arduino中文社区 - Powered by Discuz! Archiver

bitcat 发表于 2021-3-19 17:36

error Please set a mode BLINKER_BLE/BLINKER_WIFI/BLINKER_MQTT

BLINKER_ESP_SMARTCONFIG的连接逻辑不太符合我的需求,想实现的逻辑是:自动连接保存的WiFi>如果失败>尝试使用程序预置的SSID和密钥连接 =>双击按键启动smartConfig

先放一下报错内容
In file included from D:\Documents\Arduino\SmartConfig\SmartConfig.ino:3:0:
d:\Documents\Arduino\libraries\blinker-library-master\src/Blinker.h:245:6: error: #error Please set a mode BLINKER_BLE/BLINKER_WIFI/BLINKER_MQTT ! Please check your mode setting.
   #error Please set a mode BLINKER_BLE/BLINKER_WIFI/BLINKER_MQTT ! Please check your mode setting.
      ^
exit status 1

个人粗鄙的看法是因为"define BLINKER_WIFI"跟"Blinker.begin(auth)"的原因,BLINKER_WIFI需要(auth, ssid, pswd)。但我已经通过其他方式完成了网络连接,并不需要ssid和pswd。不知道我的分析是否正确。
请大佬帮忙看看,感谢!


程序内容
#define BLINKER_WIFI

#include <Blinker.h>
#include <DHT.h>
#include <ESP8266WiFi.h>
#include <OneButton.h>

unsigned char num = 0;

#define STASSID "iopewq"
#define STAPSK"12345678"


char auth[] = "1*********b";
const char* ssid   = STASSID;
const char* password = STAPSK;

OneButton button1(D3, true);

BlinkerNumber HUMI("humi");
BlinkerNumber TEMP("temp");

#define DHTPIN D7
#define LED_PIN D4//板载LED
#define DHTTYPE DHT11   // DHT 11

DHT dht(DHTPIN, DHTTYPE);

float humi_read = 0, temp_read = 0;

void heartbeat()
{
    HUMI.print(humi_read);
    TEMP.print(temp_read);
}

void deviceReset()
{
    // Reset device ,erase WiFi config.
    Blinker.reset();
}

void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);

    Blinker.vibrate();
   
    uint32_t BlinkerTime = millis();
   
    Blinker.print("millis", BlinkerTime);
}


bool autoConfig()
{
WiFi.begin();
for (int i = 0; i < 20; i++)
{
    int wstatus = WiFi.status();
    if (wstatus == WL_CONNECTED)
    {
      Serial.println("自动连接上一次配置成功");
      //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("AutoConfig Waiting......");
      Serial.println(wstatus);
      delay(1000);
    }
}
Serial.println("AutoConfig Faild!" );
return false;
//WiFi.printDiag(Serial);
}

bool defaultwifi()
{
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
for (int i=0; 1 < 20; i++)
{
    int wstatus = WiFi.status();
    if (wstatus == WL_CONNECTED)
    {
      Serial.println("连接默认配置成功");
      //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("使用默认配置连接中...");
      Serial.println(wstatus);
      delay(1000);
    }
}
}
void smartConfig()
{
WiFi.mode(WIFI_STA);
Serial.println("等待SmartConfig!");
WiFi.beginSmartConfig();          //开启SmartConfig服务
while(1)
{
      Serial.print(".");
      num++;
      if(num >= 15)
      {
      Serial.print("\n");
      num = 0;
      }
      delay(500);
      if(WiFi.smartConfigDone())      //连接成功标志
      {
          Serial.println("SmartConfig成功!");
          delay(2000);
          Serial.println();
          Serial.printf("SSID:%s\t\n",WiFi.SSID().c_str());       //显示WiFi SSID
          Serial.printf("PASSWORD:%s\t\n",WiFi.psk().c_str());    //显示WiFi密码
          delay(2000);
          Serial.printf("IP address: ");
          WiFi.setAutoConnect(true);
          Serial.println(WiFi.localIP());
          WiFi.printDiag(Serial);
          break;
      }
      else                     //连接失败后的提示
      Serial.println("SmartConfig,Please reboot ESP8266 and try agin!");
   }
}

void click1() {
Serial.println("按键1单击");
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
}

void DoubleClick1() {
Serial.println("按键1双击");
smartConfig();
} // DoubleClick1

void longPress1() {
Serial.println("按键1长按");
deviceReset();
} // longPress1


void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Serial is ok!");
BLINKER_DEBUG.stream(Serial);
BLINKER_DEBUG.debugAll();
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);

Blinker.begin(auth);
Blinker.attachData(dataRead);
button1.attachClick(click1);//按键1单击
button1.attachDoubleClick(doubleclick1);//按键1双击
button1.attachDuringLongPress(longPress1);//按钮1长按
if (!autoConfig())
{
    //Serial.println("Defaultconfig module");
    defaultwifi();
    if (!defaultwifi())
    {
      //Serial.println("smartConfig module");
      smartConfig();
    }
}
Blinker.attachHeartbeat(heartbeat);
dht.begin();
}

void loop() {
Blinker.run();
button1.tick();

float h = dht.readHumidity();
float t = dht.readTemperature();

if (isnan(h) || isnan(t))
{
      BLINKER_LOG("Failed to read from DHT sensor!");
}
else
{
      BLINKER_LOG("Humidity: ", h, " %");
      BLINKER_LOG("Temperature: ", t, " *C");
      humi_read = h;
      temp_read = t;
}

Blinker.delay(2000);
// put your main code here, to run repeatedly:
}


bitcat 发表于 2021-3-19 21:35

XlinliY.Zhang 发表于 2021-3-19 21:18
本来就是联网超时20S自己进入的,只要20S内连得上WiFi自然进不去

:D看来你对我的想法有所误解,我希望的是再没有我手动操作的情况下不要进入SmartConfig
上一次保存的WiFi>预置的SSID 密码 | 只有手动按键的情况下才允许进入SmartConfig

还是非常感谢你的回答

XlinliY.Zhang 发表于 2021-3-19 18:32

esptouch直接用Blinker自带的不就行

bitcat 发表于 2021-3-19 18:39

XlinliY.Zhang 发表于 2021-3-19 18:32
esptouch直接用Blinker自带的不就行

Blinker自带的第一次上电就会进入smartConfig,而我是希望他不要自动进入,而是通过手动按键才进入

奈何col 发表于 2021-3-19 19:03

这个只有自己看懂源码修改了

bitcat 发表于 2021-3-19 19:10

奈何col 发表于 2021-3-19 19:03
这个只有自己看懂源码修改了

这么说我的分析的原因是正确的么?

奈何col 发表于 2021-3-19 19:13

bitcat 发表于 2021-3-19 19:10
这么说我的分析的原因是正确的么?

没看懂您的分析,建议阅读源码

XlinliY.Zhang 发表于 2021-3-19 21:18

bitcat 发表于 2021-3-19 18:39
Blinker自带的第一次上电就会进入smartConfig,而我是希望他不要自动进入,而是通过手动按键才进入 ...

本来就是联网超时20S自己进入的,只要20S内连得上WiFi自然进不去

bitcat 发表于 2021-3-19 21:43

把BlinkerESPMQTT.h里面相关的内容修改或注释后已经成功了

图书馆贤者 发表于 2022-4-9 03:45

我也遇到了相同的问题,可以请教一下具体修改了啥吗?
页: [1]
查看完整版本: error Please set a mode BLINKER_BLE/BLINKER_WIFI/BLINKER_MQTT