microPython搭建webServer--(三)使用microdot库实现用户提交设定后断电保存

devtools/2025/1/17 17:10:00/

很多用esp32diy的产品中,用户需要在首次使用时设定好wifi参数,基本思路就是开机之后,esp32自身作为热点,用户连接此热点后,访问网页设定参数,esp32将参数存入自身,保证断电保存。重启后,默认使用用户保存的参数去连接wifi。之后的使用中,如果要改变网络环境,使用某种触发方式,比如开机时长按某个按钮,进入esp32热点状态。
根据前面的两篇文章,已经实现了eps32作为热点显示网页,用户在网页中提交数据,那么接下来,只要能实现将数据保存在开发板上即可。

  1. 给用户一个设定参数的网页
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><style>.font1 {color:red;}</style>
</head><body><h1 class="font1">修改字体颜色</h1><form action="http://192.168.4.1:5000/" method="post">        <select name="select_color" id="select_color"><option value="blue">蓝色</option><option value="red">红色</option>            </select><input type="submit" value="Submit" /></form>
</body></html>

在这里插入图片描述
显示出来之后,选择页面上的字体颜色,提交。

  1. 保存用户的参数
import network
# 创建一个WLAN对象,并将其设置为AP模式(接入点模式)
ap = network.WLAN(network.AP_IF)
ap.active(True)# 配置接入点的参数,包括SSID(网络名称)和密码
ap.config(essid='MyESP32AP', password='password123')# 打印接入点的IP地址
print('AP IP address:', ap.ifconfig())from microdot import Microdot, send_file
app = Microdot()@app.route('/', methods=['GET', 'POST'])
async def index(request):if request.method == 'POST':#将request.body的二进制字符串解码,然后分割出参数值color_receive=request.body.decode('utf-8').split('=')[1]print("设定颜色:",color_receive)#打开index.html文件,逐行读取,遇到设定字体color这一行后,修改该行内容with open('index.html', 'r') as file:lines = file.readlines()for i, line in enumerate(lines):if 'color' in line:print(lines[i])print(lines[i].encode())lines[i]='color:'+ color_receive+";\n"break#替换后用户提交的颜色后,写入文件with open('index.html', 'w') as file:for line in lines:file.write(line)           #每次提交后,重写发送修改过的文件return send_file('index.html')app.run(debug=True)

先判读用户的请求是get还是post,如果是post,就分析用户提交的颜色,这里是从request.body中提取的,request.body是二进制字符串,所以先解码,然后根据关键词“=”来分割,得到颜色。
之后逐行读取index.html,到css代码中设定color的那一行,替换掉原来的内容。
最终,将新的html发送给用户,看到修改效果。

至此,实现了esp32保存用户提交数据,至于数据的用处可以灵活掌握,可以配置闪灯的频率,可以配置定时器,自由发挥吧。


http://www.ppmy.cn/devtools/151317.html

相关文章

深度学习blog-剪枝和知识蒸馏

深度学习网络模型从卷积层到全连接层存在着大量冗余的参数&#xff0c;大量神经元激活值趋近于0&#xff0c;将这些神经元去除后可以表现出同样的模型表达能力&#xff0c;这种情况被称为过参数化。因此需要一些技术手段减少模型的复杂性&#xff0c;去除一些不重要的参数和连接…

python mysql库的三个库mysqlclient mysql-connector-python pymysql如何选择,他们之间的区别

三者的区别 1. mysqlclient 特点&#xff1a; 是一个用于Python的MySQL数据库驱动程序&#xff0c;用于与MySQL数据库进行交互。 依赖于MySQL的本地库&#xff0c;因此在安装时需要确保系统上已安装了必要的依赖项&#xff0c;如libmysqlclient-dev等。 性能较好&#xff0c…

基于Netty+InfluxDB+MQTT+Spring Boot的物联网(IoT)项目实现方案

基于NettyInfluxDBMQTTSpring Boot的物联网&#xff08;IoT&#xff09;项目实现方案 引言 物联网&#xff08;IoT&#xff09;技术近年来发展迅速&#xff0c;广泛应用于智能城市、工业物联网、农业物联网等领域。本文将详细介绍如何使用Netty、InfluxDB、MQTT和Spring Boot…

【大数据】机器学习-----模型的评估方法

一、评估方法 留出法&#xff08;Holdout Method&#xff09;&#xff1a; 将数据集划分为训练集和测试集两部分&#xff0c;通常按照一定比例&#xff08;如 70% 训练集&#xff0c;30% 测试集&#xff09;。训练集用于训练模型&#xff0c;测试集用于评估模型性能。优点&…

Vue.js组件开发-实现输入框与筛选逻辑

在Vue.js组件开发中&#xff0c;实现输入框与筛选逻辑通常涉及创建一个输入框组件&#xff0c;让用户能够输入搜索关键字&#xff0c;并根据这些关键字过滤一个数据列表。 步骤 ‌准备数据‌&#xff1a; 在Vue组件中&#xff0c;准备一个数据列表&#xff08;通常是一个数组…

AI数字人小程序:解锁个性化智能交互体验

随着人工智能的快速发展&#xff0c;AI数字人迅速崛起&#xff0c;成为了人们日常生活、工作等领域中的重要力量&#xff0c;深受用户的青睐。AI数字人不仅适用于各个领域中&#xff0c;帮助大众高效完成工作等&#xff0c;还能够帮助企业实现数字化发展。目前&#xff0c;AI数…

一个可以把玩的针对WebSocket分段的处理方案

市场上各种高级语言的WebSocket Echo的测试方案不少&#xff0c;但找来找去&#xff0c;愣是没有一个现成的可以针对分段&#xff08;fragmetation&#xff09;处理的Echo服务端。分段处理在一些对实时性要求较高的场合非常重要&#xff0c;比如流媒体&#xff0c;实时监控等场…

如何选择合适的服务器?服务器租赁市场趋势分析

服务器租赁市场概览 服务器租赁 market可以分为两种类型&#xff1a;按小时、按月和按年&#xff0c;每种模式都有其特点和适用场景&#xff0c;按小时租赁是最经济实惠的选择&#xff0c;适用于短期需求&#xff1b;按月租赁则适合中长期使用&#xff1b;而按年租赁则是最灵活…