捣蛋鬼z 2023-06-03 22:29 采纳率: 0%
浏览 52
已结题

arduino esp8266 Blinker编译报问题

arduino esp8266 编译问题
主体代码这里

#define BLINKER_MIOT_LIGHT
#define BLINKER_WIFI
 
#include <Blinker.h>
 
char auth[] ="密钥";   //换成APP获取到的密匙
char ssid[] = "wifi";  //WiFi账号
char pswd[] = "密码";   //WIFI密码
 
int GPIO=0;//定义GPIO口用于控制继电器
 
//#define BUTTON_1 "Key"
 
 
BlinkerButton Button1("Key");//这里需要根据自己在BLINKER里面设置的名字进行更改
 
void button1_callback(const String & state)
{
    //BLINKER_LOG("get button state: ", state);
    Blinker.vibrate(); 
    if (state=="on") {
        //digitalWrite(LED_BUILTIN, LOW);
        digitalWrite(GPIO, LOW);
        // 反馈开关状态
        Button1.print("on");
    } else if(state=="off"){
        //digitalWrite(LED_BUILTIN, HIGH);
        digitalWrite(GPIO, HIGH);
        // 反馈开关状态
        Button1.print("off");
    }
}
 
 
 
void miotPowerState(const String & state)
{
    BLINKER_LOG("need set power state: ",state);
 
    if (state == BLINKER_CMD_OFF) {//如果语音接收到是关闭灯就设置GPIO口为高电平
        digitalWrite(GPIO, HIGH);
 
        BlinkerMIOT.powerState("off");
        BlinkerMIOT.print();
    }
    else if (state == BLINKER_CMD_ON) {
        digitalWrite(GPIO, LOW);
        BlinkerMIOT.powerState("on");
        BlinkerMIOT.print();
    }
}
 
 
void setup() {
    Serial.begin(115200);
    //pinMode(LED_BUILTIN, OUTPUT);
    pinMode(GPIO,OUTPUT);
    digitalWrite(GPIO,HIGH);//初始化,由于继电器是低电平触发。所以刚开始设为高电平
    //digitalWrite(LED_BUILTIN, HIGH);
    Blinker.begin(auth, ssid, pswd);
    Button1.attach(button1_callback);
    BlinkerMIOT.attachPowerState(miotPowerState);//这段代码一定要加,不加小爱同学控制不了,务必在回调函数中反馈该控制状态
 
 
}
 
void loop()
{
    Blinker.run();
}

报问题信息

In file included from g:\8266xm\libraries\Blinker\src/BlinkerESPMQTT.h:16,
                 from g:\8266xm\libraries\Blinker\src/Blinker.h:43,
                 from G:\8266xm\xxdd8266\xxdd8266.ino:4:
g:\8266xm\libraries\Blinker\src/Adapters/BlinkerMQTT.h: In member function 'virtual char* BlinkerMQTT::token()':
g:\8266xm\libraries\Blinker\src/Adapters/BlinkerMQTT.h:141:50: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  141 |         char * token() { if (!isMQTTinit) return ""; else return MQTT_KEY_MQTT; }
      |                                                  ^~
In file included from g:\8266xm\libraries\Blinker\src/BlinkerESPMQTT.h:16,
                 from g:\8266xm\libraries\Blinker\src/Blinker.h:43,
                 from G:\8266xm\xxdd8266\xxdd8266.ino:4:
g:\8266xm\libraries\Blinker\src/Adapters/BlinkerMQTT.h: In member function 'virtual char* BlinkerMQTT::lastRead()':
g:\8266xm\libraries\Blinker\src/Adapters/BlinkerMQTT.h:954:17: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  954 |     else return "";
      |                 ^~
In file included from g:\8266xm\libraries\Blinker\src/Blinker/BlinkerApi.h:95,
                 from g:\8266xm\libraries\Blinker\src/BlinkerESPMQTT.h:17,
                 from g:\8266xm\libraries\Blinker\src/Blinker.h:43,
                 from G:\8266xm\xxdd8266\xxdd8266.ino:4:
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerApiBase.h: In member function 'char* BlinkerBridge_key::getName()':
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerApiBase.h:196:29: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  196 |                 else return "false";
      |                             ^~~~~~~
In file included from g:\8266xm\libraries\Blinker\src/Blinker/BlinkerApi.h:96,
                 from g:\8266xm\libraries\Blinker\src/BlinkerESPMQTT.h:17,
                 from g:\8266xm\libraries\Blinker\src/Blinker.h:43,
                 from G:\8266xm\xxdd8266\xxdd8266.ino:4:
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerProtocol.h: In member function 'char* BlinkerProtocol::deviceName()':
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerProtocol.h:104:86: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  104 |             char * deviceName() { if (isInit) return conn->deviceName(); else return ""; }
      |                                                                                      ^~
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerProtocol.h: In member function 'char* BlinkerProtocol::authKey()':
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerProtocol.h:105:83: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  105 |             char * authKey()    { if (isInit) return conn->authKey(); else return "";  }
      |                                                                                   ^~
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerProtocol.h: In member function 'char* BlinkerProtocol::token()':
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerProtocol.h:106:79: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  106 |             char * token()    { if (isInit) return conn->token(); else return "";  }
      |                                                                               ^~
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerProtocol.h: In member function 'char* BlinkerProtocol::dataParse()':
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerProtocol.h:257:86: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  257 |         char* dataParse()       { if (canParse) return conn->lastRead(); else return ""; }
      |                                                                                      ^~
In file included from g:\8266xm\libraries\Blinker\src/Adapters/BlinkerMQTT.h:46,
                 from g:\8266xm\libraries\Blinker\src/BlinkerESPMQTT.h:16,
                 from g:\8266xm\libraries\Blinker\src/Blinker.h:43,
                 from G:\8266xm\xxdd8266\xxdd8266.ino:4:
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerApi.h: At global scope:
g:\8266xm\libraries\blinker\src\blinker\blinkerconfig.h:226:41: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  226 | #define BLINKER_CMD_BUILTIN_SWITCH      "switch"
      |                                         ^~~~~~~~
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerApi.h:913:71: note: in expansion of macro 'BLINKER_CMD_BUILTIN_SWITCH'
  913 |         BlinkerWidgets_string _BUILTIN_SWITCH = BlinkerWidgets_string(BLINKER_CMD_BUILTIN_SWITCH);
      |                                                                       ^~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from g:\8266xm\libraries\Blinker\src/BlinkerESPMQTT.h:17,
                 from g:\8266xm\libraries\Blinker\src/Blinker.h:43,
                 from G:\8266xm\xxdd8266\xxdd8266.ino:4:
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerApi.h: In member function 'char* BlinkerApi::bridgeKey(uint8_t)':
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerApi.h:7831:21: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
 7831 |         else return "";
      |                     ^~
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerApi.h: In member function 'char* BlinkerApi::bridgeName(uint8_t)':
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerApi.h:7838:21: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
 7838 |         else return "false";
      |                     ^~~~~~~
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerApi.h: In member function 'char* BlinkerApi::widgetName_str(uint8_t)':
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerApi.h:8467:17: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
 8467 |     else return "";
      |                 ^~
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerApi.h: In member function 'char* BlinkerApi::widgetName_joy(uint8_t)':
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerApi.h:8474:21: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
 8474 |         else return "";
      |                     ^~
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerApi.h: In member function 'char* BlinkerApi::widgetName_rgb(uint8_t)':
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerApi.h:8481:17: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
 8481 |     else return "";
      |                 ^~
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerApi.h: In member function 'char* BlinkerApi::widgetName_int(uint8_t)':
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerApi.h:8487:17: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
 8487 |     else return "";
      |                 ^~
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerApi.h: In member function 'char* BlinkerApi::widgetName_tab(uint8_t)':
g:\8266xm\libraries\Blinker\src/Blinker/BlinkerApi.h:8493:17: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
 8493 |     else return "";
      |                 ^~
G:\8266xm\xxdd8266\xxdd8266.ino: At global scope:
G:\8266xm\xxdd8266\xxdd8266.ino:15:23: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
   15 | BlinkerButton Button1("Key");//这里需要根据自己在BLINKER里面设置的名字进行更改
      |                       ^~~~~
In file included from g:\8266xm\libraries\Blinker\src\modules\painlessMesh\scheduler.cpp:15:
g:\8266xm\libraries\blinker\src\modules\taskscheduler\taskscheduler.h: In member function 'bool Scheduler::execute()':
g:\8266xm\libraries\blinker\src\modules\taskscheduler\taskscheduler.h:872:28: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
  872 |     register unsigned long m, i;  // millis, interval;
      |                            ^
g:\8266xm\libraries\blinker\src\modules\taskscheduler\taskscheduler.h:872:31: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
  872 |     register unsigned long m, i;  // millis, interval;
      |                               ^
 
  • 写回答

6条回答 默认 最新

  • 阳光宅男xxb 2023-06-09 08:51
    关注
    获得2.25元问题酬金

    主要是一些警告信息,warning: ISO C++ forbids converting a string constant to 'char*'的意思就是禁止将字符串常量转换为“char ”,检查下你的代码中,将这种形式的定义:
    stu.name="zhangsan";
    修改为:
    char name = (char*)"zhangsan";

    其次检查下Blinker这个库,以及其他使用到的库文件是否正确引入

    评论
  • 唐宋404 2023-06-03 23:47
    关注
    获得0.15元问题酬金

    你的返回值是string类型的,但是他要求的是char类型的啊,所以报错了
    举个例子吼:要解决函数返回类型为char
    ,却返回了string的问题,你需要在返回之前将string转换为char*。

    char* miotPowerState(const String & state) {
        static char powerState[5]; // 用于存储转换后的字符串
    
        if (state == BLINKER_CMD_OFF) {
            digitalWrite(GPIO, HIGH);
            BlinkerMIOT.powerState("off");
            BlinkerMIOT.print();
            strncpy(powerState, "off", sizeof(powerState));
        }
        else if (state == BLINKER_CMD_ON) {
            digitalWrite(GPIO, LOW);
            BlinkerMIOT.powerState("on");
            BlinkerMIOT.print();
            strncpy(powerState, "on", sizeof(powerState));
        }
    
        return powerState;
    }
    

    在这个修改后的代码中,我们创建了一个静态的char数组powerState,用于存储转换后的字符串。然后,我们使用strncpy函数将"on"或"off"复制到powerState数组中。最后,我们返回powerState数组的指针,这样函数就可以返回char*类型了。请注意,我们指定了powerState数组的大小为5,以确保足够的空间来存储字符串和终止符。

    评论 编辑记录
  • qllaoda 2023-06-04 16:49
    关注
    获得1.65元问题酬金

    我试过了,这段代码并没有问题,在我的环境下可以正常编译,应该是ESP8266的开发板支持库或Blinker的库有问题,建议更新一下
    更新完成后建议先用例程做编译测试。先用ESP8266的例程,确认ESP8266的库是否正确,然后再用Blinker的例程
    当然,还有一种可能是选错了开发板,没有正确选择ESP8266

    img


    我使用的Blinker库版本是0.3.10230510
    ESP8266的库的版本是3.1.2
    Arduino IDE版本是2.1.0

    评论 编辑记录
  • 还有头发的程序员- 2023-06-04 17:39
    关注
    获得0.45元问题酬金

    类型问题,注意保持一致

    评论
  • yy64ll826 2023-06-10 10:12
    关注
    获得1.05元问题酬金

    这个只是警告

    评论
  • GIS工具开发 2023-06-09 11:50
    关注
    获得1.05元问题酬金

    前后数据类型不一致,在返回之前要将string转换为char,char和string是两种不同的数据类型,所以会报错

    评论

报告相同问题?

问题事件

  • 系统已结题 6月11日
  • 创建了问题 6月3日

悬赏问题

  • ¥15 咨询bilbil上这个视频音字同步的效果用什么软件可实现?
  • ¥15 西门子plc6ES7217-1AG40-0XB0怎么rs485通讯呀!
  • ¥15 matlab有svec这个函数吗?
  • ¥15 无法调用VideoWriter_fourcc
  • ¥15 VB6.0无法加载网页验证码图片到picturebox中,求解。
  • ¥15 C#和GDAL对栅格处理
  • ¥15 我现在有一些关于提升机故障的专有文本数据,量也不多,我在label studio上进行了关系和实体的标注,完成了知识图谱的构造,那么我使用生成式模型的话,我能做哪些工作来写我的论文?
  • ¥15 电脑连不上无线网络如下诊断反馈应该如何操作
  • ¥15 telegram api 使用forward_messages方法转发消息时,目标群组里面会出现此消息来源,如何隐藏?
  • ¥15 关于#tensorflow#的问题:有没有什么方法可以让机器自己学会像素风格的图片