ESP8266-NodeMCU——从苏宁API获取实时天气

前言

        本篇介绍如何使用ESP8266-NodeMCU从苏宁API获取实时天气,苏宁API:点击跳转

        其显示如下:     

ESP8266-NodeMCU——从苏宁API获取实时天气_第1张图片

         其中我们要抓取的是红线部分的内容,并通过串口打印。当然,这部分也可以用来显示在OLED上,我之前就是这么玩。

        在正式开始前,需要了解使用WiFiManager库连接wifi的过程,下文代码中的wifi连接用了WiFiManager库,没有将要连接的wifi名称和密码直接写入代码,具体操作可以跳转参考: ESP8266-NodeMCU——使用WiFiManager库连接wifi

一、软件准备

(1)Arduino IDE

二、硬件准备

(1)ESP8266-NodeMCU

        

(2)一根可以传输数据的micro USB线

 三、实现代码

#include      
#include 
#include 

  char Json_Time[36];   //从苏宁API获取的Json数据(已解析后)的数组
  const String timeUrl = "http://quan.suning.com/getSysTime.do";  //苏宁API地址
  String timeMsg="";          //抓取时间部分
  String timeAfterParse=" ";  //Json解析后的有效数据缓存字符串
  char flag;
  
String callHttp(String httpUrl);    //抓取时间网站的Json数据
String parseJsonTime(String tjson); //解析Json数据


void setup() 
{ 
  Serial.begin(115200);     //串口波特率设置为115200
  connectWifi();            //连接WiFi,连接后才会继续往下运行 

}

void loop() 
{   
      timeMsg = callHttp(timeUrl);   //获取JSon数据
      if(timeMsg!="" )             //如果成功获取数据
     { 
      timeAfterParse = parseJsonTime(timeMsg); //解析Json数据
      timeAfterParse.toCharArray(Json_Time,timeAfterParse.length() + 1);  //Json_Time会变成字符串数组,内容和timeAfterParse一样    
      Serial.println(Json_Time);
     }  
    delay(900);
}

//================================================连接WiFi==================================================================
void connectWifi(){
  
WiFiManager wifiManager;
wifiManager.autoConnect("ESP8266-NodeMCU");   

}

//=================================================解析Json数据为字符串=====================================================
String parseJsonTime(String tjson){

  const size_t capacity =96;
  DynamicJsonDocument tdoc(capacity);   
  
  deserializeJson(tdoc, tjson); // 反序列化数据
  String datetime = tdoc["sysTime2"].as();  // 获取解析后的数据信息
  return datetime;
}

//=================================================抓取时间网站的Json数据=====================================================
String callHttp(String httpUrl) { 
  HTTPClient hClient;   
  String message;
  hClient.begin(httpUrl);      //连接API地址 
  
  int httpCode = hClient.GET();   //请求获取Json数据
  if (httpCode > 0) {
    if (httpCode == HTTP_CODE_OK) {
      String payload = hClient.getString();   //数据转移
      message = payload;
    }
  } else {
    message = "[1-HTTP]failed, error:" + String(hClient.errorToString(httpCode).c_str());  //获取失败就报错
  }
  hClient.end();   //关闭API
  return message;  //返回信息
}

四、实现效果

ESP8266-NodeMCU——从苏宁API获取实时天气_第2张图片

         网络不好可能效果没有那么理想,可能不能每秒都抓取到,不过我在测试的时候,好像是API接口本身就卡,用电脑打开有时候也显示超时,之前玩的时候还是挺流畅的

你可能感兴趣的:(#,ESP8266-NodeMCU,嵌入式硬件,c#,json,单片机,物联网)