【ESP8266物联网天气时钟】解决太极创客物联网天气时钟二三页出现NA的问题——新版和风天气API以及gzip数据解压

这篇具有很好参考价值的文章主要介绍了【ESP8266物联网天气时钟】解决太极创客物联网天气时钟二三页出现NA的问题——新版和风天气API以及gzip数据解压。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 前言

  前几天想要找一个开源项目做一下,然后一番搜索后找到了太极创客在B站发布的一个物联网小项目制作:“物联网天气时钟粉丝数显示oled小电视”。
  这个项目主要用到的资源就是一块 ESP01S 和一块四脚的0.96寸 OLED 屏幕,正好手头也有,就打算复刻下这个项目,原项目的开源地址如下:

https://gitee.com/taijichuangke/bilibili_weather_clock

2. 遇到的问题以及解决思路

2.1 遇到的问题

  该项目的最终效果是在第一页显示当前时间、粉丝数;第二页显示的是当前天气;第三页显示的是未来三天的天气预报。但是经过测试后,发现只有第一页是能够正常显示的,二、三页的天气数据一直显示NA或者null。通过串口监视器发现访问B站的返回json数据解析是正确的,但是从和风天气返回的json数据就开始出错。
【ESP8266物联网天气时钟】解决太极创客物联网天气时钟二三页出现NA的问题——新版和风天气API以及gzip数据解压,物联网,单片机,嵌入式硬件,开源

2.2 解决思路

  经过代码分析以及网上搜索资料后发现,这个项目是2020年发布的,当时使用的和风天气API还是s6版本的,在项目的 Esp8266_Clock_Weather 文件夹里面的 HeFeng.cpp 文件中获取当前天气以及获取预测天气函数中的访问URL如下:

//HeFeng.cpp文件中doUpdateCurr函数里的原本的访问URL,已不可用
String url = "https://free-api.heweather.net/s6/weather/now?lang=en&location=" + location + "&key=" + key;

//HeFeng.cpp文件中doUpdateFore函数里的原本的访问URL,已不可用
String url = "https://free-api.heweather.net/s6/weather/forecast?lang=en&location=" + location + "&key=" + key;

  如今和风天气使用的是v7版本,访问域名也发生了变化,并且自2022年3月之后,和风天气的返回数据强制进行了Gzip压缩。后来看到B站的另一个up主详细讲解了复刻太极创客这个物联网时钟的一个视频:OELD+ESP8266 时钟天气显示小电视 制作教程!!(超细致)(太极创客开源项目)。
  在该视频中也提到了解决二三页出现NA的问题,解决的博主是konger123,其更改后的 HeFeng.cpp 文件地址如下:

https://gitee.com/konger123/bilibili_weather_clock/blob/master/bilibili_clock_weather/HeFeng.cpp

  该博主对原 HeFeng.cpp 文件中的 doUpdateCur、doUpdateFore 、getMeteoconIcon函数进行了更新。其中 getMeteoconIcon函数是没有任何问题的,主要就是对天气图标代码进行了更新,可以直接拿来使用,更新后的 getMeteoconIcon函数内容如下:

String HeFeng::getMeteoconIcon(String cond_code) {  //获取天气图标  见 https://dev.qweather.com/docs/start/icons/
  if (cond_code == "100" || cond_code == "150" || cond_code == "9006") {//晴 Sunny/Clear
    return "B";
  }
  if (cond_code == "101") {//多云 Cloudy
    return "Y";
  }
  if (cond_code == "102") {//少云 Few Clouds
    return "N";
  }
  if (cond_code == "103" || cond_code == "153") {//晴间多云 Partly Cloudy/
    return "H";
  }
  if (cond_code == "104" || cond_code == "154") {//阴 Overcast
    return "D";
  }
  if (cond_code == "300" || cond_code == "301") {//阵雨 Shower Rain 301-强阵雨 Heavy Shower Rain
    return "T";
  }
  if (cond_code == "302" || cond_code == "303") {//302-雷阵雨  Thundershower / 303-强雷阵雨
    return "P";
  }
  if (cond_code == "304" || cond_code == "313" || cond_code == "404" || cond_code == "405" || cond_code == "406") {
    //304-雷阵雨伴有冰雹 Freezing Rain
    //313-冻雨 Freezing Rain
    //404-雨夹雪 Sleet
    //405-雨雪天气 Rain And Snow
    //406-阵雨夹雪  Shower Snow
    return "X";
  }
  if (cond_code == "305" || cond_code == "308" || cond_code == "309" || cond_code == "314" || cond_code == "399") {
    //305-小雨 Light Rain
    //308-极端降雨 Extreme Rain
    //309-毛毛雨/细雨 Drizzle Rain
    //314-小到中雨 Light to moderate rain
    //399-雨 Light to moderate rain
    return "Q";
  }
  if (cond_code == "306" || cond_code == "307" || cond_code == "310" || cond_code == "311" || cond_code == "312" || cond_code == "315" || cond_code == "316" || cond_code == "317" || cond_code == "318") {
    //306-中雨 Moderate Rain
    //307-大雨 Heavy Rain
    //310-暴雨  Storm
    //311-大暴雨 Heavy Storm
    //312-特大暴雨 Severe Storm
    //315-中到大雨 Moderate to heavy rain
    //316-大到暴雨 Heavy rain to storm
    //317-暴雨到大暴雨 Storm to heavy storm
    //318-大暴雨到特大暴雨 Heavy to severe storm
    return "R";
  }
  if (cond_code == "400" || cond_code == "408") {
    //400-小雪 Light Snow
    //408-小到中雪 Light to moderate snow
    return "U";
  }
  if (cond_code == "401" || cond_code == "402" || cond_code == "403" || cond_code == "409" || cond_code == "410") {
    //401-中雪 Moderate Snow
    //402-大雪 Heavy Snow
    //403-暴雪 Snowstorm
    //409-中到大雪 Moderate to heavy snow
    //410-大到暴雪 Heavy snow to snowstorm
    return "W";
  }
  if (cond_code == "407") {
    //407-阵雪 Snow Flurry
    return "V";
  }
  if (cond_code == "499" || cond_code == "901") {
    //499-雪 Snow
    //901-冷 Cold
    return "G";
  }
  if (cond_code == "500") {
    //500-薄雾 Mist
    return "E";
  }
  if (cond_code == "501" || cond_code == "509" || cond_code == "510" || cond_code == "514" || cond_code == "515") {
    //501-雾 Foggy
    return "M";
  }
  if (cond_code == "502" || cond_code == "511" || cond_code == "512" || cond_code == "513") {
    //502-霾 Haze
    return "L";
  }
  if (cond_code == "503" || cond_code == "504" || cond_code == "507" || cond_code == "508") {
    //503-扬沙 Sand
    return "F";
  }
  
  if (cond_code == "999") {//未知
    return ")";
  }
  if (cond_code == "213") {
    return "O";
  }
  if (cond_code == "200" || cond_code == "201" || cond_code == "202" || cond_code == "203" || cond_code == "204" || cond_code == "205" || cond_code == "206" || cond_code == "207" || cond_code == "208" || cond_code == "209" || cond_code == "210" || cond_code == "211" || cond_code == "212") {
    return "S";
  }
  return ")";
}

   doUpdateCur、doUpdateFore函数主要是对访问和风天气的URL进行了更新,更新后的URL内容如下:

//HeFeng.cpp文件中更新后的doUpdateCurr函数里的访问URL
 String url = "https://devapi.qweather.com/v7/weather/now?lang=en&gzip=n&location=" + location + "&key=" + key;
 
//HeFeng.cpp文件中更新后doUpdateFore函数里的访问URL
String url = "https://devapi.qweather.com/v7/weather/3d?lang=en&gzip=n&location=" + location + "&key=" + key;

  这个更新后URL也是正确的,可以访问到数据,但是对于和风天气返回的json格式数据,则只是在https请求中增加了“gzip=n”这个选项,以表示返回的数据不要进行Gzip压缩。
  但经过我的试验测试后该方法并不可行,自2022年3月之后,和风天气的json返回数据强制进行了Gzip压缩,从而极大减少网络流量,加快请求。所以接下来的主要任务就是先要对返回的json数据进行Gzip解压。
  在和风天气的官方文档中有给出不同开发语言如何处理Gzip的一些官方参考文档,具体链接如下:

https://dev.qweather.com/docs/best-practices/gzip/

  另外基于Arduino和ESP8266的JSON数据获取与解压之和风天气以及和风天气接口返回的gzip格式数据解析–esp32–espidf这两篇博客分别用了 zlib 库和 ArduinoZlib 库来实现对Gzip数据的解析。
  不过个人感觉可能都写得比较略微简单了点,对于我这种刚刚接触这方面的菜鸟小白来说,只能说看得有点头大。秉持着“能白嫖就白嫖”的原则,我开始寻找有没有哪位大神已经把内容全部都封装好了,这样我就可以直接拿来用了,毕竟医生告诉我胃不好,只能吃软饭(开个玩笑,只是自己懒得写gzip解压罢了)。

【ESP8266物联网天气时钟】解决太极创客物联网天气时钟二三页出现NA的问题——新版和风天气API以及gzip数据解压,物联网,单片机,嵌入式硬件,开源
  经过我的一番搜索查找后,发现了tignioj大佬写的一个ESP8266_Heweather开源库,大佬直接将繁杂的https请求以及json解析部分直接封装好了,直接调用几个函数就能获取到和风天气的具体解析信息,这就相当于直接把饭喂到了我嘴里,而且还亲测可用,简直是不要太棒!其开源链接如下:

https://github.com/tignioj/ESP8266_Heweather

【ESP8266物联网天气时钟】解决太极创客物联网天气时钟二三页出现NA的问题——新版和风天气API以及gzip数据解压,物联网,单片机,嵌入式硬件,开源

  所以接下来我将详细介绍下如何用 ESP8266_Heweather 开源库来解决太极创客物联网天气时钟二三页出现NA的问题。

3. 使用ESP8266_Heweather开源库

  从GitHub上将 ESP8266_Heweather 库下载完之后,还不能直接将其添加到Arduino的库里面,有些地方还需要修改下。不过在此之前,也请大家仔细阅读一下里面的README文档,里面有说到需要前期准备的工作,比如申请和风天气的API、安装相应的库等等,如下图所示:
【ESP8266物联网天气时钟】解决太极创客物联网天气时钟二三页出现NA的问题——新版和风天气API以及gzip数据解压,物联网,单片机,嵌入式硬件,开源
  上图这些准备工作我相信大家除了 ArduinoUZlib 库没有安装,别的应该都是完成了的。 ArduinoUZlib 库主要就是用来解压gzip数据的,其地址如下:

https://github.com/tignioj/ArduinoUZlib

  之后我们需要对库中src目录下的 AirQuality.cpp HttpsGetUtils.cpp 两个文件进行修改,在 AirQuality.cpp 文件下的 AirQuality::get()函数的末尾加上一句“return false;”,在 HttpsGetUtils.cpp 文件下的 HttpsGetUtils::get(String url)函数的末尾加上一句“return “”;”,分别如下图所示:

【ESP8266物联网天气时钟】解决太极创客物联网天气时钟二三页出现NA的问题——新版和风天气API以及gzip数据解压,物联网,单片机,嵌入式硬件,开源
【ESP8266物联网天气时钟】解决太极创客物联网天气时钟二三页出现NA的问题——新版和风天气API以及gzip数据解压,物联网,单片机,嵌入式硬件,开源

  其实代码的逻辑是没有问题的,只是Arduino编译器定义有返回值的函数时一定得在函数末尾加上return XXX才能通过编译,不然就会报下面这个错误:

error: control reaches end of non-void function [-Werror=return-type]

  解决好这个问题后,我们就可以把修改好的压缩包添加到Arduino的库里面了。接下来就是对 HeFeng.cpp 文件进行修改,我直接将修改后的代码放上来:

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecureBearSSL.h>
#include <ESP8266_Heweather.h>
#include "HeFeng.h"

HeFeng::HeFeng() {
}

WeatherNow weatherNow;
WeatherForecast weatherForecast;

void HeFeng::fans(HeFengCurrentData *data, String id) {  //获取粉丝数
  std::unique_ptr<BearSSL::WiFiClientSecure>client(new BearSSL::WiFiClientSecure);
  client->setInsecure();
  HTTPClient https;
  String url = "https://api.bilibili.com/x/relation/stat?vmid=" + id;
  Serial.print("[HTTPS] begin...bilibili\n");
  if (https.begin(*client, url)) {  // HTTPS
    // start connection and send HTTP header
    int httpCode = https.GET();
    // httpCode will be negative on error
    if (httpCode > 0) {
      // HTTP header has been send and Server response header has been handled
      Serial.printf("[HTTPS] GET... code: %d\n", httpCode);

      if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
        String payload = https.getString();
        Serial.println(payload);
        DynamicJsonDocument  jsonBuffer(2048);
        deserializeJson(jsonBuffer, payload);
        JsonObject root = jsonBuffer.as<JsonObject>();

        String follower = root["data"]["follower"];
        data->follower = follower;

        jsonBuffer.clear();
      }
    } else {
      Serial.printf("[HTTPS] GET... failed, error: %s\n", https.errorToString(httpCode).c_str());
      data->follower = "-1";
    }

    https.end();
  } else {
    Serial.printf("[HTTPS] Unable to connect\n");
    data->follower = "-1";
  }
}

void HeFeng::doUpdateCurr(HeFengCurrentData *data, String key, String location) {  //获取天气

  weatherNow.config(key, location, "m", "en");
  if (weatherNow.get()) { // 获取天气更新
    Serial.println(F("======Weahter Now Info======"));
    Serial.print("Server Response: ");
    Serial.println(weatherNow.getTemp());        // 获取实况温度
    data->tmp = weatherNow.getTemp();
    Serial.print(F("FeelsLike: "));
    Serial.println(weatherNow.getFeelLike());    // 获取实况体感温度
    data->fl = weatherNow.getFeelLike();
    Serial.print(F("Icon: "));
    Serial.println(weatherNow.getIcon());        // 获取当前天气图标代码
    String cond_code = (String)weatherNow.getIcon();
    String meteoconIcon = getMeteoconIcon(cond_code);
    data->iconMeteoCon = meteoconIcon;
    Serial.print(F("Weather Now: "));
    Serial.println(weatherNow.getWeatherText()); // 获取实况天气状况的文字描述
    data->cond_txt = weatherNow.getWeatherText();
    Serial.print(F("windDir: "));
    Serial.println(weatherNow.getWindDir());     // 获取实况风向
    data->wind_dir = weatherNow.getWindDir();
    Serial.print(F("WindScale: "));
    Serial.println(weatherNow.getWindScale());   // 获取实况风力等级
    data->wind_sc = weatherNow.getWindScale();
    Serial.print(F("Humidity: "));
    Serial.println(weatherNow.getHumidity());    // 获取实况相对湿度百分比数值
    data->hum = weatherNow.getHumidity();
    Serial.println(F("========================"));
  } else {    // 更新失败
    Serial.println("Update Failed...");
    Serial.print("Server Response: ");
    Serial.println(weatherNow.getServerCode()); // 参考 https://dev.heweather.com/docs/start/status-code
  }
}

void HeFeng::doUpdateFore(HeFengForeData *data, String key, String location) {  //获取预报

  weatherForecast.config(key, location, "m", "en"); // 配置请求信息
  if (weatherForecast.get()) { // 获取天气更新
    for (int i = 0; i < 3; i++) {
      Serial.print(F("==========Day "));
      Serial.print(i);
      Serial.println(F("=========="));
      Serial.print(F("Fx Data: "));
      Serial.println(weatherForecast.getFxDate(i));    // 获取预测的时间
      String datestr = weatherForecast.getFxDate(i);
      data[i].datestr = datestr.substring(5, datestr.length());
      Serial.print(F("TempMax: "));
      Serial.println(weatherForecast.getTempMax(i));      // 获取最高温度
      data[i].tmp_max = weatherForecast.getTempMax(i);
      Serial.print(F("TempMin: "));
      Serial.println(weatherForecast.getTempMin(i));      // 获取最低温度
      data[i].tmp_min = weatherForecast.getTempMin(i);
      Serial.print(F("Icon: "));
      Serial.println(weatherForecast.getIconDay(i));      // 获取天气图标代码
      String cond_code = (String)weatherForecast.getIconDay(i);
      String meteoconIcon = getMeteoconIcon(cond_code);
      data[i].iconMeteoCon = meteoconIcon;
      Serial.println(F("========================="));
    }
  } else {    // 更新失败
    Serial.println("Update Failed...");
    Serial.print("Server Response: ");
    Serial.println(weatherForecast.getServerCode()); // 参考 https://dev.heweather.com/docs/start/status-code
  }
}

String HeFeng::getMeteoconIcon(String cond_code) {  //获取天气图标  见 https://dev.qweather.com/docs/start/icons/
  if (cond_code == "100" || cond_code == "150" || cond_code == "9006") {//晴 Sunny/Clear
    return "B";
  }
  if (cond_code == "101") {//多云 Cloudy
    return "Y";
  }
  if (cond_code == "102") {//少云 Few Clouds
    return "N";
  }
  if (cond_code == "103" || cond_code == "153") {//晴间多云 Partly Cloudy/
    return "H";
  }
  if (cond_code == "104" || cond_code == "154") {//阴 Overcast
    return "D";
  }
  if (cond_code == "300" || cond_code == "301") {//阵雨 Shower Rain 301-强阵雨 Heavy Shower Rain
    return "T";
  }
  if (cond_code == "302" || cond_code == "303") {//302-雷阵雨  Thundershower / 303-强雷阵雨
    return "P";
  }
  if (cond_code == "304" || cond_code == "313" || cond_code == "404" || cond_code == "405" || cond_code == "406") {
    //304-雷阵雨伴有冰雹 Freezing Rain
    //313-冻雨 Freezing Rain
    //404-雨夹雪 Sleet
    //405-雨雪天气 Rain And Snow
    //406-阵雨夹雪  Shower Snow
    return "X";
  }
  if (cond_code == "305" || cond_code == "308" || cond_code == "309" || cond_code == "314" || cond_code == "399") {
    //305-小雨 Light Rain
    //308-极端降雨 Extreme Rain
    //309-毛毛雨/细雨 Drizzle Rain
    //314-小到中雨 Light to moderate rain
    //399-雨 Light to moderate rain
    return "Q";
  }
  if (cond_code == "306" || cond_code == "307" || cond_code == "310" || cond_code == "311" || cond_code == "312" || cond_code == "315" || cond_code == "316" || cond_code == "317" || cond_code == "318") {
    //306-中雨 Moderate Rain
    //307-大雨 Heavy Rain
    //310-暴雨  Storm
    //311-大暴雨 Heavy Storm
    //312-特大暴雨 Severe Storm
    //315-中到大雨 Moderate to heavy rain
    //316-大到暴雨 Heavy rain to storm
    //317-暴雨到大暴雨 Storm to heavy storm
    //318-大暴雨到特大暴雨 Heavy to severe storm
    return "R";
  }
  if (cond_code == "400" || cond_code == "408") {
    //400-小雪 Light Snow
    //408-小到中雪 Light to moderate snow
    return "U";
  }
  if (cond_code == "401" || cond_code == "402" || cond_code == "403" || cond_code == "409" || cond_code == "410") {
    //401-中雪 Moderate Snow
    //402-大雪 Heavy Snow
    //403-暴雪 Snowstorm
    //409-中到大雪 Moderate to heavy snow
    //410-大到暴雪 Heavy snow to snowstorm
    return "W";
  }
  if (cond_code == "407") {
    //407-阵雪 Snow Flurry
    return "V";
  }
  if (cond_code == "499" || cond_code == "901") {
    //499-雪 Snow
    //901-冷 Cold
    return "G";
  }
  if (cond_code == "500") {
    //500-薄雾 Mist
    return "E";
  }
  if (cond_code == "501" || cond_code == "509" || cond_code == "510" || cond_code == "514" || cond_code == "515") {
    //501-雾 Foggy
    return "M";
  }
  if (cond_code == "502" || cond_code == "511" || cond_code == "512" || cond_code == "513") {
    //502-霾 Haze
    return "L";
  }
  if (cond_code == "503" || cond_code == "504" || cond_code == "507" || cond_code == "508") {
    //503-扬沙 Sand
    return "F";
  }

  if (cond_code == "999") {//未知
    return ")";
  }
  if (cond_code == "213") {
    return "O";
  }
  if (cond_code == "200" || cond_code == "201" || cond_code == "202" || cond_code == "203" || cond_code == "204" || cond_code == "205" || cond_code == "206" || cond_code == "207" || cond_code == "208" || cond_code == "209" || cond_code == "210" || cond_code == "211" || cond_code == "212") {
    return "S";
  }
  return ")";
}

  另外,需要对 HeFeng.h 文件中的HeFengCurrentData这个结构体变量增加一个“风向”成员变量,即String wind_dir,更改后的结构体变量如下:

typedef struct HeFengCurrentData {

  String cond_txt;
  String fl;
  String tmp;
  String hum;
  String wind_sc;
  String wind_dir;
  String iconMeteoCon;
  String follower;
}
HeFengCurrentData;

4. 成果展示

  做完这些后基本就可以解决天气时钟二三页出现NA的问题了,由于时间比较仓促,3D外壳就没打印,简单焊接了一个洞洞板测试了下功能,演示视频以及运行中的界面如下:

【ESP8266物联网天气时钟】解决太极创客物联网天气时钟二三页出现NA的问题——新版和风天气API以及gzip数据解压,物联网,单片机,嵌入式硬件,开源
【ESP8266物联网天气时钟】解决太极创客物联网天气时钟二三页出现NA的问题——新版和风天气API以及gzip数据解压,物联网,单片机,嵌入式硬件,开源
【ESP8266物联网天气时钟】解决太极创客物联网天气时钟二三页出现NA的问题——新版和风天气API以及gzip数据解压,物联网,单片机,嵌入式硬件,开源

物联网天气时钟演示视频

5. 结语

  这是我第一次写博客,有很多不足之处,也请大家多多批评指正。
【ESP8266物联网天气时钟】解决太极创客物联网天气时钟二三页出现NA的问题——新版和风天气API以及gzip数据解压,物联网,单片机,嵌入式硬件,开源文章来源地址https://www.toymoban.com/news/detail-745147.html

到了这里,关于【ESP8266物联网天气时钟】解决太极创客物联网天气时钟二三页出现NA的问题——新版和风天气API以及gzip数据解压的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ESP8266物联网时钟-概要设计(数据上阿里云)

    一、阿里云端配置 1.1创建产品  搜索阿里云,然后点击控制台,进入阿里云物联网平台。 点击公共实例,进入到产品管理界面,这里面的操作说明就比较详细了。跟着步骤操作即可。 1.2创建设备 点击产品-创建产品,点击设备,基于产品新建涉笔 1.3创建数据模型 最终得到如

    2023年04月11日
    浏览(14)
  • 物联网小项目——墨水屏时钟(STM32+ESP8266实现)

    无意间在网上看到开源的使用墨水屏打造的桌面时钟,当个桌面小摆件可谓是十分优雅,于是就萌生出了自己DIY一个的想法。这个墨水屏时钟具有以下特点 时间日期的显示和自动校准 自动获取实时天气 半夜自动进入休眠 支持微信智能配网 目前已经实现软件功能,但是硬件

    2024年02月09日
    浏览(41)
  • 如何使用ESP8266微控制器和Nextion显示器为Home Assistant展示温度传感器和互联网天气预报

    第一部分:引言与项目概述 在智能家居领域,实时监控和显示环境数据已经成为了一个热门的话题。无论是室内温度、室外温度,还是游泳池的温度,都可以通过各种传感器轻松获取。但如何将这些数据以直观、美观的方式展现出来呢?本文将详细介绍如何使用带有ESP8266微

    2024年02月07日
    浏览(41)
  • ESP8266获取天气预报信息,并使用CJSON解析天气预报数据

    当前文章介绍如何使用ESP8266和STM32微控制器,搭配OLED显示屏,制作一个能够实时显示天气预报的智能设备。将使用心知天气API来获取天气数据,并使用MQTT协议将数据传递给STM32控制器,最终在OLED显示屏上显示。 心知天气是一家专业的气象数据服务提供商,致力于为全球用户

    2024年02月10日
    浏览(38)
  • ESP8266使用AT指令获取时间和心知天气

    一.硬件:ESP8266,USB TO TTL模块,软件:串口调试助手 二.在心知官网注册账号:心知天气 - 高精度气象数据 - 天气数据API接口 - 行业气象解决方案 三.连接esp8266和usb转ttl,打开串口调试助手 四.发送AT指令 1.复位模块 发送 AT+RST 返回 ready 2.测试AT指令 发送 AT 返回 OK 3.配置STA模式

    2024年02月04日
    浏览(42)
  • esp32+lvgl--桌面多功能天气时钟

    功能: 1、通过网络获取日期、时间以及当地天气温度 2、有模拟时钟、背景切换、语言切换等功能 esp32+lvgl桌面时钟天气 一、准备材料 esp32开发板、1.28寸圆屏幕(非触摸)。 二、软件开发过程 1、获取网络天气和时间。 esp32自带2.4gwifi功能。使用wifi功能需包含头文件WiFi.h,

    2024年02月02日
    浏览(36)
  • STM32使用ESP8266模块AT指令连接心知天气API获取天气信息

    由于之前使用STM32单片机来开发一些物联网的小项目,接触到了WIFI模块ESP8266,所以写下来记录一下。 本文主要介绍的是STM32通过发送AT指令集来控制ESP8266 WIFI模块连接WiFi并与心知天气API建立TCP连接获取天气信息。 ESP8266我使用的是正点原子的ATK-ESP8266,已经提前烧录好AT指令集

    2023年04月08日
    浏览(54)
  • ESP8266获取网络时间 实时时钟

    程序现象   1.发送指令AT+RST重启模块使应用模式更改生效; 2.发送指令ATE0取消回显 3.使用串口发送指令AT+CWMODE=1设置模块Wi-Fi应用模式为Station模式; 4.发送指令AT+CWJAP =\\\"ssid\\\",\\\"pwd\\\"连接AP; 5.发送指令AT+CIPMUX=0设置模块为单路连接模式,模块默认为单路连接模式; 6.发送指令AT+C

    2024年02月05日
    浏览(54)
  • 从零开始制作一个基于STM32和ESP8266-01S的智能时钟(3)ESP8266-01S模块(上)

    提示:这里可以添加本文要记录的大概内容:之前在忙着,现在继续补充完整,然后这次的ESP-01S的典型应用图是没有连接RST引脚的,但是我的项目是用到了RST引脚的,所以需要使用跳线连接一下RST引脚。 本项目需要基础的stm32单片机知识,这里我推荐 链接:https://www.bilibil

    2024年02月03日
    浏览(38)
  • 【STM32训练—WiFi模块】第二篇、STM32驱动ESP8266WiFi模块获取天气

    目录 第一部分、前言 1、获取心知天气API接口 2、硬件准备 第二部分、电脑串口助手调试WIFI模块获取天气 1、ESP8266获取天气的流程 2、具体步骤 第三部分、STM32驱动ESP8266模块获取天气数据 1、天气数据的解析 1.1、什么函数来解析天气数据? 2.1、解析后的数据如何使用?  2、

    2024年02月09日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包