一个关于blinker中的EspTouch功能的矛盾与不解

需求

最近刚接触BLINKER,不得不说,这是一个很好,很方便的工具。可以快速开发特联网项目。手头上正了有一个小项目,大致的需求如下:
1、一个基于8266的小终端。用户在使用之前必须要配网,配上后才能正常连上BLINKER的APP进行控制。
2、终端上会设计一个reset键,使用者在短按该键会使终端重启,那么这个重启会使系统重新连接上配好的wifi网络。如果是长按reset键,则使该 终端重新进入配网模式。

实现

当然有两种实现方式。一种 是利用ESP8266自带的SmartConfig功能,实现自动配网,这个好实现,同时把用户配网的SSID和PASSWORD以及配网成功的一个标志位存入EEPROM里。这样可以实现上述的需求。缺 点当然是和须要用微信云扫配网的二维码。用安信可提供的一个配网程序来完成。这种 方式就让用户体验会差一点,不能在一个APP上完全实现操作。

第二种 实现就是用BLINKER提供的EspTouch方式。(例程见这个链接)。其中的关键 就是最上面的那个宏定义

        #define BLINKER_WIFI       
        #define BLINKER_ESP_SMARTCONFIG        

对应编译时,看到有第二个宏,系统用的是Blinker.begin(auth)这个语法.。运行时启动的是EspTouch的配网模式(和ESP的SmartConfig功能一样,只是名字不一样)。但是由于上述的需求,我在SETUP里一定会有一个判断,当用户已在上一次配过网了,并把配网的参数SSID和PASSWORD都 存在了EEPROM里以后,我就要启动的是正常联网模式,也即要用到Blinker.begin(auth,ssid,pass)这个语句。
然后苦逼的事性就来了。这时编译会出现如下的错误:
*

no matching function for call to ‘BlinkerESPMQTT::begin(char [13], const char*&, const char*&)’

一开始一直不理解为什么会出现这个错误,我语法没有错。(具体见下面程序)。后来我反复试了以后发现问题了。我只要删队上面的BLINKER_ESP_SMARTCONFIG这个宏,就没有出错。如果加上这个宏,而出错的会Blinker.begin(auth)这个语句了。也就是说我没办法同时在程序里根据条件来选择配网和连接模式。不知道 我这个困惑有什么办法解决吗。下面是两个程序 片断

#define BLINKER_WIFI
#define BLINKER_ESP_SMARTCONFIG

。。。。。。
void setup()
{
    
    
 if (flag !=1)
  {
    
    
    // IF flag!=1 then set 8266 in SmartConfig  model .
     Serial.println("<<<<<<<现在是【配置】模式>>>>>>>");
     Blinker.begin(auth);    
  }
   if (flag==1)
  {
    
    
    myssid=EEPROM_read(1,32);  //从第一位读32位
    myssid.trim();
    mypass=EEPROM_read(33,11); //从第33位读11位
    mypass.trim();
    Serial.println("登入的SSID是:"+myssid+"密码是:"+mypass);
    
    ssid = myssid.c_str(); //把string 赋给 char*
    pass = mypass.c_str();
   
    Serial.println("执行BLinker.begin()");
    
    BLINKER_DEBUG.stream(Serial);     
    BLINKER_DEBUG.debugAll();   
    
    Blinker.begin(auth,ssid,pass);
  }
 }

是我思路错了还是模式错了。哪位高手帮我指证一下。

猜你喜欢

转载自blog.csdn.net/weixin_45499326/article/details/109540224