因为时间比较仓促,目前存在许多问题没有解决。

首先进行aduino环境配置,具体方法可参考以下链接,若选错开发板型号编译会报错配置esp8266开发板的Arduino开发环境_交通运输怪味张的博客-CSDN博客_esp8266arduino

心知天气网址:https://www.seniverse.com/

进入心知天气注册账号,之后进入产品文档,便可以查看API接口,也就是我们需要请求访问的网址。

查看自己的私钥:

获取信息后可尝试浏览器输入API网址查看网址内容。

接下来是esp8266程序。

需要安装Arduino_JSON库和u8g2库,分别用来解析JSON数据和oled显示,具体方法点击菜单栏 工具->管理库... 搜索框搜索对应库便可以安装。头文件编译报错多半是没有安装所需的库。

下面给出Aduino代码,基本思路很简单,链接自己热点,然后向心知天气发送请求获取天气,把网页内容以字符串方式赋值给变量,再从中找出自己想要的部分。为了以防万一,我设置了两个可连接的热点,它会选择速度较快的自动连接。以下"xxx"为需要自己修改的部分。

#include <ESP8266WiFiMulti.h>   //  ESP8266WiFiMulti库
#include <ESP8266WiFi.h>
#include <U8g2lib.h>#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endifESP8266WiFiMulti wifiMulti;     // 建立ESP8266WiFiMulti对象,对象名称是 'wifiMulti'const char* host = "api.seniverse.com"; // 网络服务器地址
const int httpPort = 80;              // http端口80// 设置wifi接入信息(请根据您的WiFi信息进行修改)
const char* ssid1 = "xxx";
const char* password1 = "xxx";const char* ssid2 = "xxx";
const char* password2 = "xxx";String City = "xxx";//城市  小写拼音
String My_Key = "xxxx";//自己的私钥,禁止泄露
String url = "/v3/weather/now.json?key=" + My_Key +"&location=" + City + "&language=zh-Hans&unit=c&start=0&days=3";String line;
String pp;
String inputy;
String inputs;
String inputt;
int ty;
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
// All Boards without Reset of the Displayvoid setup() {//初始化串口设置Serial.begin(9600);Serial.println("");//设置ESP8266工作模式为无线终端模式WiFi.mode(WIFI_STA);//开始连接wifi// WiFi.begin(ssid, password);wifiMulti.addAP(ssid1, password1); // 将需要连接的一系列WiFi ID和密码输入这里wifiMulti.addAP(ssid2, password2); // ESP8266-NodeMCU再启动后会扫描当前网络int i = 0;                                 while (wifiMulti.run() != WL_CONNECTED) {  // 此处的wifiMulti.run()是重点。通过wifiMulti.run(),NodeMCU将会在当前delay(1000);                             // 环境中搜索addAP函数所存储的WiFi。如果搜到多个存储的WiFi那么NodeMCUSerial.print(i++); Serial.print(' ');    // 将会连接信号最强的那一个WiFi信号。}    //等待WiFi连接,连接成功打印IPwhile (WiFi.status() != WL_CONNECTED) {delay(1000);Serial.print(".");}Serial.println("");Serial.println("WiFi Connected!");wifiClientRequest(); u8g2.begin();
}void loop(){wifiClientRequest();drawSomethingLoop();  delay(20);}// 向服务器发送HTTP请求
void wifiClientRequest(){// 建立WiFi客户端对象,对象名称clientWiFiClient client;    // 建立字符串,用于HTTP请求String httpRequest =  String("GET ")+ url + " HTTP/1.1\r\n" +"Host: " + host + "\r\n" +"Connection: close\r\n" +"\r\n";// 通过串口输出连接服务器名称以便查阅连接服务器的网址                      Serial.print("Connecting to "); Serial.print(host); if (client.connect(host, httpPort)){ Serial.println(" Success!");        // 连接成功后串口输出“Success”信息client.print(httpRequest);          // 向服务器发送HTTP请求Serial.println("Sending request: ");// 通过串口输出HTTP请求信息内容以便查阅Serial.println(httpRequest);     Serial.println("Web Server Response:");        while (client.connected() || client.available()){ if (client.available()){line = client.readStringUntil('\n');pp+=line;}}Serial.println(pp);int y = pp.indexOf("Date:");//找时间int yy = pp.lastIndexOf("GMT");inputy = pp.substring(y+6, yy); //把含有时间的数据取出进行处理Serial.println("inputy:"+inputy);int s = pp.indexOf("text");//找天气int ss = pp.lastIndexOf("code");inputs = pp.substring(s+7, ss-3); if(inputs=="多云"){inputs="w:cloudy";}else if(inputs=="晴"){inputs="w:Sunny";}else if(inputs=="阴"){inputs="w:overcast";}else if(inputs=="小雨"){inputs="w:light rain";}else if(inputs=="中雨"){inputs="w:moderate rain";}else if(inputs=="大雨"){inputs="w:heavy rain";}else{inputs="w:unknown";}Serial.println("inputs:"+inputs);int t = pp.indexOf("temperature");//找温度int tt = pp.lastIndexOf("last_update");inputt = pp.substring(t+13, tt-3);Serial.println("inputt:"+inputt);inputt="temperature:"+inputt;} else{    // 如果连接不成功则通过串口输出“连接失败”信息Serial.println(" connection failed!");client.stop();}pp="";
}void u8g2Prepare() {u8g2.setFont(u8g2_font_profont10_mf);u8g2.setFontRefHeightExtendedText();u8g2.setDrawColor(1);u8g2.setFontPosTop();u8g2.setFontDirection(0);
}bool drawSomethingLoop() {u8g2.firstPage();  do {u8g2Prepare();u8g2.drawStr(0, 0, inputy.c_str());u8g2.setFont(u8g2_font_roentgen_nbp_tr);u8g2.drawStr(0, 15, City.c_str());u8g2.setFont(u8g2_font_pcsenior_8f );u8g2.drawStr(0, 30, inputs.c_str());u8g2.setFont(u8g2_font_6x12_m_symbols );u8g2.drawStr(0, 40,inputt.c_str());} while(u8g2.nextPage());
}

以下为实际效果图,内容在显示时不会刷新,因此时间上会存在一些误差,显示内容在刷新时会有一小段时间的黑屏,而且获取到的时间为零时区标准时间,所以比实际要晚8小时。另外因为u8g2默认只能显示英文,而获取到的实时天气状况为汉字,尝试跟随网上的教程导入中文没有成功,只好临时把中文字符在程序里转换成英文再输出。当然也可以使用除u8g2以外的其他方式显示,具体可自行百度。

ESP8266+oled连接心知天气显示时间和实时天气相关推荐

  1. STM32使用ESP8266模块AT指令连接心知天气API获取天气信息

    由于之前使用STM32单片机来开发一些物联网的小项目,接触到了WIFI模块ESP8266,所以写下来记录一下.本文主要介绍的是STM32通过发送AT指令集来控制ESP8266 WIFI模块连接WiFi ...

  2. ESP8266AT固件获取时间和连接心知天气

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.获取时间 二.连接心知天气 总结 前言 通过AT指令获取时间和连接心知天气: 提示:以下是本篇文章正文内容,下面案 ...

  3. esp8266点灯LCD12864心知天气+农历+空气质量ArduinoJson6

    接上篇 esp8266 mixly blynk远程控制 + NTP+天气预报及一体 智能钟 时钟原理图见上篇文章 心知天气.农历API用的是ArduinoJson6解析.且采用的char* 变量 .上 ...

  4. ESP8266+OLED屏实现天气预报+温度显示+NTP时间同步5屏带中文显示改进版

    ESP8266+OLED屏实现天气预报+温度显示+NTP时间同步5屏带中文显示改进版 在原来5屏内容基础上,进行了显示细节的优化, 1.湿度显示改成中文标识. 2.刷出第五页出现重影问题,添加了清屏处 ...

  5. ESP8266+OLED屏实现天气预报+温度显示+NTP时间同步6屏带中文显示版本迭代持续更新

    ESP8266+OLED屏实现天气预报+温度显示+NTP时间同步6屏带中文显示版本迭代持续更新 ✨版本更新说明:✨

  6. ESP8266+OLED屏实现天气预报+温度显示+NTP时间同步

    ESP8266+OLED屏实现天气预报+温度显示+NTP时间同步

  7. ESP8266+OLED屏实现天气预报+温度显示+NTP时间同步4屏带中文显示

    ESP8266+OLED屏实现天气预报+温度显示+NTP时间同步4屏带中文显示 最新视频链接 气象站 气象站+图形轮回播放 2 ESP8266气象站+图形轮回播放 3 ESP8266气象站+图像显示播 ...

  8. ESP8266+OLED屏实现天气预报+温度显示+NTP时间同步6屏带中文显示V9.2.1

    ESP8266+OLED屏实现天气预报+温度显示+NTP时间同步6屏带中文显示V9.2.1 作品展示:https://www.ixigua.com/6974696416463553039?logTag ...

  9. stm32+esp8266 GET请求心知天气的简单方法

    文章目录 前言 一.ESP8266调试 二.代码部分 1.esp8266部分 2.单片机代码部分 总结 前言 因为之前学习stm32+esp8266请求心知天气时看的不是很懂,然后在成功调试出来之后发 ...

最新文章

  1. 给妹子讲python-S01E18初探函数作用域
  2. debug —— list调试命令
  3. 二、八、十、十六进制及小数间的转换
  4. easyui打开新的选项卡_IntelliJ IDEA 2020.3 正式版发布,多项超酷新功能
  5. 肝!分享 2 本高质量算法书籍!
  6. C# 系统应用之使用Pancel控件同一窗体切换页面
  7. 我们用5分钟写了一个跨多端项目
  8. Spring Cloud教程–使用Spring Cloud Bus自动刷新配置更改
  9. postman怎么导出测试用例_利用Charles抓包巧转接口自动化测试用例
  10. Maven学习总结(24)——Maven版本管理详解
  11. sql2005 reporting service,我总算找到一个完全程序化绑定报表(ado.net dataset 绑定reprot)的方案,谁能再给我些其他建议呢?...
  12. Learning Python 012 函数式编程 1 高阶函数
  13. atitit.事件驱动的总结attilax
  14. Vue.js尚硅谷视频学习笔记(第一章:Vue 核心)
  15. 用C#通过sql语句操作Sqlserver数据库教程
  16. win10更改hosts文件
  17. 【APP项目环境及发布平台】
  18. c++逆天改命进阶--二叉树练习题
  19. IT战略规划项目方法论(德勤 埃森哲 IBM 凯捷)
  20. [娱乐向]如何使用STM32播放篮球视频

热门文章

  1. 工行验证码自动识别》(邹健)二
  2. 回顾 微信小程序template模板的使用 循环 赋值 点击事件
  3. dfmea文件_DFMEA(潜在设计方案失效模式及后果分析)
  4. spring循环依赖和三级缓存
  5. 猿创征文|数据开发也能双轮驱动?
  6. 随机分组工具(工具)
  7. Linux squid构建-传统模式和透明模式部署
  8. Java实现pdf转化为png图片
  9. php简单选择题,PHP面试笔试题目选择题
  10. Redis-高可用方案