获取网络请求
这节课我们来学习如何使用 ESP32 获取网络请求。
实验原理
ESP32 支持 2.4G 网络,那我们可以通过发送 HTTP 请求来获取实时天气数据。一般来说,天气数据是由一些公共 API 接口提供的,这些接口需要向它们发送 HTTP 请求以获取数据。
HTTP 请求与 API
当我们在浏览器中输入网址或者使用应用程序时,我们实际上是向服务器发出请求。HTTP 请求是客户端(如浏览器)与服务器之间通信的方式,用于获取或发送 Web 资源。这些资源可以是文本文件、图像、脚本等,客户端通过 HTTP 协议发起请求,服务器返回相应的响应。
HTTP 请求通常由以下几个部分组成:
请求行
:包含请求方法、请求 URL 和 HTTP 协议版本,例如
GET https://www.baidu.com/content-search.xml HTTP/1.1
GET
是请求方法,https://www.baidu com/
是 URL 地址,HTTP/1.1
指定了协议版本。
HTTP 协议版本一般都是 HTTP/1.1
,URL 是你要访问的地址,而请求方法除了 GET 还有 POST、PUT、DELETE 经常使用的 4 个请求方式,以及一些其他的请求方法。
请求头
:包含与请求相关的信息,例如浏览器类型、请求时间等。请求体
:包含请求所需的数据。
我们虽然可以对任意网址发送网络请求,但是这样毫无意义,比如,我想要获取某个地区的天气状况,就需要调用相对应的接口,也就是 API。
API(Application Programming Interface)是指应用程序编程接口,它定义了应用程序之间进行通信的方式和规范。API 允许不同的应用程序之间进行数据交换,使得应用程序可以共享资源和信息,从而提高应用程序的效率和可用性。
API 通常使用 HTTP 请求来提供服务,客户端通过发送 HTTP 请求访问 API,服务器则通过 HTTP 响应返回所需的数据。API 可以提供许多不同的服务,例如访问数据库、获取实时数据、处理图像等。
当我们使用别人提供的 API 的时候就需要遵守别人制定的规则,使用对应的链接、请求方法等等,我们需要查看 API 文档来获取这些信息。比如,我们今天使用聚合数据的 API 接口。

总之,HTTP 请求是客户端与服务器之间通信的方式,API 则是应用程序之间通信的方式。通过 HTTP 请求访问 API,我们可以实现不同应用程序之间的数据交换和共享。
JSON 数据
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于 Web 应用程序之间的数据传输。它是一种文本格式,易于阅读和编写,并且可以被各种编程语言支持。
JSON 数据由键值对组成,其中键是字符串,值可以是字符串、数字、布尔值、数组、对象等数据类型。一个基本的 JSON 对象看起来像这样:
{
"name": "罗大富",
"age": 29,
"isStudent": false,
"hobbies": ["睡觉", "打游戏"],
"address": {
"city": "菏泽",
"state": "山东"
}
}
其中,name
、age
、isStudent
、hobbies
和 address
都是键,而对应的值分别是字符串 "罗大富"
、数字 29
、布尔值 false
、字符串数组 ["睡觉", "打游戏"]
和一个嵌套的 JSON 对象 {"city": "菏泽", "state": "山东"}
。
JSON 数据通常用于 Web 应用程序中,例如从后端服务器获取数据或向后端服务器发送数据。在前端 JavaScript 中,可以使用内置的 JSON 对象将 JSON 字符串转换为 JavaScript 对象,或将 JavaScript 对象转换为 JSON 字符串。
软件程序设计
urequests 模块
当我们使用 MicroPython 在嵌入式系统中开发物联网(IoT)应用时,我们通常需要使用网络连接。通过使用 MicroPython 的 urequests 模块,可以轻松地从 Web 服务器上获取数据,实现基于网络的功能。
urequests 模块是用于在 MicroPython 中进行 HTTP 请求的模块。它实现了 HTTP 客户端协议,允许我们使用 GET、POST、PUT 和 DELETE 请求等基本的 HTTP 请求类型。
下面是使用 urequests 模块发送 GET 请求的示例:
import urequests
response = urequests.get('https://www.example.com')
print(response.text)
这个示例中,我们使用 urequests.get()
方法向 https://www.example.com
发送 GET 请求,并将响应的内容打印出来。
注意
注意,在发送 HTTP 请求后,我们需要使用 response.text 来获取服务器返回的数据,或者,我们可以使用 json() 方法,把 json 数据转换成字典。
除了 get()
方法,urequests
模块还提供了其他几个方法:
post(url, data=None, json=None, headers={}, **kw)
: 发送 HTTP POST 请求。data
参数用于指定请求数据,json
参数用于指定JSON
数据,headers
参数用于指定 HTTP 标头,**kw
参数用于传递其他参数;put(url, data=None, **kw)
: 发送 HTTP PUT 请求。data
参数用于指定请求数据,**kw
参数用于传递其他参数;delete(url, **kw)
: 发送 HTTP DELETE 请求。**kw
参数用于传递其他参数。
在发送请求时,我们可以通过传递参数来指定请求的数据、标头和其他选项。下面是一个例子,展示如何向 Web 服务器发送带有自定义标头的 GET 请求:
import urequests
headers = {'Authorization': 'Bearer <token>'}
response = urequests.get('https://api.example.com', headers=headers)
print(response.text)
在这个示例中,我们在 headers
参数中指定了一个名为 Authorization
的标头,以便在请求中包含我们的 API 令牌。
总之,通过使用 urequests
模块,我们可以轻松地在 MicroPython 中进行 HTTP 请求,与互联网上的 Web 服务器进行通信,并在 IoT 应用中获取所需的数据。
1. 获取实时天气数据
在使用前,一定要先连接 WiFi
import urequests
# 定义请求参数字典
request_params = {'city': '郑州', 'key': '你自己的 api 密钥'}
response = urequests.post(f'http://apis.juhe.cn/simpleWeather/query?city={request_params ["city"]}&key={request_params ["key"]}')
# print(response.text)
# print(type(response.json()))
# 获取数据
realtime = response.json()['result']['realtime']
temp = realtime['temperature']
info = realtime['info']
aqi = realtime['aqi']
print(f'温度:{temp}°C\n天气:{info}\n空气指数:{aqi}')
如何制作自己的 API 后台
我们目前使用的这些 API 接口,都是其他公司提供的服务,而如果我们想要搭建自己的 API 接口,该怎么办呢?
首先,你需要明白,想要搭建自己的 API 接口,其实就是搭建你自己的网站,而搭建网站分为前端和后端,前端和后端是指构成Web应用程序的两个主要部分:
- 前端通常指 Web 应用程序中用户可以看到和与之交互的部分,包括网页布局、样式、交互和功能;
- 后端则是指 Web 应用程序的后台,用于处理服务器端的逻辑和数据存储,例如数据库和 API。
后端的功能往往是由编程语言(如 Python、Java 等)和相关框架实现的,而前端通常由 HTML、CSS 和 JavaScript 等技术实现。前端和后端需要通过网络协议(如 HTTP)进行通信,将前端用户输入的数据传递到后端进行处理,再将处理结果返回到前端。
前端和后端的交互使得 Web 应用程序具有强大的功能和可扩展性。
如果你是非科班出身,想要转行做程序员,前端是你最好的选择,WEB 前端是最容易入门的编程岗位,初级前端技术很容易掌握,高级前端需要一步步学习和工作经验的积累。
后端的分类就很多了,国内主流的后端开发使用的是 Java、Go、Python、Node.js、C++、Rust、PHP 等。所以你该怎么选呢?以下仅代表我个人建议:
- 如果你明确目的,打算未来深耕于 Web 后端,你的第一选择必然是 Java,因为 Java 在国内 Web 开发的地位无法撼动;
- 如果你是前端程序员,打算转行后端,那就先从 Node.js 开始,简单的说 Node.js 就是运行在服务端的 JavaScript,而 JS 也是前端必学的三大基础内容;
- 如果你并非前两者,Python 就是你最好的选择,使用 Python 最大的优点就是简单、效率高,我们后面也会给大家带来 Python Web 开发的教程;
- 千万不要学 PHP,大家或许听过 “PHP 是最好的语言” 这个程序员常用梗,因为 PHP 上手比较简单,收获了很多开发者,又是早期互联网的重要服务端语言,所以在各个社交平台上时常能见到讨论,甚至吹捧 PHP 的文章。其中难免有些技术较差,或者不能接受新技术的上古遗老开发者,于是只能在网上做键盘侠,声称 PHP 是最好的语言。