microPython搭建webServer--(一)使用microdot库实现基本页面显示

news/2025/1/17 5:53:47/

1. 准备工作

硬件:esp32s3
软件:MicroPython v1.24.1,使用thonny编程。microdot库可以到github或者gitee下载,只需要microdot.py就可以了。

2. 热点

将esp32作为热点,手机连接该热点后访问默认页面

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())

先运行一下这段代码,顺利的话,可以显示当前状态。

AP IP address: ('192.168.4.1', '255.255.255.0', '192.168.4.1', '0.0.0.0')

3. 第一个网页

将microdot.py传到开发板根目录,运行如下代码:

from microdot import Microdotimport 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())
app = Microdot()html = '''<!DOCTYPE html>
<html><head><title>Microdot GPIO Example</title><meta charset="UTF-8">       </head><body >     <h1>Microdot Example</h1>         </body>
</html>
'''@app.route('/', methods=['GET', 'POST'])
async def hello(request):return html, 200, {'Content-Type': 'text/html'}app.run(host='192.168.4.1',debug=True)

thonny中应该显示如下:

AP IP address: ('192.168.4.1', '255.255.255.0', '192.168.4.1', '0.0.0.0')
Starting async server on 192.168.4.1:5000...

此时,用手机连接“MyESP32AP”热点,用浏览器访问http://192.168.4.1:5000,显示出网页。

通过上面的代码可以看到,使用microdot就是简单的四步:
1、定义一个对象app;
2、定义网页内容字符串变量html,如果有简易的js代码,也直接写在html中。
3、定义装饰器,响应浏览器访问web的请求,示例中就是将html字符串发送给浏览器。
4、运行app,停止app使用app.shutdown()

4. 发送文件
运行以下代码,允许浏览器访问webServer下面的所有文件:

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('/')
async def index(request):return send_file('index.html')@app.route('/<path:path>')
async def static(request, path):    return send_file(path)app.run(debug=True)

这段代码有两个装饰器,一个是当路由到根目录时,使用send_file送出index.html文件,另一个是访问具体的path时,使用send_file送出任意文件。当然,从服务器的安全性考虑,一个webServer允许访问所有文件显然是不对的,可以增加一个安全策略,比如只send指定目录、指定扩展名的文档。

5. 访问webServer中的所有文件


import os
allFiles=[]
def list_files(directory):#遍历出所有文件,存入allFiles数组中try:files = os.listdir(directory)for file in files:path = directory + '/' + fileif os.stat(path)[0] & 0x4000:  # 判断是否为目录print("Directory: ", path)list_files(path)  # 递归遍历子目录else:#print("File: ", path)allFiles.append(path)except OSError as e:print("Error: ", e)# 从根目录开始遍历
list_files('/')html = '''<!DOCTYPE html>
<html><head><title>Microdot GPIO Example</title><meta charset="UTF-8">       </head><body >             
'''
for i in allFiles:html+='<a href="{}">{}</a><br>'.format(i.replace("//","/"), i)html+=''' </body>
</html>
'''

先遍历esp32中的所有文件,然后动态添加到html变量中,生成带超链接的网页,发送给浏览器,这样就可以下载esp32中的所有文件。比如做一个gps轨迹记录仪,将每天的log数据存入文档中。通过前面的代码,可以遍历出文档名字,然后点击超链接下载回来。

遍历全部文件的完整代码:


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())import os
allFiles=[]
def list_files(directory):#遍历出所有文件,存入allFiles数组中try:files = os.listdir(directory)for file in files:path = directory + '/' + fileif os.stat(path)[0] & 0x4000:  # 判断是否为目录print("Directory: ", path)list_files(path)  # 递归遍历子目录else:#print("File: ", path)allFiles.append(path)except OSError as e:print("Error: ", e)# 从根目录开始遍历
list_files('/')html = '''<!DOCTYPE html>
<html><head><title>Microdot GPIO Example</title><meta charset="UTF-8">       </head><body >             
'''
for i in allFiles:html+='<a href="{}">{}</a><br>'.format(i.replace("//","/"), i)html+=''' </body>
</html>
'''from microdot import Microdot, send_file
app = Microdot()@app.route('/')
async def index(request):#return send_file('index.html')return html, 200, {'Content-Type': 'text/html'}@app.route('/<path:path>')
async def static(request, path):print(path)return send_file(path)app.run(debug=True)

http://www.ppmy.cn/news/1563808.html

相关文章

【PGCCC】PostgreSQL 临时文件的使用

临时文件 某些查询操作&#xff08;例如sort或hash表&#xff09;需要一些内存功能。此内存由运行时配置提供work_mem。 来自官方文档work_mem work_mem (整数) 设置在写入临时磁盘文件之前查询操作&#xff08;例如排序或哈希表&#xff09;使用的基本最大内存量。 请注意&…

Eclipse插件开发二:初识hello word的配置信息

在之前的文章中&#xff0c;我们创建了一个例子&#xff0c;现在我们来认识这个例子。 Eclipse插件开发一&#xff1a;hello word 以下是目录结构&#xff0c;主要有一个java类&#xff0c;一个MANIFEST.MF配置&#xff0c;一个plugin.xml配置 1.MANIFEST.MF MANIFEST.MF 文…

19. 删除链表的倒数第 N 个结点【力扣】

删除链表的倒数第 N 个结点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&…

【网络云SRE运维开发】2025第3周-每日【2025/01/15】小测-【第14章ospf高级配置】理论和实操解析

文章目录 14.1 选择题解题思路和参考答案14.2 理论题解题思路和参考答案14.3 实操题解题思路和参考答案思科&#xff08;Cisco&#xff09;设备华为&#xff08;Huawei&#xff09;设备小米/锐捷&#xff08;或其他支持标准CLI命令的设备&#xff09;通过网络管理工具注意事项 …

【15】Word:互联网发展状况❗

目录 题目​ NO2 NO3 NO4 NO5 NO6 NO7.8.9 NO7 NO8 NO9 NO10 题目 NO2 布局→页面设置→纸张&#xff1a;A4→页边距&#xff1a;上下左右→版式&#xff1a;页眉/页脚页码范围&#xff1a;多页&#xff1a;对称页边距→内侧/外侧→装订线 NO3 首先为文档应用内置…

太速科技-402-基于TMS320C6678+XC7K325T的高性能计算核心板

基于TMS320C6678XC7K325T的高性能计算核心板 一、板卡概述 本板卡系我公司自主研发&#xff0c;采用一片TI DSP TMS320C6678和一片Xilinx公司K7系列FPGA XC7K325T-2FFG900-I作为主处理器&#xff0c;Xilinx 的Spartans XC3S200AN作为辅助处理器。其中XC3S200AN负责管理板…

无限世界中的具身导航与交互!InfiniteWorld:通用视觉语言机器人交互的统一仿真框架

作者&#xff1a;Pengzhen Ren, Min Li, Zhen Luo, Xinshuai Song, Ziwei Chen, Weijia Liufu, Yixuan Yang, Hao Zheng, Rongtao Xu, Zitong Huang, Tongsheng Ding, Luyang Xie, Kaidong Zhang, Changfei Fu, Yang Liu, Liang Lin, Feng Zheng, Xiaodan Liang 单位&#xff…

【初阶数据结构】序列系统重构:顺序表

文章目录 1.线性表2.顺序表2.1 概念及结构2.1.1 静态顺序表2.2.2 动态顺序表 2.2 接口实现2.2.1 顺序表打印2.2.2 顺序表初始化2.2.3 顺序表销毁2.2.4 顺序表容量检查2.2.5 顺序表尾插2.2.6 顺序表头插2.2.7 顺序表尾删2.2.8 顺序表头删2.2.9 顺序表在pos位置插入x2.2.10 顺序表…