请帮忙看看这个(no matching function for call to 'BlynkWifi::begin(const char [17])'
)报错如何解,谢谢!
/*下面是注释部分*/
//程序功能:通过获取心知天气数据判断本地是否下雨,如果下雨则控制继电器点动两次,否则不动作。下雨动作后5个小时内不再动作
//1.包含头文件
#include <ESP8266WiFi.h> //wifi头文件
#include <DNSServer.h> // dns伺服器头文件
#include <ESP8266WebServer.h> //网络伺服器头文件
#include <WiFiManager.h> //WiFi管理头文件
#include <BlynkSimpleEsp8266.h> //使用blynk头文件
#include <ArduinoJson.h> //json头文件
#include <Wire.h> //Wire头文件
#include <Adafruit_Sensor.h> //底层传感器头文件
#include <Adafruit_BME280.h> //BME280传感器头文件
#include <SoftwareSerial.h> //软串口头文件
//2.定义变量
const char* server = "api.seniverse.com"; //心知天气服务器地址
String location = "WKEZKQP0SPXT"; //城市名字
String key = "S-RVjQqh0zb7d25nC"; //申请的心知天气key
unsigned long previousMillis = 0; //上次点动的时间
unsigned long interval = 18000000; //5小时后允许再次点动
const int rainThreshold = 60; //下雨阈值,表示当天降雨概率大于60%则认为是有雨
//初始化BME280传感器
Adafruit_BME280 bme;
//初始化软串口控制继电器
SoftwareSerial switchSerial(12,13);
//3.初始化函数
void setup() {
//初始化串口,调试使用
Serial.begin(9600);
switchSerial.begin(9600);
//初始化blynk和wifi
Blynk.begin("your_blynk_token");
WiFiManager wifiManager;
wifiManager.autoConnect("AutoConnectAP");
Serial.println("connected....");
//初始化传感器
bme.begin(0x76); //默认地址是0x76,不用传入地址参数
//初始化继电器
switchSerial.write("AT+RST\r\n"); //清理串口缓冲区
delay(100);
switchSerial.write("AT+CWJAP=\"xzz\",\"12345678\"\r\n"); //连接WIFI
delay(10000); //等待10s
switchSerial.write("AT+CWMODE=3\r\n"); //选择AP+STA模式
delay(100);
switchSerial.write("AT+CIPMUX=1\r\n"); //开启多连接模式
delay(100);
switchSerial.write("AT+CIPSERVER=1,80\r\n"); //开启服务器
//输出初始化信息
Serial.println("setup complete");
}
//4.主程序循环
void loop() {
//获取时间
unsigned long currentMillis = millis();
//检查时间间隔是否超过5小时,如果是则允许再次进行动作
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis; //更新时间
}
//获取天气信息
String weatherJson = httpGetWeather();
bool isRain = isRaining(weatherJson);
//如果下雨且时间间隔超过5小时,点动继电器
if (isRain && (currentMillis - previousMillis >= interval)) {
Serial.println("It's raining. start switch.");
switchSerial.write("AT+CIPSEND=0,5\r\n"); //选择连接0,5个字符长度
delay(100);
switchSerial.write("start"); //向0发送start命令
delay(2000);
switchSerial.write("AT+CIPSEND=0,5\r\n");
delay(100);
switchSerial.write("stop"); //向0发送stop命令
previousMillis = currentMillis; //记录时间
}
//继电器不动作
delay(1000);
}
//5.获取天气数据
String httpGetWeather()
{
String cmd = "GET /v3/weather/now.json?key=" + key + "&location=" + location +
" HTTP/1.1\r\nHost: " + server + "\r\nConnection: close\r\n\r\n";
const int httpPort = 80;
WiFiClient client;
if (!client.connect(server, httpPort)) {
Serial.println("connection failed");
return "";
}
Serial.println("Connected to server");
client.print(cmd);
unsigned long timeout = millis() + 5000;
while (client.available() == 0) {
if (timeout - millis() < 0) {
Serial.println(">>> Client Timeout !");
client.stop();
return "";
}
}
String response = "";
while (client.available()) {
String line = client.readStringUntil('\r');
response += line;
}
Serial.println("response:\n" + response);
return response;
}
//6.解析天气数据,返回是否下雨
bool isRaining(String json)
{
const size_t bufferSize = 2*JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(4) + JSON_OBJECT_SIZE(5) + JSON_OBJECT_SIZE(8) + JSON_OBJECT_SIZE(11) + 784;
DynamicJsonBuffer jsonBuffer(bufferSize);
JsonObject& root = jsonBuffer.parseObject(json);
if (!root.success()) {
Serial.println("parseObject failed");
return false;
}
String text = root["results"][0]["now"]["text"].asString();
Serial.println(text);
if (text == "晴" || text == "多云" || text == "阴")
{
return false;
}
else
{
int rainPercentage = root["results"][0]["now"]["precip"].as<int>();
if (rainPercentage >= rainThreshold)
{
return true;
}
else
{
return false;
}
}
}
报错内容:
C:\Users\Administrator\Desktop\esp8266\99999\99999.ino: In function 'void setup()':
99999:36:33: error: no matching function for call to 'BlynkWifi::begin(const char [17])'
36 | Blynk.begin("your_blynk_token");
| ^
In file included from C:\Users\Administrator\Desktop\esp8266\99999\99999.ino:8:
C:\Users\Administrator\Documents\Arduino\libraries\Blynk\src/BlynkSimpleEsp8266.h:75:10: note: candidate: 'void BlynkWifi::begin(const char*, const char*, const char*, const char*, uint16_t)'
75 | void begin(const char* auth,
| ^~~~~
C:\Users\Administrator\Documents\Arduino\libraries\Blynk\src/BlynkSimpleEsp8266.h:75:10: note: candidate expects 5 arguments, 1 provided
C:\Users\Administrator\Documents\Arduino\libraries\Blynk\src/BlynkSimpleEsp8266.h:86:10: note: candidate: 'void BlynkWifi::begin(const char*, const char*, const char*, IPAddress, uint16_t)'
86 | void begin(const char* auth,
| ^~~~~
C:\Users\Administrator\Documents\Arduino\libraries\Blynk\src/BlynkSimpleEsp8266.h:86:10: note: candidate expects 5 arguments, 1 provided
C:\Users\Administrator\Desktop\esp8266\99999\99999.ino: In function 'bool isRaining(String)':
99999:125:42: error: no matching function for call to 'ArduinoJson::DynamicJsonBuffer::DynamicJsonBuffer(const size_t&)'
125 | DynamicJsonBuffer jsonBuffer(bufferSize);
| ^
In file included from c:\users\administrator\documents\arduino\libraries\arduinojson\include\arduinojson.h:7,
from C:\Users\Administrator\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:13,
from C:\Users\Administrator\Desktop\esp8266\99999\99999.ino:9:
c:\users\administrator\documents\arduino\libraries\arduinojson\include\ArduinoJson/DynamicJsonBuffer.hpp:25:3: note: candidate: 'ArduinoJson::DynamicJsonBuffer::DynamicJsonBuffer()'
25 | DynamicJsonBuffer();
| ^~~~~~~~~~~~~~~~~
c:\users\administrator\documents\arduino\libraries\arduinojson\include\ArduinoJson/DynamicJsonBuffer.hpp:25:3: note: candidate expects 0 arguments, 1 provided
c:\users\administrator\documents\arduino\libraries\arduinojson\include\ArduinoJson/DynamicJsonBuffer.hpp:23:7: note: candidate: 'constexpr ArduinoJson::DynamicJsonBuffer::DynamicJsonBuffer(const ArduinoJson::DynamicJsonBuffer&)'
23 | class DynamicJsonBuffer : public JsonBuffer {
| ^~~~~~~~~~~~~~~~~
c:\users\administrator\documents\arduino\libraries\arduinojson\include\ArduinoJson/DynamicJsonBuffer.hpp:23:7: note: no known conversion for argument 1 from 'const size_t' {aka 'const unsigned int'} to 'const ArduinoJson::DynamicJsonBuffer&'
exit status 1
no matching function for call to 'BlynkWifi::begin(const char [17])'
这个错误通常由于参数类型不匹配导致的。具体来说,BlynkWifi::begin() 方法需要传递一个 const char* 类型的参数,但是你传递的参数类型是一个固定长度的 char 数组。
解决这个问题可能有以下几种方法:
将参数类型更改为 const char*
将参数类型更改为 const char* 类型,可以通过将参数的地址传递给 begin() 方法来实现。例如:
Blynk.begin("your-auth-token");
这里的 "your-auth-token" 实际上是一个 const char* 类型的常量字符串,传递给 begin() 方法时会被自动转换为 const char* 类型。
将参数定义为可以扩展到 const char* 类型的变量
由于 char 数组可以隐式转换为 const char,因此你可以将其定义为可以扩展到 const char 类型的变量,以确保参数类型匹配。例如:
```c
char auth[] = "your-auth-token";
Blynk.begin(auth);
```在这个例子中,我们首先定义了一个 char 数组 auth,然后将其传递给 Blynk.begin() 方法。由于 char 数组可以隐式转换为 const char*,所以这样可以确保参数类型匹配。
更新库版本
如果第一和第二种方法都无法解决问题,你可以尝试更新 Blynk 库的版本,以确保使用的是最新的代码。使用最新版本的库可能会解决一些已知的问题,并提供更好的兼容性。
希望这些方法可以帮助你解决问题。