使用esp32+micropython+microdot搭建web(http+websocket)服务器(超详细)第一部分

news2024/11/25 12:47:39

使用esp32+micropython+microdot搭建web(http+websocket)服务器(超详细)第一部分

  • microdot文档速查 什么是Microdot?Microdot是一个可以在micropython中搭建物联网web服务器的框架
  • micropyton文档api速查 Quick reference for the ESP32

先来个小demo先体验一下

在这里插入图片描述

[演示视频地址,【esp32物联网demo合集-哔哩哔哩】 https://b23.tv/XjVLHO4

视频中我们简单的实现了

  • 使用esp32搭建web服务器
  • 实现get请求
  • 上传网页到服务器
  • 手机打开网址访问该网页
  • 服务器处理请求,实现开灯关灯操作

准备工作

百度网盘:https://pan.baidu.com/s/1ZKbaGjdjuBMJgK9l6w9mdg?pwd=1234 提取码:1234

  • esp32开发板一个
  • micro数据线一条(支持数据传输,有些只能充电)
  • micropython固件,下载地址MicroPython - Python for microcontrollers或者网盘中获取(esp32-20220618-v1.19.1.bin)
  • esp32电脑驱动(没有他电脑不能识别esp32),网盘中获取(esp32usbDriver.zip)
  • Thonny,下载地址Thonny, Python IDE for beginners 或者网盘中获取(thonny-4.1.1.exe)
  • vscode,下载地址Documentation for Visual Studio Code 或者网盘中获取(VSCodeUserSetup-x64-1.79.2.exe)
  • microdot Microdot是一个可以在micropython中搭建物联网web服务器的框架(点击查看)

安装esp32电脑驱动

  • 解压该文件image.png
  • 点击安装该驱动(64位电脑选择上面,32位电脑选择下面)image.png
  • 安装完记得重启电脑,不然可能不生效

安装Thonny

  • 点击安装image.png
  • thonny切换中文,点击tools

    • image.png
    • 点击optionsimage.png
    • 选择language,中文image.png
    • 重启就汉化成功
  • 新建一个空文件夹,然后新建一个main.py文件

  • 使用thonny打开它image.png

给esp32刷入micropython固件

  • micro数据线连接电脑,然后连接esp32
  • image.png
  • 点击配置解释器image.png
  • 选择Micropython(esp32)解释器和选择端口,这个端口就安装电脑驱动之后生成的,名字可能不一样(如果没有端口,可能是驱动没装上或者线没连好)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dUJJotD8-1687272884567)(<转存失败,建议直接上传图片文件 >)]
  • 点击Install or update MicroPython选择端口和固件(网盘里面有)image.png

  • 等待进度条走完就好了image.png

  • 如果一直不显示百分比 按住 esp32上的boot键

    • ESP32开发板上有2个按键,分别是bootEN。烧录前需要先打开Download模式:长按boot键,按一下EN键,即可烧录。烧录完毕,按EN返回运行模式。
  • 完成!image.png

  • 右下角已经可选esp32开发板了image.png

  • esp32首先执行的是boot.py文件。该文件是由MicroPython系统创建的。因此您无需自己创建该文件就可以在刚刚刷好固件的NodeMCU开发板根目录下找到它。我不建议MicroPython的初学者对该文件进行修改,因为boot.py文件出现问题能会导致MicroPython无法正常启动,严重的会导致系统崩溃。要修复可能只有重新刷固件才行。所以除非您很了解MicroPython,否则请不要自行修改该文件。

    执行完boot.py以后,启动中的NodeMCU接下来将会执行main.py文件。如果您希望NodeMCU在每次启动后都执行一系列操作的话,可以将您的指令代码写入该文件。由于main.py文件是用户自己建立的而不是MicroPython系统建立的,因此在刚刚刷好固件的开发板根目录下是不存在该文件的。假如MicroPython在启动中找不到main.py文件,它会在系统启动时报错(如下图所示)。

  • 所以我们新建main.py,删除boot.py,main.py作为项目的主入口文件

安装vscode

  • 双击(VSCodeUserSetup-x64-1.79.2.exe)文件

esp32web服务器接口的搭建

  • 解压网盘中的microdot-main.zip

    • microdot-main\src下面有我们需要的文件image.png
  • 在MicroPython设备 新建目录结构

    • lib 存放一些库文件

      • microdot.py (microdot-main\src中)
    • common

      • connect_wifi.py (连接热点)
    • public 存放网页内容

      • index.html 网页
    • main.py (程序主入口)

connect_wifi.py

# 操作esp32引脚
from machine import Pin
​
# 操作时间 延迟几秒等
import time
​
# 网络相关的函数
import network
​
# esp32 引脚2是一颗自带的 led的灯
light = Pin(2,Pin.OUT)
def do_connect():
    # wifi模式
    wlan = network.WLAN(network.STA_IF)
    # 激活
    wlan.active(True)
    print("开始连接...")
    print("连接中...")
    #  连接超时设置
    start_time = time.time()
    if not wlan.isconnected():
        # 自家的wifi名和密码        
        wlan.connect("Xiaomi_A246","zy415415666")
        while not wlan.isconnected():
            # 灯亮
            light.value(1)
            # 延迟一秒
            time.sleep(1)
            # 灯灭
            light.value(0)
            time.sleep(1)
            # 15秒内没连接上就是超时了
            if time.time() - start_time > 15:
                print("wifi连接超时!!!")
                break
        return False
    else:
        print("连接成功!!!!")
        light.value(0)
        # 打印 网络信息
        print("网络配置:",wlan.ifconfig())
        return True
​

main.py

# 导入Microdot
from lib.microdot import Microdot
# 连接wifi
from common.connect_wifi import do_connect
# 导入引脚
from machine import Pin
# esp32 引脚2是一颗自带的 led的灯
light = Pin(2,Pin.OUT)
​
# 开始连接wifi
do_connect()
# 实例化这个类
app = Microdot()
​
# 设置一个get请求 如果
@app.get('/on')
def index(request):
    # 如果收到get请求on就开灯
    light.value(1)
    return "开灯了"
​
@app.get('/off')
def index(request):
    # 如果收到get请求off就关灯
    light.value(0)
    return "关灯了"
# 端口号为5000
app.run(host='0.0.0.0', port=5000, debug=False, ssl=None)

执行main.py

  • esp32指示灯闪烁
  • 控制台打印ip地址等信息 就表示服务器已经启动好了 image.png
  • 打开浏览器输入ip+端口 成功啦!!!image.png

新建网页

打开vscode编写一个网页

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>esp32服务器网页</title>
    <style>
        *{margin: 0;
        padding: 0;}
        button{
            width: 200px;
            height: 200px;
        }
    </style>
</head>
<body>
    <h1>开灯小网页</h1>
    <button class="on">
        开灯
    </button>
    <button class="off">
        关灯
    </button>
    <script>
        const onBtn = document.querySelector(".on");
        const offBtn = document.querySelector(".off");
        // 监听按钮点击事件
        onBtn.addEventListener("click",(e)=>{
            fetch("/on",{
                method:"get",
            }).then(e=>{
                console.log("消息",e);
            }).catch(error=>{
                console.log("报错了",error);
            })
        })
        offBtn.addEventListener("click",(e)=>{
            fetch("/off").then(e=>{
                console.log("消息",e);
            }).catch(error=>{
                console.log("报错了",error);
            })
        })
​
    </script>
</body>
​
</html>

esp32部署网页

  • 将index.html文件放在public文件下面

  • 修改main.py

    # 导入Microdot
    from lib.microdot import Microdot,send_file
    # 连接wifi
    from common.connect_wifi import do_connect
    # 导入引脚
    from machine import Pin
    # esp32 引脚2是一颗自带的 led的灯
    light = Pin(2,Pin.OUT)
    ​
    # 开始连接wifi
    do_connect()
    # 实例化这个类
    app = Microdot()
    ​
    # 返回一个网页
    @app.route('/')
    def index(request):
        return send_file('public/index.html')
    ​
    # 设置一个get请求 如果
    @app.get('/on')
    def index(request):
        # 如果收到get请求on就开灯
        light.value(1)
        return "开灯了"
    ​
    @app.get('/off')
    def index(request):
        # 如果收到get请求off就关灯
        light.value(0)
        return "关灯了"
    ​
    # 端口号为5000
    app.run(host='0.0.0.0', port=5000, debug=False, ssl=None)
    ​
    

开发完成

  • 重新运行main.py,
  • 打开浏览器输入地址
  • image.png
  • 点击网页上的开灯和关灯按钮,可以看到esp32上面的灯亮和灯灭
  • image.png
  • 开发结束!!!!!

第二部分马上就来!

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

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

相关文章

数据仓库——原理+实战(一)

一、数据仓库概述 1. 数据仓库诞生原因 &#xff08;1&#xff09;历史数据积存&#xff08;存放在线上业务数据库中&#xff0c;当数据积压到一定程度会导致性能下降&#xff0c;所以需要将实用频率低的冷数据转移到数据仓库中&#xff09; &#xff08;2&#xff09;企业数…

【C++11】线程库

文章目录 1. get_idthis_thread 2. 锁1. 为什么要使用锁&#xff1f;2. 锁的使用并行 与 串行递归锁 recursive_mutextimed_mutexlock_guard 与 unique_lock 3. atomic4. 条件变量线程等待线程唤醒条件变量的应用问题1&#xff1a;如何保证 v1先运行&#xff0c;v2阻塞&#xf…

python的tqdm一些操作

主要参数 iterable: 可迭代的对象, 在手动更新时不需要进行设置 desc: str, 左边进度条的描述性文字 total: 总的项目数 leave: bool, 执行完成后是否保留进度条 file: 输出指向位置, 默认是终端, 一般不需要设置 ncols: 调整进度条宽度, 默认是根据环境自动调节长度, 如果设置…

VUE 2X 事件处理 ⑤

目录 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ V u e j s Vuejs Vuejs E v e n t j s Eventjs Eventjs总结 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ ⡖⠒⠒⠒⠤⢄⠀⠀⠀…

MySQL面试题--聚簇索引,非聚簇索引,回表查询

目录 概念 聚集索引选取规则: 面试回答 大纲 回答 概念 分类 含义 特点 聚集索引(Clustered Index) 将数据存储与索引放到了一块&#xff0c;索引结构的叶子节点保存了行数据 必须有,而且只有一个 二级索引(Secondary Index) 将数据与索引分开存储&#xff0c;索引…

进程的引入(操作系统)

目录 1、进程的概念 2、进程状态及状态转换 &#xff08;1&#xff09;进程的状态 &#xff08;2&#xff09;状态的转换 3、进程控制块&#xff08;PCB&#xff09; 4、进程的组成和上下文 5、进程的队列 6、进程的类型和特征 7、进程间相互联系与相互作用 8、进程的…

pcl1.12.1重新安装boost库

因为我的库有问题&#xff0c;直接使用pcl1.12.1的时候报错&#xff0c;于是重新安装boost库 1.78.0地址(因为打开pcl1.12.1的安装目录&#xff0c;发现boost库是1.78.0&#xff0c;所以去官网找到对应的版本进行安装) Index of main/release/1.78.0/sourcehttps://boostorg.j…

OpenHarmony端云一体化应用开发快速入门练习(中)登录认证

一、登录认证手机 可以在应用中集成手机帐号认证方式&#xff0c;您的用户可以使用“手机号码密码”或者“手机号码验证码”的方式来登录您的应用。 &#xff08;一&#xff09;前提条件 需要在AGC控制台开通认证服务。 需要先在您的应用中集成SDK。 &#xff08;二&#xff…

安全测试-优秀测试工程师必备的4项安全测试方法

用您5分钟时间阅读完&#xff0c;希望能对您有帮助&#xff01; 一.安全性测试 1、安全性测试方法 测试手段可以进行安全性测试&#xff0c;目前主要安全测试方法有&#xff1a;   1&#xff09;静态的代码安全测试 主要通过对源代码进行安全扫描&#xff0c;根据程序中数…

网站开发实录(四)个人博客建站

一、前期准备 由于时间问题&#xff0c;已经准备好了服务器以及域名 服务器平台为“雨云”&#xff08;朋友那里嫖来的&#xff09;&#xff0c;域名购买平台为阿里云&#xff08;零元购来的&#xff09;。接下来我将以此为例介绍个人博客建站过程&#xff0c;顺带记录我的第二…

原生微信小程序全流程(基础知识+项目全流程)

小程序的基本使用 小程序文件类型 小程序主要提供了 4 种文件类型&#xff1a; 类型名称作用是否必须存在.wxml用于页面的布局结构&#xff0c;相当于网页中 .html 文件是.wxss用于页面的样式&#xff0c;相当于网页中的 .css 文件否.js用于页面的逻辑是.json用于页面的配置…

最新Python3.11.4版本和PyCharm开发工具安装详细教程

Python3.11.4版本安装详细教程 1. 官网下载Python安装包1.1 进入官网1.2 查看系统类型1.3 选择与主机位数相同的安装程序 2.运行安装程序2.1 Customize installation&#xff08;自定义安装&#xff09;2.2 Optional Features&#xff08;可选功能&#xff09;2.3 Advanced Opt…

synchronized 底层实现原理、重量级锁、轻量锁、锁膨胀、锁自旋、偏向锁详解

目录 0、基础知识&#xff1a;Java对象的存储格式 1. synchronized底层&#xff1a;Monitor&#xff08;重量级锁&#xff09;&#xff1a;被锁的对象与Monitor的关系 2. synchronized底层&#xff1a;轻量级锁优化&#xff0c;栈帧与被锁的对象的关系 3. 锁膨胀&#xff…

【arduino】HC-SR04超声波测距模块的驱动与使用

arduino超声波测距模块的驱动与使用 什么是超声波测距模块参数:引脚定义电路超声波传感器的控制时序驱动代码接线代码工程文件超声波是振动频率高于20KHZ的机械波。它具有频率高、波长短、绕射现象小、方向性好、能够成为射线而定向传播等特点应用广泛,适合大学生、工程师、技…

精简版Git基础操作(快速上手)

文章目录 前言一、初始化二、新建仓库三、工作区域和文件状态四、添加和提交文件五、回退到之前版本六、查看文件差异七、从版本库中删除文件八、.gitignore忽略文件九、github远程仓库--SSH配置和克隆仓库十、关联本地仓库与远程仓库十一、分支十二、解决合并冲突回退和rebase…

Go mmap 文件内存映射

Go mmap 文件内存映射 mmap是个很好用的内存映射工具&#xff0c;它可以将文件映射到内存中&#xff0c;可以方便地操作文件。使用mmap的优点是&#xff1a; 内存映射可以使得读写文件的性能更高&#xff0c;因为操作的是内存而不是磁盘。可以方便地操作文件&#xff0c;不需…

语音录音转文字的方法使用过吗

大家好&#xff01;今天我要给你们介绍一个实用的功能&#xff0c;那就是录音转文字啦&#xff01;它可以把录音中的声音内容快速且准确地转换成文字格式&#xff0c;让我们在工作和学习中变得更加高效和便利。我们在会议记录、采访访谈、语音笔记等领域&#xff0c;可以很大地…

自动化测试之稳定性测试的设计

目录 前言 压力Stress 随机Randomness 并发Concurrency 交互Interaction 时间Time 总结&#xff1a; 前言 稳定性测试是自动化测试领域最为核心的内容之一。稳定性测试设计应该考虑哪些方面&#xff1f;如何在有限的样本上最大化测试产出&#xff1f;笔者结合自动化的一…

Vivado 下 呼吸灯实验

目录 Vivado 下 呼吸灯实验 1、实验简介 2、实验环境 3、实验任务 4、硬件设计 5、程序设计 5.1、呼吸灯代码如下&#xff1a; 5.2、添加约束文件 .xdc 5.3、下载验证 Vivado 下 呼吸灯实验 呼吸灯最早由苹果公司发明并应用于笔记本睡眠提示上&#xff0c;其一经展出&…

2023年6月GESP能力等级认证C++二级真题

2023-06 GESP二级真题 题数&#xff1a;27 分数&#xff1a;100 测试时长&#xff1a;90min 一、单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 1. 高级语言编写的程序需要经过以下&#xff08; &#xff09;操作&#xff0c;可以生成在计算机上运行的可执…