ESP8266实现获取天气情况

利用太极创客提供的ESP8266 心知天气库获取天气情况并显示

心知天气库地址:

ESP8266-心知天气: 本库主要功能为使用ESP8266物联网开发板通过心知天气 API 获取天气等信息。

clone到本地: 

git clone https://gitee.com/taijichuangke/ESP8266-Seniverse.git

安装该库,只需要将整个目录 复制到C:\Users\用户名\AppData\Local\Arduino15\libraries

/**********************************************************************
项目名称/Project          : 零基础入门学用物联网
程序名称/Program name     : weather_now(rev.002)
团队/Team                : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)
作者/Author              : CYNO朔
日期/Date(YYYYMMDD)     : 初版建立时间20200602(最新修订时间20200607)
程序目的/Purpose          : 
使用ESP8266_Seniverse库通过心知天气服务器获取实时天气信息。
-----------------------------------------------------------------------
本程序所属仓库网址
GitHub: https://github.com/taichi-maker/ESP8266-Seniverse
Gitee: https://gitee.com/taijichuangke/ESP8266-Seniverse
-----------------------------------------------------------------------
其它说明 / Other Description
心知天气API文档说明: https://www.seniverse.com/docs

本程序为太极创客团队制作的免费视频教程《零基础入门学用物联网 》中一部分。该教程系统的
向您讲述ESP8266的物联网应用相关的软件和硬件知识。以下是该教程目录页:
http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/                                
***********************************************************************/
#include <Arduino.h>
#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <ESP8266_Seniverse.h>

#include <U8g2lib.h>

const char* ssid     = "ssid";       // 连接WiFi名(此处使用taichi-maker为示例)
                                            // 请将您需要连接的WiFi名填入引号中
const char* password = "password";          // 连接WiFi密码(此处使用12345678为示例)                                         // 请将您需要连接的WiFi密码填入引号中
                                            // 请将您需要连接的WiFi密码填入引号中

// 心知天气HTTP请求所需信息
// 请对以下信息进行修改,填入您的心知天气私钥以及需要获取天气信息的城市和温度单位
// 如需进一步了解心知天气API所提供的城市列表等信息,请前往心知天气官方产品文档网址:
// https://www.seniverse.com/docs
String reqUserKey = "私钥";   // 私钥
String reqLocation = "beijing";            // 城市
String reqUnit = "c";                      // 摄氏/华氏

WeatherNow weatherNow;  // 建立WeatherNow对象用于获取心知天气信息
IPAddress ip;
char ipStr[16]; // 假设 IPv4 地址最大长度为 15 字符加上一个结束符 '\0'  


U8G2_ST7565_ERC12864_ALT_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ D4, /* data=*/ D3, /* cs=*/ D0, /* dc=*/ D1, /* reset=*/ D2); 

void setup(){
  Serial.begin(9600);          
  Serial.println("");

  u8g2.begin();
  u8g2.enableUTF8Print();


  
  connectWiFi();    // 连接wifi

  // 配置心知天气请求信息
  weatherNow.config(reqUserKey, reqLocation, reqUnit);
}
 
void loop(){
  
  char buffer[32];
  
 
    if(weatherNow.update()){  // 更新天气信息

    Serial.println(F("======Weahter Info======"));
    
    Serial.print("Server Response: ");
    Serial.println(weatherNow.getServerCode()); // 获取服务器响应码
    Serial.print(F("Weather Now: "));
    Serial.print(weatherNow.getWeatherText());  // 获取当前天气(字符串格式)
    Serial.print(F(" "));
    Serial.println(weatherNow.getWeatherCode());// 获取当前天气(整数格式)
    Serial.print(F("Temperature: "));
    Serial.println(weatherNow.getDegree());     // 获取当前温度数值



    Serial.print(F("Last Update: "));
    Serial.println(weatherNow.getLastUpdate()); // 获取服务器更新天气信息时间
    Serial.println(F("========================"));  

    u8g2.clearBuffer();					// clear the internal memory
    u8g2.setFont(u8g2_font_ncenB12_tr);	// choose a suitable font
    u8g2.drawStr(0,16,"Weahter Info");	// write something to the internal memory
    u8g2.setFont(u8g2_font_ncenB08_tr);	// choose a suitable font
    //u8g2.drawStr(0,40,"Temperature:");	
    u8g2.drawStr(0, 60, ipStr);
    
    u8g2.drawStr(0,40,weatherNow.getWeatherText().c_str());
    sprintf(buffer, "%d", weatherNow.getDegree());
    u8g2.setFont(u8g2_font_ncenB24_tr);	// choose a suitable font
    u8g2.drawStr(90,60,buffer);	       
    u8g2.sendBuffer();

  } else {    // 更新失败
    Serial.println("Update Fail...");   
    Serial.print("Server Response: ");          // 输出服务器响应状态码供用户查找问题
    Serial.println(weatherNow.getServerCode()); // 心知天气服务器错误代码说明可通过以下网址获取
    u8g2.clearBuffer();					// clear the internal memory
    u8g2.setFont(u8g2_font_ncenB12_tr);	// choose a suitable font
    u8g2.drawStr(0,16,"Update Fail...");	// write something to the internal memory
    u8g2.sendBuffer();
  }                                             // https://docs.seniverse.com/api/start/error.html
  
  delay(30000);
}

// 连接WiFi
void connectWiFi(){
  WiFi.begin(ssid, password);                  // 启动网络连接
  Serial.print("Connecting to ");              // 串口监视器输出网络连接信息
  Serial.print(ssid); Serial.println(" ...");  // 告知用户NodeMCU正在尝试WiFi连接
  
  u8g2.clearBuffer();					// clear the internal memory
  u8g2.setFont(u8g2_font_ncenB12_tr);	// choose a suitable font
  u8g2.drawStr(0,16,"Connecting to ...");	// write something to the internal memory
  u8g2.sendBuffer();

  int i = 0;                                   // 这一段程序语句用于检查WiFi是否连接成功
  while (WiFi.status() != WL_CONNECTED) {      // WiFi.status()函数的返回值是由NodeMCU的WiFi连接状态所决定的。 
    delay(1000);                               // 如果WiFi连接成功则返回值为WL_CONNECTED                       
    Serial.print(i++); Serial.print(' ');      // 此处通过While循环让NodeMCU每隔一秒钟检查一次WiFi.status()函数返回值
  }                                            // 同时NodeMCU将通过串口监视器输出连接时长读秒。
                                               // 这个读秒是通过变量i每隔一秒自加1来实现的。                                              
  Serial.println("");                          // WiFi连接成功后
  Serial.println("Connection established!");   // NodeMCU将通过串口监视器输出"连接成功"信息。
  Serial.print("IP address:    ");             // 同时还将输出NodeMCU的IP地址。这一功能是通过调用
  ip=WiFi.localIP();
  snprintf(ipStr, sizeof(ipStr), "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
  Serial.println(ip);              // WiFi.localIP()函数来实现的。该函数的返回值即NodeMCU的IP地址。  
}
/*-----------------------------------------------------------------------
修订历史/Revision History  
日期/Date    作者/Author      参考号/Ref    修订说明/Revision Description
20200603      CYNO朔           001        add http response code check
20200603      CYNO朔           002        change file name to ESP8266_Seniverse
-----------------------------------------------------------------------*/                                 

 

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
ESP8266是一款低功耗的Wi-Fi模块,可以轻松地与各种设备和应用进行通信。要获取天气信息,可以使用ESP8266的SDK(Software Development Kit)来实现。 首先,我们需要一个可靠的天气数据源。可以选择使用一些第三方天气API,例如,OpenWeatherMap、Weather.com等。这些API提供了实时的天气数据和预报来满足我们的需求。 接下来,需要使用ESP8266的SDK来进行网络连接和数据处理。ESP8266的SDK支持TCP/IP协议栈,可以通过HTTP请求从天气API获取天气数据。具体而言,我们需要实现以下步骤: 1. 设置Wi-Fi连接:使用ESP8266的SDK来配置Wi-Fi连接参数,例如SSID和密码。 2. 建立HTTP连接:使用ESP8266的SDK建立TCP连接,并发送HTTP请求到天气API的服务器地址。 3. 接收和处理数据:使用ESP8266的SDK接收来自服务器的HTTP响应,并解析其中的天气数据。 4. 根据需求进行数据处理:根据需要,可以提取所需的天气信息,例如温度、湿度和天气状况等。 5. 可选的展示方式:可以将实时的天气信息通过串口输出,在串口监视器中查看结果。也可以通过LCD显示屏或者其他外部设备来实现可视化展示。 总结来说,使用ESP8266的SDK可以很方便地获取天气数据。通过配置Wi-Fi连接和发送HTTP请求,我们可以从天气API获取数据,并进行相应的数据处理和展示。这种方式能够使我们的设备具备实时获取和展示天气信息的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值