IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 基于arduino框架(使用VSCode)实现ESP32的一些入门操作(学习笔记)——实现爬取天气 -> 正文阅读

[开发工具]基于arduino框架(使用VSCode)实现ESP32的一些入门操作(学习笔记)——实现爬取天气

零、前言

在这里我们先要认识json:

JOSN是一种轻量级的数据交换格式,遵循以下规则:

1.并列的数据之间用逗号(,)分隔

2.映射用冒号(:)表示

3.并列数据的集合(数组)用方括号([])表示

4.映射的集合(对象)用大括号({})表示

一、连接WiFi

由于要使用WiFi和连接到互联网,我们要在头文件中首先引入WiFi和HTTPClient这两个库,然后通过begin函数来连接上WiFi

在这里WiFi.begin("WiFi名称",?"WiFi密码");

输入相对应的WiFi名称和密码就可以连接上WiFi了,

while (WiFi.status() != WL_CONNECTED)
	{ //这里是阻塞程序,直到连接成功
		delay(300);
		Serial.print(".");
	}

然后使用阻塞程序,意思就是当你的WiFi没有连接上去时会一直重新连接,如果一直连不上(串口显示Connecting...),因该是WiFi名称或者密码连接错误。

接着在set up函数中打印IP地址用来证明WiFi连接成功。

void setup()
{

	Serial.begin(115200); // open the serial port at 115200 bps;
	delay(100);

	Serial.print("Connecting.. ");

	WiFi_Connect();

	Serial.println("WiFi connected");

	Serial.println("IP address: ");
	Serial.println(WiFi.localIP());
}

二、爬取信息

下面定义一个长整型变量wenDu用来显示一会要打印出来的温度。然后定义一个字符串存放天气的url,这里我用的是和风天气来爬取温度,

	long int wenDu = 0;
	String weatherUrl = "https://devapi.qweather.com/v7/weather/now?location=113.62701403693164,34.747358802645046&key=b408a1df55fa4c22b270be9a6a27f561&gzip=n&en";
	DynamicJsonDocument doc(1024);

然后就是使用begin函数http.begin(weatherUrl)来进入这样的一个网址,定义一个httpCode来存放这个网址所返回的代码,如果能够正常进入的话这个返回的http.GET()应该返回的值为200。

然后当收到正确的内容后,我们定义一个字符串用于存放爬取网站的json信息

		Serial.printf("HTTP Get Code: %d\r\n", httpCode);
		if (httpCode == HTTP_CODE_OK) // 收到正确的内容
		{
			String resBuff = http.getString();

			//输出示例{"code":"200","updateTime":"2021-10-03T11:32+08:00","fxLink":"http://hfx.link/1tsq1","now":{"obsTime":"2021-10-03T11:23+08:00","temp":"28","feelsLike":"31","icon":"104","text":"阴","wind360":"180","windDir":"南风","windScale":"2","windSpeed":"7","humidity":"73","precip":"0.0","pressure":"993","vis":"11","cloud":"100","dew":"21"},"refer":{"sources":["QWeather","NMC","ECMWF"],"license":["no commercial use"]}}
			Serial.println(resBuff);

			deserializeJson(doc, resBuff);
			wenDu = doc["now"]["temp"];
			Serial.printf("温度: %ld \r\n", wenDu);
		}

三、开始使用json解析

?然后通过在线解析工具我们可以看到json想要传递给我们的一些讯息,在这里我要用到的信息温度就是now这一对象的一个属性temp(温度),就可以使用doc[][]来进行解析,第一个参数是对象名称,第二个参数是这个对象中的一个属性的名称,这样子就能得到我们想要的数据,最后打印出来就可以了。


		Serial.printf("HTTP Get Error: %s\n", http.errorToString(httpCode).c_str());

成品示例:

最后附上整个代码段

#include <Arduino.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include "../lib/ArduinoJson/ArduinoJson.h"

// JOSN是一种轻量级的数据交换格式,遵循以下规则:
// 1.并列的数据之间用逗号(,)分隔
// 2.映射用冒号(:)表示
// 3.并列数据的集合(数组)用方括号([])表示
// 4.映射的集合(对象)用大括号({})表示

//	WiFi的初始化和连接
void WiFi_Connect()
{
	WiFi.begin("CMCC-CVe2", "ardxy3eq");
	while (WiFi.status() != WL_CONNECTED)
	{ //这里是阻塞程序,直到连接成功
		delay(300);
		Serial.print(".");
	}
}

void setup()
{

	Serial.begin(115200); // open the serial port at 115200 bps;
	delay(100);

	Serial.print("Connecting.. ");

	WiFi_Connect();

	Serial.println("WiFi connected");

	Serial.println("IP address: ");
	Serial.println(WiFi.localIP());
}
	long int wenDu = 0;
	String weatherUrl = "https://devapi.qweather.com/v7/weather/now?location=113.62701403693164,34.747358802645046&key=b408a1df55fa4c22b270be9a6a27f561&gzip=n&en";
	DynamicJsonDocument doc(1024);
  void getWeather()
  {
	  HTTPClient http;
	  http.begin(weatherUrl); 
	  int httpCode = http.GET();
	  if (httpCode > 0)
	{
		// httpCode will be negative on error
		Serial.printf("HTTP Get Code: %d\r\n", httpCode);
		if (httpCode == HTTP_CODE_OK) // 收到正确的内容
		{
			String resBuff = http.getString();

			//输出示例{"code":"200","updateTime":"2021-10-03T11:32+08:00","fxLink":"http://hfx.link/1tsq1","now":{"obsTime":"2021-10-03T11:23+08:00","temp":"28","feelsLike":"31","icon":"104","text":"阴","wind360":"180","windDir":"南风","windScale":"2","windSpeed":"7","humidity":"73","precip":"0.0","pressure":"993","vis":"11","cloud":"100","dew":"21"},"refer":{"sources":["QWeather","NMC","ECMWF"],"license":["no commercial use"]}}
			Serial.println(resBuff);

			deserializeJson(doc, resBuff);
			wenDu = doc["now"]["temp"];
			Serial.printf("温度: %ld \r\n", wenDu);
		}
	}
	else
	{
		Serial.printf("HTTP Get Error: %s\n", http.errorToString(httpCode).c_str());
	}

	http.end();

  }
void loop()
{

	getWeather();
	delay(5000);
	delay(5000);
}

本篇文章参考:

ESP32超详细教程-使用VSCode(基于Arduino框架)_哔哩哔哩_bilibili

和风天气开发平台:和风天气开发平台 ~ 高效强大的天气API,天气SDK和天气插件 (qweather.com)

本人也是单片机小白,本篇文章仅用于学习分享的目的,文章中有错误的地方欢迎指出,希望大家友好交流谢谢你的观看。

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-10-04 13:02:21  更:2021-10-04 13:03:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/23 13:22:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计