【ESP32+MicroPython】网络编程基础

ESP32作为一款集成了Wi-Fi和蓝牙模块的微控制器,可以方便地与互联网连接,进行HTTP请求和数据传输。本教程将从Wi-Fi连接开始,逐步讲解ESP32如何在MicroPython环境下发送HTTP请求,并展示一些应用实例。我们将涵盖以下内容:

  • Wi-Fi连接的基本配置
  • 发送HTTP GET和POST请求
  • 解析响应数据

通过本教程,你将能够让ESP32接入Wi-Fi网络,并通过HTTP请求与Web服务器或API交互,完成数据的获取与发送。

连接Wi-Fi

Wi-Fi连接的原理

ESP32的Wi-Fi模块支持Station(客户端)和Access Point(热点)模式。通常情况下,将其设置为Station模式,通过设置Wi-Fi名称(SSID)和密码连接到已知网络。

代码实现

首先,我们定义一个简单的Wi-Fi连接函数,将ESP32连接到指定网络。

python 复制代码
import network
import time

def connect_wifi(ssid, password):
    wlan = network.WLAN(network.STA_IF)  # STA模式
    wlan.active(True)                    # 激活网络
    wlan.connect(ssid, password)         # 连接指定的SSID和密码

    print("连接中...")
    while not wlan.isconnected():        # 等待连接成功
        print(".", end="")
        time.sleep(1)
    print("\n已连接!")
    print("网络配置:", wlan.ifconfig())  # 打印网络配置信息

# 输入你的Wi-Fi信息
SSID = "你的WiFi名称"
PASSWORD = "你的WiFi密码"
connect_wifi(SSID, PASSWORD)
  • network.WLAN :创建一个WLAN对象,将模式设置为network.STA_IF(Station模式)。
  • wlan.active(True):激活Wi-Fi模块。
  • wlan.connect(ssid, password):连接指定的Wi-Fi网络。
  • wlan.isconnected():检测是否成功连接。

检测连接状态

在某些项目中,你可能需要检查Wi-Fi是否断开连接,并重新连接。可以在代码中加入检测连接状态的功能。

发送HTTP请求

ESP32可以通过urequests库实现HTTP请求。通常情况下,我们可以使用GET请求从服务器获取数据,用POST请求向服务器发送数据。

安装urequests

在MicroPython中,urequests库通常已内置于ESP32固件中。如果没有,可以通过upip进行安装。

python 复制代码
# 运行以下代码安装urequests库
import upip
upip.install('micropython-urequests')

HTTP GET请求

以下代码示例展示如何通过GET请求从API中获取数据,例如从JSONPlaceholder获取一个测试JSON数据。

python 复制代码
import urequests

def send_get_request(url):
    response = urequests.get(url)          # 发送GET请求
    print("状态码:", response.status_code)   # 打印状态码
    print("响应数据:", response.text)        # 打印响应数据
    response.close()                        # 关闭请求

url = "http://jsonplaceholder.typicode.com/todos/1"
send_get_request(url)
  • urequests.get(url):发送GET请求,返回一个响应对象。
  • response.status_code:获取响应的状态码。
  • response.text:获取响应的数据内容。
  • response.close():关闭响应,释放内存。

HTTP POST请求

POST请求通常用于向服务器发送数据。在MicroPython中,我们可以通过指定请求头和数据来实现POST请求。

以下示例演示如何通过POST请求发送JSON数据到服务器。

python 复制代码
import urequests
import json

def send_post_request(url, data):
    headers = {'Content-Type': 'application/json'}  # 设置JSON格式的请求头
    response = urequests.post(url, headers=headers, data=json.dumps(data))  # 发送POST请求
    print("状态码:", response.status_code)
    print("响应数据:", response.text)
    response.close()

url = "http://jsonplaceholder.typicode.com/posts"
data = {
    "title": "ESP32 Test",
    "body": "This is a test message from ESP32.",
    "userId": 1
}
send_post_request(url, data)
  • headers:设置请求头,用于告诉服务器传递的数据为JSON格式。
  • json.dumps(data):将字典格式的数据转换为JSON格式的字符串。
  • urequests.post(url, headers, data):发送POST请求,并包含请求头和数据。

处理响应数据

在实际应用中,获取到的数据通常是JSON格式。可以通过json.loads()方法将数据解析为字典格式。

python 复制代码
import urequests
import json

def get_json_data(url):
    response = urequests.get(url)
    data = json.loads(response.text)  # 将响应数据解析为字典格式
    response.close()
    return data

url = "http://jsonplaceholder.typicode.com/todos/1"
json_data = get_json_data(url)
print("ID:", json_data["id"])
print("Title:", json_data["title"])

ESP32作为HTTP服务器

ESP32可以创建一个Socket服务器,通过监听指定端口接收客户端请求,并返回响应数据。这种方法常用于物联网项目中的局域网数据传输。

以下代码展示如何在ESP32上创建一个简单的HTTP服务器。

python 复制代码
import socket

def start_server():
    addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]  # 监听80端口
    s = socket.socket()
    s.bind(addr)
    s.listen(1)
    print("服务器启动,正在监听端口 80...")

    while True:
        cl, addr = s.accept()
        print("客户端连接自", addr)
        request = cl.recv(1024)  # 接收请求数据
        print("请求内容:", request)

        # 返回HTTP响应
        response = "HTTP/1.1 200 OK\nContent-Type: text/html\n\n<h1>Hello from ESP32</h1>"
        cl.send(response)  # 发送响应数据
        cl.close()

start_server()
  • socket.getaddrinfo('0.0.0.0', 80):获取网络地址信息,监听80端口。
  • s.listen(1):设置最大连接数为1。
  • cl.recv(1024):接收客户端请求数据,数据量上限为1024字节。
  • cl.send(response):发送HTTP响应,响应内容为HTML格式的简单页面。

总结

本教程介绍了ESP32在MicroPython环境下的Wi-Fi连接及HTTP请求的实现,涵盖了从基础的GET和POST请求到数据上传的进阶应用。通过掌握这些技术,你可以实现ESP32与互联网的实时交互,并将其应用到各种物联网项目中。

相关推荐
数据智能老司机21 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机1 天前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机1 天前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机1 天前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i1 天前
drf初步梳理
python·django
每日AI新事件1 天前
python的异步函数
python
这里有鱼汤1 天前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook1 天前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室1 天前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python
倔强青铜三1 天前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试