【雕爷学编程】MicroPython手册之HTTP通信 urequests 模块

在这里插入图片描述

MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。

在这里插入图片描述
MicroPython的urequests是一个用于进行HTTP请求的模块,它实现了CPython模块requests的一个子集,但也有一些特殊的特点和限制。

urequests模块的主要特点是:

它支持GET、POST、PUT、PATCH、DELETE等常见的HTTP方法,以及自定义方法。
它可以处理JSON格式的数据,以及其他类型的数据,如表单、文件等。
它可以设置请求头、超时、认证等参数。
它返回一个Response对象,可以访问响应的状态码、原因、头部、内容等属性。
它可以自动处理重定向和压缩响应。

urequests模块的应用场景是:

在MicroPython中实现与互联网或局域网中的其他设备或服务的通信,如获取天气信息、控制智能家居设备、上传传感器数据等。
在MicroPython中实现基于HTTP协议的客户端或服务器端的应用,如Web浏览器、Web服务器、RESTful API等。

urequests模块需注意事项是:

由于MicroPython的内存限制,urequests模块不能处理过大的响应内容,否则可能导致内存不足或异常。
由于MicroPython的网络支持不完善,urequests模块不能处理HTTPS协议,只能处理HTTP协议。
由于MicroPython的兼容性问题,urequests模块可能在不同的硬件平台或MicroPython版本上有不同的表现或错误。

以下是MicroPython的urequests几个实际运用程序案例:

案例一:使用urequests模块获取网络时间并同步到内置时钟。

import urequests
import ujson
import utime
from machine import RTC

# 获取网络时间
response = urequests.get('http://worldtimeapi.org/api/timezone/Asia/Hong_Kong')
# 解析JSON格式的响应内容
data = response.json()
# 获取unix时间戳
timestamp = data['unixtime']
# 设置内置时钟
rtc = RTC()
rtc.init(utime.localtime(timestamp))
# 打印当前时间
print(rtc.now())

案例二:使用urequests模块向IFTTT发送Webhook事件触发通知。

import urequests

# IFTTT Webhook事件名称
event = 'test'
# IFTTT Webhook密钥
key = 'your_key'
# IFTTT Webhook URL
url = 'https://maker.ifttt.com/trigger/{}/with/key/{}'.format(event, key)
# IFTTT Webhook数据(可选)
data = {'value1': 'Hello', 'value2': 'World'}
# 发送POST请求
response = urequests.post(url, json=data)
# 打印响应状态码和原因
print(response.status_code, response.reason)

案例三:使用urequests模块实现一个简单的Web服务器。

import urequests
import socket

# 创建套接字对象
s = socket.socket()
# 绑定本地地址和端口号(80为默认的HTTP端口)
s.bind(('', 80))
# 开始监听连接请求
s.listen(5)

while True:
    # 接受一个连接请求
    conn, addr = s.accept()
    # 接收客户端发送的数据(最多1024字节)
    request = conn.recv(1024)
    # 解析请求行(第一行)
    request_line = request.split(b'\r\n')[0]
    # 获取请求方法和路径
    method, path, _ = request_line.split(b' ')
    # 打印请求方法和路径
    print(method, path)
    # 根据不同的路径返回不同的响应内容
    if path == b'/':
        response = b'HTTP/1.0 200 OK\r\n\r\nHello World!'
    elif path == b'/json':
        response = b'HTTP/1.0 200 OK\r\nContent-Type: application/json\r\n\r\n{"message": "Hello JSON!"}'
    else:
        response = b'HTTP/1.0 404 Not Found\r\n\r\nNot Found'
    # 发送响应数据
    conn.send(response)
    # 关闭连接
    conn.close()

案例四:获取天气信息:

import urequests

# 请求天气API
response = urequests.get("https://api.openweathermap.org/data/2.5/weather?q=Beijing&appid=YOUR_API_KEY")

# 解析JSON响应
weather_data = response.json()

# 提取温度数据
temperature = weather_data["main"]["temp"]

# 打印温度
print("当前温度:", temperature, "℃")

在这个例子中,我们使用urequests模块发送HTTP GET请求来获取天气信息。我们向OpenWeatherMap的API发送一个请求,指定要查询的城市和API密钥。然后,我们使用response.json()方法解析JSON响应,并将天气数据存储在weather_data变量中。通过提取所需的数据,比如温度,我们可以在终端打印出当前的温度。

案例五:发送POST请求:

import urequests

# POST请求的数据
data = {"name": "John", "age": 30}

# 发送POST请求
response = urequests.post("https://api.example.com/users", json=data)

# 打印响应结果
print(response.text)

在这个例子中,我们使用urequests模块发送一个HTTP POST请求。我们定义了一个包含姓名和年龄的字典作为POST请求的数据。然后,我们使用urequests.post()方法将数据发送到指定的URL。最后,我们通过response.text属性打印出响应结果。

案例六:下载文件:

import urequests

# 下载文件的URL
url = "https://example.com/images/image.jpg"

# 发送GET请求并下载文件
response = urequests.get(url)

# 保存文件
with open("image.jpg", "wb") as file:
    file.write(response.content)

print("文件下载完成!")

在这个例子中,我们使用urequests模块发送一个HTTP GET请求来下载文件。我们指定了文件的URL地址。然后,我们使用urequests.get()方法发送请求并获取响应。通过response.content属性,我们可以获取文件的二进制内容。最后,我们将文件保存在本地,并打印出下载完成的提示信息。

案例七:发送 GET 请求并获取响应

import urequests

# 发送 GET 请求
response = urequests.get('http://api.example.com/data')

# 打印响应内容
print(response.text)

# 关闭响应
response.close()

在这个例子中,我们使用 urequests.get() 函数发送一个 GET 请求到指定的 URL。函数返回一个响应对象 response。我们可以通过 response.text 属性获取响应的内容,并打印出来。最后,使用 response.close() 方法关闭响应。

案例八:发送 POST 请求并传递数据

import urequests

# POST 请求的数据
data = {'name': 'John', 'age': 25}

# 发送 POST 请求
response = urequests.post('http://api.example.com/submit', json=data)

# 打印响应内容
print(response.text)

# 关闭响应
response.close()

这个例子演示了如何使用 urequests.post() 函数发送一个 POST 请求,并传递数据。我们定义了一个字典 data,其中包含了要发送的数据。然后,使用 urequests.post() 函数发送 POST 请求到指定的 URL,并将数据以 JSON 格式发送。同样,我们可以通过 response.text 属性获取响应的内容,并打印出来。最后,使用 response.close() 方法关闭响应。

案例九:发送带有请求头的请求

import urequests

# 设置请求头
headers = {'User-Agent': 'MicroPython/1.0'}

# 发送请求
response = urequests.get('http://api.example.com/data', headers=headers)

# 打印响应内容
print(response.text)

# 关闭响应
response.close()

在这个例子中,我们通过 headers 字典设置了请求头,其中包含了 User-Agent 信息。然后,使用 urequests.get() 函数发送 GET 请求,并传递请求头信息。我们可以通过 response.text 属性获取响应的内容,并打印出来。最后,使用 response.close() 方法关闭响应。

这些案例展示了 MicroPython 中 urequests 模块的实际应用,用于发送 HTTP 请求和处理响应。您可以根据具体的应用场景和需求,使用 urequests 模块来实现与 HTTP 服务器的通信。

在这里插入图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

驴友花雕

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

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

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

打赏作者

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

抵扣说明:

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

余额充值