【ESP32+MicroPython】热点模式及网页控制

在物联网项目中,ESP32作为接入点(AP)可以生成热点网络,设备连接到ESP32后,可以通过Web页面进行交互,例如控制LED的亮灭。本文将讲解如何在MicroPython下实现:

  1. ESP32作为Wi-Fi热点;
  2. 创建简单的Web服务器;
  3. 控制LED的亮灭。

通过学习本教程,你将能够使用ESP32在局域网中创建网页控制器,实现LED灯的远程控制。

搭建ESP32热点

ESP32作为Wi-Fi接入点,可以创建热点,供其他设备连接。热点模式适用于无需外部网络的本地控制场景。

代码实现

我们首先定义一个函数,使ESP32创建一个热点并显示其IP地址。

import networkdef create_ap(ssid, password):ap = network.WLAN(network.AP_IF)       # 配置为AP模式ap.active(True)                        # 激活AP模式ap.config(essid=ssid, password=password)  # 设置热点SSID和密码print("热点已启动,IP地址为:", ap.ifconfig()[0])# 启动热点
create_ap("ESP32_Hotspot", "12345678")
  • network.WLAN(network.AP_IF):配置Wi-Fi为AP模式。
  • ap.config(essid=ssid, password=password):设定热点的名称和密码。
  • ap.ifconfig():获取网络配置,ap.ifconfig()[0]返回IP地址。

现在,ESP32将创建一个名为ESP32_Hotspot的Wi-Fi热点,密码为12345678。设备可以连接此热点进行通信。

创建Web服务器

ESP32作为HTTP服务器,可以在用户访问其IP地址时返回网页并接受用户的请求,接下来我们将搭建简单的服务器,实现网页控制LED。

代码实现

我们创建一个简单的Web服务器,允许用户通过点击网页上的按钮来控制LED的开关。

import socket
from machine import Pin# LED连接的GPIO引脚
led = Pin(2, Pin.OUT)def web_page():"""生成网页内容"""# HTML代码,包含按钮用以控制LED状态html = """<html><head><title>ESP32 LED控制</title></head><body><h2>ESP32 LED 控制器</h2><p>点击按钮来切换LED状态。</p><a href="/?led=on"><button>LED ON</button></a><a href="/?led=off"><button>LED OFF</button></a></body></html>"""return html# 创建并启动服务器
def start_server():s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind(('', 80))s.listen(5)print("服务器启动,监听端口80")while True:conn, addr = s.accept()print("客户端连接自", addr)request = conn.recv(1024).decode()print("请求内容:", request)# 检测请求中的LED控制指令if '/?led=on' in request:led.value(1)  # 点亮LEDelif '/?led=off' in request:led.value(0)  # 熄灭LED# 返回HTML页面response = web_page()conn.send("HTTP/1.1 200 OK\n")conn.send("Content-Type: text/html\n")conn.send("Connection: close\n\n")conn.sendall(response)conn.close()# 运行服务器
start_server()
  • LED控制:在web_page()中生成一个简单的HTML页面,包含两个按钮:LED ONLED OFF。这些按钮指向带有不同参数的URL,用于控制LED。
  • 请求解析if '/?led=on' in request检测GET请求中的参数来判断是否需要点亮或熄灭LED。
  • HTTP响应conn.send()用于将网页内容返回给客户端。

运行效果

  • 将ESP32连接至电源,其他设备连接至ESP32_Hotspot热点。
  • 打开浏览器访问ESP32的IP地址(如192.168.4.1)。
  • 点击按钮即可控制LED的亮灭状态。

状态反馈

在实际应用中,通常需要在页面上实时显示LED的状态。我们可以对网页进行扩展,使页面根据LED状态动态显示。

def web_page():"""生成带状态反馈的网页内容"""# 检查LED当前状态if led.value() == 1:led_state = "ON"else:led_state = "OFF"html = """<html><head><title>ESP32 LED控制</title></head><body><h2>ESP32 LED 控制器</h2><p>LED 当前状态: <strong>{}</strong></p><a href="/?led=on"><button>LED ON</button></a><a href="/?led=off"><button>LED OFF</button></a></body></html>""".format(led_state)return html

刷新页面时会动态显示LED状态(ON或OFF),更便于用户了解设备当前状态。

完整代码

以下是实现上述功能的完整代码,将ESP32设为热点,启动Web服务器,并通过网页控制LED。

import network
import socket
from machine import Pin# 创建热点
def create_ap(ssid, password):ap = network.WLAN(network.AP_IF)ap.active(True)ap.config(essid=ssid, password=password)print("热点已启动,IP地址为:", ap.ifconfig()[0])# LED控制代码
led = Pin(2, Pin.OUT)def web_page():"""生成网页内容并包含LED状态"""led_state = "ON" if led.value() == 1 else "OFF"html = """<html><head><title>ESP32 LED控制</title><meta charset="UTF-8"></head><body><h2>ESP32 LED 控制器</h2><p>LED 当前状态: <strong>{}</strong></p><a href="/?led=on"><button>LED ON</button></a><a href="/?led=off"><button>LED OFF</button></a></body></html>""".format(led_state)return htmldef start_server():s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind(('', 80))s.listen(5)print("服务器启动,监听端口80")while True:conn, addr = s.accept()print("客户端连接自", addr)request = conn.recv(1024).decode()print("请求内容:", request)if '/?led=on' in request:led.value(1)  # 点亮LEDelif '/?led=off' in request:led.value(0)  # 熄灭LEDresponse = web_page()conn.send("HTTP/1.1 200 OK\n")conn.send("Content-Type: text/html\n")conn.send("Connection: close\n\n")conn.sendall(response)conn.close()# 启动程序
create_ap("ESP32_Hotspot", "12345678")
start_server()

总结

本文介绍了ESP32在MicroPython环境下的Wi-Fi热点模式、简单Web服务器搭建及GPIO控制方法。通过将这些功能组合,你可以构建基于ESP32的局域网控制系统,实现对LED等外设的网页控制。这种方法非常适合本地物联网项目,如家居自动化、传感器数据展示等。

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

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

相关文章

使用Docker Compose构建多容器应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Docker Compose构建多容器应用 引言 Docker Compose 简介 安装 Docker Compose 创建基本配置 运行多容器应用 查看服务状态 …

DI 依赖注入

提到依赖不得不提到&#xff0c;控制反转&#xff08;Inversion of Control,IOC&#xff09;这个概念&#xff0c;简单的来讲就是将控制对象的权限交给框架&#xff0c;不再手动完成。IOC实现方式有2种&#xff1a; 1、服务定位器&#xff08;ServiceLocator&#xff09;,主动…

WindowsDocker安装到D盘,C盘太占用空间了。

Windows安装 Docker Desktop的时候,默认位置是安装在C盘,使用Docker下载的镜像文件也是保存在C盘,如果对Docker使用评率比较高的小伙伴,可能C盘空间,会被耗尽,有没有一种办法可以将Docker安装到其它磁盘,同时Docker的数据文件也保存在其他磁盘呢? 答案是有的,我们可以…

量子加密技术是如何工作的?它对网络安全有什么影响?

量子加密技术&#xff0c;特别是量子密钥分发&#xff08;QKD&#xff09;&#xff0c;是基于量子力学原理来实现密钥的安全分发。这项技术的核心在于利用量子的特性&#xff0c;如不可克隆定理和测不准原理&#xff0c;来确保密钥的安全性。以下是量子加密技术的工作方式及其对…

构建ubuntu22.04.4私有源服务以及配置ubuntu私有源

构建ubuntu22.04.4私有源服务以及配置ubuntu私有源 一、环境说明1.1 私有源服务器1.2 客户机二 、构建私有源服务2.1 服务构建2.2 发布新的deb包到源服务器1. 准备新的 `.deb` 包2. 将 `.deb` 包添加到仓库目录3. 更新 `Packages` 文件4. 更新仓库的发布文件(可选)5. 通知客户…

记录一次node节点异常的排查

场景&#xff1a;运维同事反馈&#xff0c;在部署服务的时候&#xff0c;云上的k8s的node节点突然异常了&#xff0c;而且是3个节点同时异常了。当时开发人员正在部署服务&#xff0c;并没有做其他的操作。而且之前3个node节点也没有异常现象&#xff0c;查看运维管理的事件中心…

【Redis】一种常见的Redis分布式锁原理简述

本文主要简述一下基于set命令的Redis分布式锁的原理。 一&#xff0c;a线程持有的锁不要被b线程同时持有→setnx 抢锁的时候&#xff0c;最核心的就是&#xff0c;a线程持有的锁不要被b线程同时持有&#xff0c;放在基于set命令的redis分布式锁中来看&#xff0c;就是“如果锁…

[MySQL#11] 索引底层(2) | B+树 | 索引的CURD | 全文索引

目录 1.B树的特点 索引结构 复盘 其他数据结构的对比 B树与B树总结 聚簇索引与非聚簇索引 辅助索引 2. 索引操作 主键索引 1. 创建主键索引 第一种方式 第二种方式 第三种方式 2. 查询索引 第一种方法 第二种方法 第三种方法 3. 删除索引 删除主键索引 删除…

Alphago的原理详解

AlphaGo是谷歌DeepMind团队开发的围棋AI&#xff0c;是世界上第一个打败人类围棋冠军的AI。其原理主要基于深度学习和强化学习&#xff0c;并结合了蒙特卡洛树搜索算法。以下是对AlphaGo原理的详细阐述&#xff1a; 一、深度学习 AlphaGo通过深度学习技术&#xff0c;模仿人类…

【小白学机器学习31】 大数定律,中心极限定理,标准正态分布与概率的使用

目录 1 正态分布相关的2个相关定理 1.1 大数定律&#xff1a;(证明了)分布的稳定性 1.2 中心极限定理&#xff1a;(证明了)分布的收敛性 2 使用标准差和概率的2种思路 2.1 标准正态分布的曲线 2.2 两种使用方式 2.3 第1种&#xff1a;按整数倍标准差δ 作为标准使用 2.…

springcloud通过MDC实现分布式链路追踪

在DDD领域驱动设计中&#xff0c;我们使用SpringCloud来去实现&#xff0c;但排查错误的时候&#xff0c;通常会想到Skywalking&#xff0c;但是引入一个新的服务&#xff0c;增加了系统消耗和管理学习成本&#xff0c;对于大型项目比较适合&#xff0c;但是小的项目显得太过臃…

R语言结构方程模型(SEM)

原文链接&#xff1a;R语言结构方程模型&#xff08;SEM&#xff09;https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247624956&idx4&sn295580a016a86cfee8ee2277c93e32d5&chksmfa8da91bcdfa200da897f1f267492039865bdfe5d75a1c6e6df92ff5005e0eb5cc33a…

国标GB28181视频平台EasyCVR私有化视频平台工地防盗视频监控系统方案

一、方案背景 在当代建筑施工领域&#xff0c;安全监管和防盗监控是保障工程顺利进行和资产安全的关键措施。随着科技进步&#xff0c;传统的监控系统已不足以应对现代工地的安全挑战。因此&#xff0c;基于国标GB28181视频平台EasyCVR的工地防盗视频监控系统应运而生&#xf…

labview学习总结

labview学习总结 安装labview的特点一、图形化编程范式二、并行执行机制三、硬件集成能力四、应用领域优势五、开发效率六、系统集成能力**labview基本组成示意图****常用程序结构图解**结语 基础知识介绍界面前后面板的概念平铺式和层叠式 帧的概念结构类型顺序结构for循环whi…

《YOLO 目标检测》—— YOLO v4 详细介绍

文章目录 一、整体网络结构1. YOLO v4 网络结构图2.对之前版本改进创新的概括 二、对改进创新部分的具体介绍1. 输入端创新2. Backbone主干网络创新CSPDarknet53Mish激活函数Dropblock正则化 3. 特征融合创新SPP模块PAN结构 4. Prediction输出层创新CIOU LossDIoU_NMS&#xff…

C# 独立线程

文章目录 前言使用多线程注意事项:1.线程安全性:2.线程同步:3.避免主线程的耗时操作:4.使用线程池:5.注意线程的生命周期管理:6.正确处理线程间通信:7.考虑线程的优先级和调度:了解操作系统对线程的调度策略,合理设置线程的优先级,确保关键线程能够优先执行。8.异常处…

Linux之初体验

目录 第1关&#xff1a;1-Linux初体验 第2关&#xff1a;1-Linux常用命令 第3关&#xff1a;1-Linux 查询命令帮助语句 第4关&#xff1a;2--查询命令-locate 第5关&#xff1a;2--查询命令-which/whereis 第6关&#xff1a;2--查询命令-find 第7关&#xff1a;3-Linux文…

动态规划 —— dp问题-按摩师

1. 按摩师 题目链接&#xff1a; 面试题 17.16. 按摩师 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/the-masseuse-lcci/description/ 2. 算法原理 状态表示&#xff1a;以某一个位置为结尾或者以某一个位置为起点 dp[i]表示&#xff1a;选择到i位置…

【react】基础知识点学习

1. 创建项目 npm install -g create-react-app npx create-react-app my-app cd my-app npm startindex.js为入口文件&#xff0c;App.js为根组件。 如何将react应用挂载在页面上&#xff1f; 将App组件渲染到id为root的DOM元素中 2. JSX JSX是|avaScript和XML(HTML)的缩写…

小张求职记二:完善简历

金色的夕阳将校园染上一层温暖的橘色&#xff0c;操场上&#xff0c;足球队员们挥洒着汗水&#xff0c;欢笑声在空气中回荡&#xff0c;远处的图书馆里&#xff0c;学生们埋头苦读&#xff0c;偶尔传出翻书的声音。一切都是那么美好&#xff0c;仿佛时间都静止在了这美好的时刻…