ESP8266编译报错'Blinker' was not declared in this scope


#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266HTTPClient.h>


// 替换为您的WIFI名称和密码
const char* ssid = "xzz";
const char* password = "12345678";

// 替换为您的blinker App KEY和SECRET
const String BLINKER_AUTH = "93182b8d7180";
const String BLINKER_PSWD = "176472yu";

// 定义继电器控制引脚
#define RELAY_PIN_1 5
#define RELAY_PIN_2 4

// 定义点动信号时间间隔(ms)
#define PULSE_INTERVAL 1000

// 定义时间错误代码
#define TIME_ERROR -1

// 定义两次点动信号之间的保护时间(ms)
#define PROTECT_INTERVAL 5*60*60*1000 // 5小时

// 定义外部API获取天气预报的URL(此处以心知天气为例,需要替换为您选择的API)
const char* WEATHER_API_URL = "https://api.seniverse.com/v3/weather/hourly?location=Yunyan&key=S-RVjQqh0zb7d25nC&language=zh-Hans&unit=c&start=0&hours=2";

// 定义全局变量
unsigned long lastTriggerTime = 0;
bool isRainy = false; // 初值为false表示当前未降雨

// 连接WIFI网络
void connectWiFi() {
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

// 点动继电器
void pulseRelay(int relayPin, int times) {
  int i = 0;
  while (i < times) {
    digitalWrite(relayPin, HIGH);
    delay(PULSE_INTERVAL);
    digitalWrite(relayPin, LOW);
    delay(PULSE_INTERVAL);
    i++;
  }
}

// 判断是否在保护时间内,如果是则返回true,否则返回false
bool isProtected() {
  if (lastTriggerTime == 0) {
    return false;
  }

  if (millis() - lastTriggerTime < PROTECT_INTERVAL) {
    return true;
  }

  return false;
}

// 获取外部API的响应数据
String fetchData(String url) {
  HTTPClient http;
  http.begin(url);
  int httpCode = http.GET();
  String response = "";
  if (httpCode == HTTP_CODE_OK) {
    response = http.getString();
  }
  http.end();

  return response;
}

// 从外部API响应数据中解析出当前未来2小时内是否有降雨的结果
bool parseWeatherData(String data) {
  bool result = false;

  // TODO: 解析外部API的响应数据,并返回是否有降雨的结果
  // 此处需要根据您选择的API进行修改

  return result;
}

// 定义Blinker的控制回调函数
void controlCallback(const String& message) {
  Serial.println("Message received: ");
  Serial.println(message);

  if (message == "relay1_on") { // 通过Blinker App关闭继电器1
    digitalWrite(RELAY_PIN_1, HIGH);
  } else if (message == "relay1_off") { // 通过Blinker App开启继电器1
    digitalWrite(RELAY_PIN_1, LOW);
  } else if (message == "relay2_on") { // 通过Blinker App关闭继电器2
    digitalWrite(RELAY_PIN_2, HIGH);
  } else if (message == "relay2_off") { // 通过Blinker App开启继电器2
    digitalWrite(RELAY_PIN_2, LOW);
  }
}

// 配置初始化Blinker
void initBlinker() {
  Blinker.begin(BLINKER_AUTH.c_str(), BLINKER_PSWD.c_str());
  Blinker.attachControl(controlCallback);
}

void setup() {
  // 初始化串口
  Serial.begin(115200);

  // 初始化继电器控制引脚
  pinMode(RELAY_PIN_1, OUTPUT);
  pinMode(RELAY_PIN_2, OUTPUT);

  // 配置Blinker
  initBlinker();

  // 连接WIFI网络
  connectWiFi();
}

void loop() {
  // 检查Blinker的消息
  Blinker.run();
// 如果在保护时间内,直接返回
  if (isProtected()) {
    return;
  }
// 获取外部API的响应数据
  String response = fetchData(WEATHER_API_URL);

  // 解析响应数据,得到是否降雨的结果
  isRainy = parseWeatherData(response);

  if (isRainy) {
    Serial.println("Rain is coming!");

    // 点动继电器1
    pulseRelay(RELAY_PIN_1, 2);

    // 更新触发时间
    lastTriggerTime = millis();
  }

  // 等待5秒钟,避免过渡刷新
  delay(5000);
}

求见各位帮忙看看,

img


编译时报错这个怎么解决?
C:\Users\ADMINI1\AppData\Local\Temp\arduino_modified_sketch_607265\sketch_jun15a.ino: In function 'void initBlinker()':
sketch_jun15a:121:3: error: 'Blinker' was not declared in this scope
121 | Blinker.begin(BLINKER_AUTH.c_str(), BLINKER_PSWD.c_str());
| ^~~~~~~
C:\Users\ADMINI
1\AppData\Local\Temp\arduino_modified_sketch_607265\sketch_jun15a.ino: In function 'void loop()':
sketch_jun15a:142:3: error: 'Blinker' was not declared in this scope
142 | Blinker.run();
| ^~~~~~~
exit status 1
'Blinker' was not declared in this scope

您遇到的新错误是因为您的代码中仍然存在对Blinker对象的引用,但是并未在代码中进行声明。请确保您已经正确包含了Blinker库,并进行了正确的初始化。

请按照以下步骤进行操作:

  1. 确保您已经正确安装了Blinker库。您可以通过Arduino库管理器搜索并安装Blinker库。

  2. 在您的代码开头添加以下语句以包含Blinker库的声明:

#include <Blinker.h>
  1. setup()函数中调用initBlinker()函数来初始化Blinker:
void setup() {
  // 初始化串口
  Serial.begin(115200);

  // 初始化继电器控制引脚
  pinMode(RELAY_PIN_1, OUTPUT);
  pinMode(RELAY_PIN_2, OUTPUT);

  // 连接WIFI网络
  connectWiFi();

  // 配置Blinker
  initBlinker();
}

确保将initBlinker()函数放置在setup()函数中的合适位置。

重新编译并上传代码,看看问题是否得到解决。