可以在esp8266跑的知心天气程序,要求能在blinker app上面显示天气状况就行
主意:json5版本与blinker有冲突用json6
esp8266知心天气blinker上面显示
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- 没有头脑的刷题机器 2023-03-21 12:56关注
基于最新版ChatGPT4的回答,望采纳!!!有其他问题也可以询问我哦、”(最新版更智能,功能更加强大)
为了在ESP8266上运行知心天气程序并在Blinker App上显示天气状况,您需要完成以下步骤:
- 准备硬件和软件环境:
- ESP8266开发板
- Arduino IDE
- 安装Blinker库 (在Arduino IDE的"库管理器"中搜索并安装)
- 安装ArduinoJson库 v6 (同样在"库管理器"中搜索并安装)
- 获取API Key:
- 注册一个免费账户并获取一个知心天气API Key:https://www.seniverse.com/
- 创建一个Blinker项目,获取Auth Token:https://blinker.app/
- 编写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; } }
在Arduino IDE中上传程序到ESP8266开发板。
在Blinker App中创建一个项目,添加一个文本组件,并将其命名为"weather"(与代码中的组件名称匹配)。
现在,您的ESP8266应该每10分钟更新一次天气数据,并将其显示在Blinker App的文本组件中。根据需要,您可以更改查询间隔和显示的信息。
解决 无用评论 打赏 举报 - 准备硬件和软件环境:
悬赏问题
- ¥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时报错