胜天丶半子 2023-03-21 11:48 采纳率: 0%
浏览 132
已结题

esp8266知心天气blinker上面显示

可以在esp8266跑的知心天气程序,要求能在blinker app上面显示天气状况就行
主意:json5版本与blinker有冲突用json6

  • 写回答

4条回答 默认 最新

  • 关注

    基于最新版ChatGPT4的回答,望采纳!!!有其他问题也可以询问我哦、”(最新版更智能,功能更加强大)

    为了在ESP8266上运行知心天气程序并在Blinker App上显示天气状况,您需要完成以下步骤:

    1. 准备硬件和软件环境:
      • ESP8266开发板
      • Arduino IDE
      • 安装Blinker库 (在Arduino IDE的"库管理器"中搜索并安装)
      • 安装ArduinoJson库 v6 (同样在"库管理器"中搜索并安装)
    2. 获取API Key:
    3. 编写Arduino程序:
    #include <ESP8266WiFi.h>
    #include <Blinker.h>
    #include <ArduinoJson.h>
    
    // 替换为你的Wi-Fi SSID和密码
    const char* ssid = "your_SSID";
    const char* password = "your_PASSWORD";
    
    // 替换为你的知心天气API Key
    const char* apiKey = "your_api_key";
    
    // 替换为你的Blinker Auth Token
    char auth[] = "your_blinker_auth_token";
    
    // OpenWeatherMap API请求
    const char* weatherApi = "https://api.seniverse.com/v3/weather/now.json?key=%s&location=%s&language=zh-Hans&unit=c";
    
    char location[] = "shanghai"; // 您想要获取天气的地点
    
    BlinkerText textWeather("weather"); // 创建Blinker文本组件
    
    void setup() {
      Serial.begin(115200);
    
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
    
      Serial.println("WiFi connected");
    
      Blinker.begin(auth, ssid, password);
    }
    
    void getWeather() {
      WiFiClient client;
      char apiRequest[strlen(weatherApi) + strlen(apiKey) + strlen(location) + 1];
      sprintf(apiRequest, weatherApi, apiKey, location);
    
      if (client.connect("api.seniverse.com", 80)) {
        client.print(String("GET ") + apiRequest + " HTTP/1.1\r\n" +
                     "Host: api.seniverse.com\r\n" +
                     "Connection: close\r\n\r\n");
    
        unsigned long timeout = millis();
        while (client.available() == 0) {
          if (millis() - timeout > 5000) {
            Serial.println(">>> Client Timeout !");
            client.stop();
            return;
          }
        }
    
        while (client.available()) {
          String line = client.readStringUntil('\r');
          Serial.print(line);
    
          if (line.indexOf("HTTP/1.1 200 OK") >= 0) {
            while (client.available()) {
              String payload = client.readStringUntil('\r');
              Serial.println(payload);
    
              StaticJsonDocument<1024> jsonDoc;
              DeserializationError error = deserializeJson(jsonDoc, payload);
    
              if (error) {
                Serial.println("Failed to parse JSON");
                return;
              }
    
              const char* cityName = jsonDoc["results"][0]["location"]["name"].as<char*>();
              const char* weatherText = jsonDoc["results"][0]["now"]["text"].as<char*>();
              int weatherCode = jsonDoc["results"][0]["now"]["code"].as<int>();
              int temperature = jsonDoc["results"][0]["now"]["temperature"].as<int>();
          String weatherDisplay = String(cityName) + ": " + String(weatherText) + " (" + String(weatherCode) + "), 温度: " + String(temperature) + "°C";
          Serial.println(weatherDisplay);
    
          // 更新Blinker组件
          textWeather.print(weatherDisplay);
        }
      }
    }
    
    client.stop();
    } else {
    Serial.println("Connection failed");
    }
    }
    
    void loop() {
    Blinker.run();
    
    static unsigned long lastQueryTime = 0;
    unsigned long currentTime = millis();
    
    // 每10分钟(600000毫秒)获取一次天气数据
    if (currentTime - lastQueryTime > 600000 || lastQueryTime == 0) {
    getWeather();
    lastQueryTime = currentTime;
    }
    }
    
    1. 在Arduino IDE中上传程序到ESP8266开发板。

    2. 在Blinker App中创建一个项目,添加一个文本组件,并将其命名为"weather"(与代码中的组件名称匹配)。

    现在,您的ESP8266应该每10分钟更新一次天气数据,并将其显示在Blinker App的文本组件中。根据需要,您可以更改查询间隔和显示的信息。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月23日
  • 修改了问题 3月21日
  • 创建了问题 3月21日

悬赏问题

  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错