【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连接到指定网络。

import network
import timedef 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进行安装。

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

HTTP GET请求

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

import urequestsdef 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数据到服务器。

import urequests
import jsondef 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()方法将数据解析为字典格式。

import urequests
import jsondef get_json_data(url):response = urequests.get(url)data = json.loads(response.text)  # 将响应数据解析为字典格式response.close()return dataurl = "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服务器。

import socketdef 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与互联网的实时交互,并将其应用到各种物联网项目中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/464863.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【论文速读】| PathSeeker:使用基于强化学习的越狱攻击方法探索大语言模型的安全漏洞

基本信息 原文标题: PathSeeker: Exploring LLM Security Vulnerabilities with a Reinforcement Learning-Based Jailbreak Approach 原文作者: Zhihao Lin, Wei Ma, Mingyi Zhou, Yanjie Zhao, Haoyu Wang, Yang Liu, Jun Wang, Li Li 作者单位: Beihang University, Nany…

黑马官网2024最新前端就业课V8.5笔记---HTML篇

Html 定义 HTML 超文本标记语言——HyperText Markup Language。 标签语法 标签成对出现&#xff0c;中间包裹内容<>里面放英文字母&#xff08;标签名&#xff09;结束标签比开始标签多 /拓展 &#xff1a; 双标签&#xff1a;成对出现的标签 单标签&#xff1a;只有开…

NXP Zigbee JN5169 开发环境软件 文档和支持资源打包下载

NXP Zigbe JN5169软件、文档和支持资源下载 从NXP官网下载https://www.nxp.com.cn/pages/jn516x-7x-zigbee-3-0:ZIGBEE-3-0&#xff0c;有点蛋疼网站&#xff0c;要注册会员&#xff0c;所以我打包好所有NXP Zigbe JN5169所需的 软件、文档和支持资源打包好&#xff0c;以供开…

基于matlab的语音识别系统

一&#xff0e;设计任务及要求 1.1设计任务 作为智能计算机研究的主导方向和人机语音通信的关键技术&#xff0c;语音识别技 术一直受到各国科学界的广泛关注。以语音识别开发出的产品应用领域非常广泛&#xff0c;有声控电话交换、语音拨号系统、信息网络查询、家庭服务、宾馆…

使用WebStorm开发Vue3项目

记录一下使用WebStorm开发Vu3项目时的配置 现在WebStorm可以个人免费使用啦&#xff01;&#x1f929; 基本配置 打包工具&#xff1a;Vite 前端框架&#xff1a;ElementPlus 开发语言&#xff1a;Vue3、TypeScript、Sass 代码检查&#xff1a;ESLint、Prettier IDE&#xf…

Ansys HFSS:外壳的屏蔽效果演示

欢迎回来&#xff01;随着电子系统变得越来越复杂和集成&#xff0c;确保适当的屏蔽以减轻电磁干扰 &#xff08;EMI&#xff09; 变得越来越重要。 继续讨论屏蔽效果&#xff0c;我们现在将重点转移到另一个强大的工具上&#xff1a;Ansys HFSS&#xff08;高频结构仿真器&am…

Python基于TensorFlow实现双向循环神经网络GRU加注意力机制分类模型(BiGRU-Attention分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 随着深度学习技术的发展&#xff0c;循环神经网络&#xff08;RNN&#xff09;及其变种如门控循环…

【C++】C++的单例模式

二十四、C的单例模式 1、C的单例模式 本小标题不是讨论C的语言特性&#xff0c;而是一种设计模式&#xff0c;用于确保一个类在任何情况下都只有一个实例&#xff0c;并提供一个全局访问点来获取这个实例。即C的单例模式。这种模式常用于资源管理&#xff0c;如‌线程池、‌缓…

单元测试(Junit)

系统—模块—子模块&#xff0c;子模块中不可分割的程序单元的测试&#xff0c;单元的粒度根据实际情况可能是 类或方法等。 面向对象编程中&#xff0c;最小单元就是方法。 单元测试目的是在集成测试和功能测试之前对系统可测试单元进行逐一检查和验证。 单元测试基本原则 …

这个自动化框架吧,解决接口间数据依赖

在实际的测试工作中&#xff0c;在做接口自动化测试时往往会遇到接口间数据依赖问题&#xff0c;即API_03的请求参数来源于API_02的响应数据&#xff0c;API_02的请求参数又来源于API_01的响应数据。 因此通过自动化方式测试API_03接口时&#xff0c;需要预先请求API_02接口&a…

JeecgBoot入门

最近在了解低代码平台&#xff0c;其中关注到gitee上开源项目JeecgBoot&#xff0c;JeecgBoot官方也有比较完整的入门教学文档&#xff0c;这里我们将耕者官方教程学习&#xff0c;并将其记录下来。 一、项目简介 JeecgBoot 是一款基于代码生成器的低代码开发平台拥有零代码能力…

修改HarmonyOS鸿蒙图标和名字,打包后安装到真机,应用图标丢失变成透明,修改名字也不生效,还是默认的labeL解决方案教程

HarmonyOS鸿蒙打包hap 安装应用到桌面没有图标&#xff0c;用hdc安装到真机&#xff0c;打包后应用图标丢失变成透明&#xff0c;名字也还是默认的label的bug&#xff0c;以下是解决方案 以下是修改方案&#xff1a; 1、修改应用名字&#xff1a; 2、修改应用图标&#xff1a…

MYSQL安装(ubuntu系统)

rpm -qa 查询安装软件包 ps axj 查询服务 卸载mysql&#xff08;万不得已&#xff09; ps axj | grep mysql 查看是否存在mysql服务 systemctl stop mysqld 关闭该服务 rpm -qa | grep mysql 查安装mysql安装包 rmp -qa | grep mysql | xargs (yum apt) -y remove进行批量…

比ChatGPT更牛!苹果新AI模型刷新交互体验!能看懂你的手机屏幕!平板和安卓机也都行

家人们&#xff0c;苹果一直在悄悄进步&#xff01; 近期&#xff0c;据小鹿观察&#xff0c;各大科技巨头不仅在提升模型解决复杂问题的能力上竞争激烈&#xff0c;而且还在大语言模型应用于用户界面&#xff08;UI&#xff09;交互方面上暗暗发力&#xff01; 最近&#xf…

InstructIR: High-Quality Image Restoration Following Human Instructions 论文阅读笔记

这是Radu大佬所在的Wrzburg大学的computer vision lab实验室发表在ECCV2024上的一篇论文&#xff0c;代码开源。文章提出了一种文本引导的All-in-One的restoration模型&#xff0c;如下图所示&#xff1a; 这个工作其实跟"InstructPix2Pix: Learning to Follow Image Edit…

解决使用Golang的email库发送qq邮件报错short response,错误类型为textproto.ProtocolError

问题阐述 使用email库发送QQ邮件&#xff0c;采用587端口&#xff1a; package mainimport ("fmt""net/smtp""github.com/jordan-wright/email" )func SendEmail(sendTo string, subject string, body string) (err error) {e : email.NewEmai…

【北京迅为】《STM32MP157开发板嵌入式开发指南》-第七十二章 Debian文件系统

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

Spring框架的JDBC模板技术

目录 一、JDBC模板类的使用 1.引入依赖 2.测试类 3.运行&#xff0c;查看数据库 二、使用Spring框架来管理模板类 1.配置文件 2.测试类 3.运行&#xff0c;查看数据库 三、Spring框架管理开源的连接池 1.配置开源的连接池 2.将数据库连接的信息配置到属性文件中 3.核…

【万字详文介绍】:迭代扩张卷积神经网络(IDCNN)

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

2-Ubuntu/Windows系统启动盘制作

学习目标&#xff1a; 掌握使用Win32DiskImager、Rufus等工具制作系统启动盘的基本步骤。独立将ISO镜像文件写入USB闪存驱动器&#xff0c;确保在需要时顺利安装或修复系统。通过学习如何选择正确的源文件和目标驱动器&#xff0c;理解启动盘的使用场景和注意事项&#xff0c;…