【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.mzph.cn/web/59006.shtml

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

相关文章

Springboot+Vue+mysql前后端分离的Java项目部署教程

参考了网上许多文章&#xff0c;有的使用的是nginx&#xff0c;eclipse&#xff0c;其实只要是数据库或者java的软件基本都大同小异。 本人使用phpstudy对项目进行部署&#xff0c;亲测有效。 需要的软件&#xff1a; 1.Node.js安装&#xff08;ps&#xff1a;这一步我也不知道…

第21节 arkts 如何读取普通文件

在 ArkTS 中读取普通文件可以通过以下几种方式&#xff1a; 使用ohos.fileio 模块 ohos.fileio 模块提供了一系列用于文件操作的接口&#xff0c;可以用于读取普通文件。以下是一个简单的示例&#xff0c;展示如何读取一个文本文件的内容&#xff1a; import fileio from o…

Linux系统程序设计--2. 文件I/O

文件I/O 标准C的I/O FILE结构体 下面只列出了5个成员 可以观察到&#xff0c;有些函数没有FILE类型的结构体指针例如printf主要是一些标准输出&#xff0c;因为其内部用到了stdin&#xff0c;stdout&#xff0c;stderr查找文件所在的位置:find \ -name stat.h查找头文件所…

OpenSSL 生成根证书、中间证书和网站证书

OpenSSL 生成根证书、中间证书和网站证书 一、生成根证书&#xff08;ChinaRootCA&#xff09;二、生成中间 CA&#xff08;GuangDongCA&#xff09;三、生成网站证书&#xff08;gdzwfw&#xff09; 一、生成根证书&#xff08;ChinaRootCA&#xff09; 创建私钥&#xff1a; …

【ShuQiHere】️ 深入了解 ADB(Android Debug Bridge):您的 Android 开发利器!

&#x1f4df;&#x1f527;【ShuQiHere】️ &#x1f527;&#x1f4df; 在 Android 应用开发和设备管理中&#xff0c;ADB&#xff08;Android Debug Bridge&#xff09; 是一个不可或缺的工具。无论您是开发者、技术爱好者&#xff0c;还是普通用户&#xff0c;掌握 ADB 的…

HarmonyOS Next 实战卡片开发 02

HarmonyOS Next 实战卡片开发 02 卡片开发中&#xff0c;还有一个难点是显示图片。其中分为显示本地图片和显示网络图片 显示本地图片 卡片可以显示本地图片&#xff0c;如存放在应用临时目录下的图片。路径比如 /data/app/el2/100/base/你的项目boundleName/temp/123.png 以…

Linux之文件和目录类命令详解(2)

Linux之文件和目录类命令详解&#xff08;2&#xff09; 1、mv-移动文件或重命名2、find-查找文件和目录3、locate-快速查找文件4、du-显示目录或文件的磁盘使用情况5、df-显示文件系统的磁盘空间使用情况6、chmod-更改文件或目录的权限7、chown-更改文件或目录的拥有者8、tree…

【SpringMVC】记录一次Bug——mvc:resources设置静态资源不过滤导致WEB-INF下的资源无法访问

SpringMVC 记录一次bug 其实都是小毛病&#xff0c;但是为了以后再出毛病&#xff0c;记录一下&#xff1a; mvc:resources设置静态资源不过滤问题 SpringMVC中配置的核心Servlet——DispatcherServlet&#xff0c;为了可以拦截到所有的请求&#xff08;JSP页面除外&#xf…

MySQL 程序设计课程复习大纲

作为一门基础的 MySQL 程序设计课程&#xff0c;期末复习的重点应放在常见的数据库操作、基本查询、数据建模、关系型数据库的规范化设计等方面。以下是针对基础课程的 MySQL 期末复习知识点。 1. MySQL 基础概念与数据库操作 数据库基础 数据库与表的概念数据库管理系统&…

【C++ 算法进阶】算法提升十一 十二

目录标题 让字符串成为回文串的最少插入次数题目题目分析代码题目题目 字符子串 &#xff08;滑动窗口&#xff09;题目题目分析代码 最长连续子序列 &#xff08;头尾表&#xff09;题目题目分析代码 让字符串成为回文串的最少插入次数 题目 本题为为LC原题 题目如下 题目分…

让redis一直开启服务/自动启动

文章目录 你的redis是怎么打开的黑窗不能关?必须要自动启动吗?再说说mysql 本文的所有指令都建议在管理员权限下打开cmd控制台 推荐的以管理员身份打开控制台的方式 Win R 打开运行 输入cmdShift Ctrl Enter 你的redis是怎么打开的 安装过redis的朋友都知道, redis的安…

国产linux系统(银河麒麟,统信uos)使用 PageOffice 实现word文件在线留痕

PageOffice 国产版 &#xff1a;支持信创系统&#xff0c;支持银河麒麟V10和统信UOS&#xff0c;支持X86&#xff08;intel、兆芯、海光等&#xff09;、ARM&#xff08;飞腾、鲲鹏、麒麟等&#xff09;、龙芯&#xff08;LoogArch&#xff09;芯片架构。 查看本示例演示效果 …

域名邮箱推荐:安全与稳定的邮件域名邮箱!

域名邮箱推荐及绑定攻略&#xff1f;最好用的域名邮箱服务推荐&#xff1f; 域名邮箱&#xff0c;作为一种个性化且专业的电子邮件服务&#xff0c;越来越受到企业和个人的青睐。烽火将详细介绍域名邮箱登录的全过程&#xff0c;从注册到登录&#xff0c;帮助您轻松掌握这一重…

AI教育革命:个性化学习的新篇章

内容概要 在 教育 领域&#xff0c;人工智能 的崭露头角带来了前所未有的变化。如今&#xff0c;个性化学习 已不再是一个遥不可及的梦想&#xff0c;而是通过 AI 技术真正实现的可能。借助先进的数据分析能力&#xff0c;教师可以实时跟踪和评估每位学生的学习进度&#xff0…

[2024最新] macOS 发起 Bilibili 直播(不使用 OBS)

文章目录 1、B站账号 主播认证2、开启直播3、直播设置添加素材、隐私设置指定窗口添加/删除 窗口 4、其它说明官方直播帮助中心直播工具教程 目前搜到的 macOS 直播教程都比较古早&#xff0c;大部分都使用 OBS&#xff0c;一番探索下来&#xff0c;发现目前已经不需要 OBS了&a…

刷题---轮转数组

本题来自力扣刷题&#xff1a;轮转数组 首先我们来看一下题目描述 解题思路&#xff1a;首先创建一个新的数组&#xff0c;将后面k个数据数据放到新数组前面&#xff0c;将size-1个数据放在剩下的空间中&#xff0c;再把新数组的数据赋值给nums。看下图更好理解 代码展示 vo…

默认 iOS 设置使已锁定的 iPhone 容易受到攻击

苹果威胁研究的八个要点 苹果手机间谍软件问题日益严重 了解 Apple 苹果的设备和服务器基础模型发布 尽管人们普遍认为锁定的 iPhone 是安全的&#xff0c;但 iOS 中的默认设置可能会让用户面临严重的隐私和安全风险。 安全研究员 Lambros 通过Pen Test Partners透露&#…

vue3的Composition API(hooks)

1. setup函数 setup是一个新的组件选项&#xff0c;作为组件中使用组合API的起点。 从组件生命周期来看&#xff0c;它的执行在组件实例创建之前vue2.x的beforeCreate执行。 这就意味着在setup函数中this 还不是组件实例&#xff0c;this此时是undefined 在模版中需要使用的…

React Native WebView 进阶:实现带回调函数的通讯

实现带回调的通讯 Web 端实现 在网页中&#xff0c;我们使用 window.callbacks 对象来注册回调函数&#xff0c;并将 callbackId 传递给 App&#xff1a; <script>window.callbacks {callbacks: {},register: function(successCallback, errorCallback) {const callb…

常用的c++特性-->day02

c11新特性 可调用对象案例分析 可调用对象包装器语法案例可调用对象包装器作为函数参数补充&#xff1a;类型转换运算符案例 可调用对象绑定器语法格式绑定非类成员函数/变量案例1案例2案例3案例4 绑定类成员函数/变量 lambda表达式捕获列表案例1返回值案例2 --> 包装器绑定…