一个关于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);
  }
 }

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
当使用 Blinker 库时,可以编写按键回调函数来处理按键状态变化的事件。以下是一个示例按键回调函数的代码: ```cpp #include <Blinker.h> BlinkerButton button1("btn-1"); void button1_callback(const String & state) { BLINKER_LOG("Button state: ", state); if (state == BLINKER_CMD_ON) { // 当按键状态为开启时执行的操作 Serial.println("Button is turned ON"); // 执行其他的操作... } else if (state == BLINKER_CMD_OFF) { // 当按键状态为关闭时执行的操作 Serial.println("Button is turned OFF"); // 执行其他的操作... } } void setup() { // 初始化 BlinkerBlinker.begin(auth); // 设置按键回调函数 button1.attach(button1_callback); } void loop() { // 在循环处理 Blinker 库的任务 Blinker.run(); } ``` 在上面的示例,我们使用了 Blinker 库来处理按键事件。首先,我们创建了一个名为 `button1` 的 `BlinkerButton` 对象,并将其绑定到具体的按钮标识符 "btn-1"。然后,我们定义了一个名为 `button1_callback` 的回调函数,它接受一个 `String` 类型的参数 `state`,用于表示按键状态。 在回调函数,我们使用 `BLINKER_LOG` 宏来输出按键状态到串口监视器。根据不同的状态值,我们可以执行相应的操作。在这个示例,我们通过串口打印了按键开启和关闭的消息。 在 `setup()` 函数,我们初始化了 Blinker 库,并将按键回调函数 `button1_callback` 附加到 `button1` 对象上。 最后,在 `loop()` 函数,我们使用 `Blinker.run()` 来处理 Blinker 库的任务,确保按键回调函数能够被调用。 请注意,在使用 Blinker 库之前,您需要先安装 Blinker 库并获取有效的认证信息(`auth`)。您还需要根据实际情况进行其他的配置和初始化操作。 希望这个示例能帮助到您!如果还有其他问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑牛唱剧本

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值