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

前言

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

        其显示如下:     

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

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

一、软件准备

(1)Arduino IDE

二、硬件准备

(1)ESP8266-NodeMCU

        

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

 三、实现代码

#include <WiFiManager.h>     
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>

  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<String>();  // 获取解析后的数据信息
  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;  //返回信息
}

四、实现效果

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式创客工坊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值