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

news2024/9/27 21:20:35

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

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

实现http服务器

有了前面的经验,我们现在用esp32实现http服务器

我们要实现通过网页控制四个舵机

项目视频展示

准备工作

  • esp32开发板一个image.png

  • esp32拓展板一个Screenshot_20230621_142626.jpg

  • 舵机四个image.png

  • 简单组装IMG_1336.JPG

  • 注意接口(线头颜色千万别插反了!!!)

    • image.png
    • image.png

esp32http接口搭建

在MicroPython设备 新建目录结构

  • lib 存放一些库文件

    • microdot.py (microdot-main\src中)前面章节有
  • common

    • connect_wifi.py (连接热点)前面章节有
    • servo.py (操作舵机移动角度)
  • public 存放网页内容

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

servo.py

# 导入PWM库
from machine import PWM
# 数学库
import math
# 构造函数
class Servo:
    def __init__(self,pin,freq=50,min_us=600,max_us=2400,angle=180):
        self.min_us = min_us
        self.max_us = max_us
        self.us = 0
        self.freq = freq
        self.angle = angle
        self.pwm =PWM(pin,freq=freq,duty=0)
        
    def write_us(self,us):
        if us == 0:
            self.pwm.duty(0)
            return
        us = min(self.max_us,max(self.min_us,us))
        duty = us *1024 * self.freq // 1000000
        self.pwm.duty(duty)
    def write_angle(self,degrees=None,redians=None):
        if degrees is None:
            degrees = math.degrees(radians)
        degrees = degrees % 360
        
        total_range = self.max_us - self.min_us
        us = self.min_us + total_range * degrees // self.angle
        self.write_us(us)
​
​

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>滑动</title>
</head>
<body>
    <h1>滑动四个电机</h1>
    <input type="range" min="0" max="180" value="1" step="1" name="" id="">
    <div class="content">
​
    </div>
    <script>
​
        let ipt = document.querySelector("input")
        let content = document.querySelector(".content")
        // 防抖函数 防止服务器接受大量请求
        const throttle = (func,interval)=>{
            let last = 0;
            return function(){
                let args = arguments
                let now = Date.now();
                if(now - last > interval){
                    func.apply(this,args)
                    last = now
                }
            }
        }
        ipt.addEventListener("input",throttle((e)=>{
            let value = ipt.value
            fetch("/move/"+value,{
            }).then(e=>{
                content.innerHTML = e.status
            }).catch(err=>{
                content.innerHTML = "error"+err
            })
        },500))
    </script>
</body>
</html>
​

main.py

# 导入Microdot
from lib.microdot import Microdot,send_file
# 连接wifi
from common.connect_wifi import do_connect
from common.servo import Servo
# 导入引脚
from machine import Pin
​
# 对应四个电机 从左上角顺时针排序
s1 = Servo(Pin(15))
s2 = Servo(Pin(17))
s3 = Servo(Pin(25))
s4 = Servo(Pin(27))
# 复位
s1.write_angle(0)
s2.write_angle(180-0)
s3.write_angle(180-0)
s4.write_angle(0)
# esp32 引脚2是一颗自带的 led的灯
light = Pin(2,Pin.OUT)
​
# 开始连接wifi
do_connect()
# 实例化这个类
app = Microdot()
​
# get请求返回一个网页
@app.route('/')
def index(request):
    return send_file('public/index.html')
​
# 设置一个get请求 如果收到信息就操作舵机
@app.get('/move/<int:angle>')
def index(request,angle):
    print("angle",angle)
    # angle为前端发过来的舵机旋转角度
    s1.write_angle(angle)
    # 这里用180-angle因为2,3舵机在右侧
    s2.write_angle(180-angle)
    s3.write_angle(180-angle)
    s4.write_angle(angle)
    return "移动到:"+angle
​
# 端口号为5000
app.run(host='0.0.0.0', port=5000, debug=False, ssl=None)
​

开发完成

完成了哈哈哈哈项目视频展示

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

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

相关文章

基于cycle of curves的Nova证明系统

1. 引言 主要见斯坦福大学Wilson Nguyen、Dan Boneh和微软研究中心Srinath Setty 2023年论文《Revisiting the Nova Proof System on a Cycle of Curves》。 前序博客有&#xff1a; Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记 在2021年Nova …

Java线程的六种状态(付代码解释)

目录 一.新建状态 (New) 解释 代码 运行结果 ​编辑 二.运行状态(Runnable) 解释 代码 运行结果 三.等待状态&#xff08;Waiting&#xff09; 解释 代码 运行结果 四.阻塞状态&#xff08;Blocked&#xff09; 解释 代码 运行结果 五.计时等待状态&#xff08;…

PCB设计系列分享-开关稳压器接地处理

目录 概要 整体架构流程 技术名词解释 1.DCDC&#xff1a; 2.PGND: 3.AGND: 技术细节 1.认识1 2.认识2 3.综合 小结 概要 提示&#xff1a;这里可以添加技术概要 如何使用带有模拟接地层(AGND)和功率接地层&#xff08;PGND)的开关稳压器? 这是许多开发人员在设计…

启用Windows应急重启功能

博主最近发现了Windows隐藏功能——应急重启&#xff0c;并且这个功能可以追溯到Windows Vista!但是因为大家习惯长按电源键关机所以就鲜为人知。今天博主叫你如何使用应急重启功能。 因为使用功能都无法截图&#xff0c;所以就不展示图片了。 第一步&#xff0c;按住CtrlAltD…

什么是元宇宙?元宇宙由哪些关键技术、设备构成?

元宇宙近几年来火爆起来,各个行业争先恐后加入。从目前来看,元宇宙初步体现在游戏娱乐行业、社交、消费、数字孪生等方面。元宇宙近两年开始在各个行业快速崛起,但各个行业并没有一个清晰的发展方向,那么什么是元宇宙? 元宇宙到底由哪些技术和设备组成&#xff1f;查询了很多资…

用于SOLIDWORKS装配体的X光机——SOLIDWORKS装配体直观工具

​ SOLIDWORKS报告和故障排除的瑞士军刀 如何快速的根据条件会装配体中的零部件进行分类&#xff1f; 如何快速找到装配体中的某些特定零件&#xff1f; 如何快速在图形区域中突出显示出特定的零部件&#xff1f; 如果你用过“SOLIDWORKS装配体直观工具”的话&#xff0c;…

JMeter之常见逻辑控制器实践

ForEach Controller(循环控制器) 组件使用说明 选项说明&#xff1a; ①需要循环遍历名称&#xff08;name&#xff09;&#xff1b; ②循环变量的下标起点(name_0)&#xff1b; ③循环变量的下标终点(name_4)&#xff1b; ④引用变量名称定义&#xff1b; ⑤在变量后加_&…

jsvmp xs逆向学习

内容仅供参考学习 欢迎朋友们V一起交流&#xff1a; zcxl7_7 首先直接搜索关键词 找到encrypt位置 接下来就是分析encrypt过程&#xff0c;详情请看专栏中的文章

leetcode 2448. Minimum Cost to Make Array Equal(使数组相等的最小成本)

数组nums的元素每次可进行下面的操作&#xff1a; 每个元素1 或者 -1。 操作一次的cost是cost[i]. 问把nums的元素全部变为相等的元素需要的最小的cost. 思路&#xff1a; nums的元素全部变为相等的元素&#xff0c;这个相等的元素是多少&#xff0c;现在不知道。 一旦知道了…

Jmeter查看结果树之查看响应的13种方法

目录 前言&#xff1a; 1、Text 2、RegExpTester 3、BoundaryExtractorTester 4、CSSSelectorTester 5、XpathTester 6、JSONPathTester 7、HTML 8、HTMLSourceFormatted 9、HTML&#xff08;downloadresources&#xff09; 10、Document 11、JSON 12、XML 13、B…

RPA×IDP×AIGC,实在智能打造全新“超进化”文档审阅超自动化解决方案

企业商业活动频繁&#xff0c;每日都有大量文档被创建、书写、传递&#xff0c;需要人工审阅核查&#xff0c;以确保其准确性和合法性。这是对企业文档管理的一个巨大挑战&#xff0c;尤其对于金融机构、审计机构等文本相关岗位的工作人员来说更是如此。传统的文档审核通常需要…

集合和泛型的详细讲解

集合 1&#xff09;可以动态保存任意多个对象&#xff0c;使用比较方便&#xff01; 2&#xff09;提供了一系列方便的操作对象的方法&#xff1a;add、remove、set、get等3&#xff09;使用集合添加&#xff0c;删除新元素的示意代码&#xff0d;简洁了 集合的框架体系 …

实时检测Aruco标签坐标opencv-python之添加卡尔曼滤波

在实时检测Aruco标签坐标用于定位的时候发现&#xff0c;追踪效果不是很好&#xff0c;于是在检测过程中添加了卡尔曼滤波&#xff0c;在aruco检测算法检测不到aruco标签的时候&#xff0c;调用卡尔曼滤波算法&#xff08;KalmanFilter&#xff09;&#xff0c;补偿丢失的定位的…

Rabbitmq学习

文章目录 前言RabbitMQ 1 同步调用和异步调用2 常见的MQ对比3 安装RabbitMQ4 RabbitMQ学习4.1 helloworld学习 5 Spring AMQP5.1 AMQP的入门案例(使用rabbittemplate进行消息发送和接受)5.2 RabbitMQ的workquene5.3 发布订阅模型(exchange(广播fanout 路由direct 话题topic))5.…

RK3588 修改USB/Sata/TF挂载点

文章目录 概要整体架构流程技术名词解释技术细节小结APP概要 rk3588 android12 平台的挂载点是:/storage/设备卷名(即uuid) 对上层开发不太友好,因此需要固定某个挂载点提供上层app调用。 修改后的路径效果如下: 整体架构流程 从概要图示中可知:对每个挂载点创建软连接来…

大牛分享,提高工程性能的7个简单技巧

软件性能和弹性&#xff08;恢复能力&#xff09;是用户体验的关键组成部分&#xff0c;但随着软件行业采用DevOps&#xff0c;它开始在性能和弹性方面出现不足。在软件完全失败之前&#xff0c;性能问题经常被忽略。 但是&#xff0c;我们都知道性能不会突然降低。随着软件通…

【二叉树part02】| 102.二叉树的层序遍历、226.翻转二叉树、101.对称二叉树

目录 ✿LeetCode102.二叉树的层序遍历❀ ✿LeetCode226.翻转二叉树❀ ✿LeetCode101.对称二叉树❀ ✿LeetCode102.二叉树的层序遍历❀ 链接&#xff1a;102.二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff…

Python入门(二十七)测试(二)

测试&#xff08;二&#xff09; 1.测试类2.各种断言方法3.一个要测试的类4.测试AnonymousSurvey类5.方法setUp() 1.测试类 前面我们编写了针对单个函数的测试&#xff0c;下面来编写针对类的测试。很多程序中都会用到类&#xff0c;因此证明我们的类能够正确工作大有裨益。如…

AI绘画——了解AI绘画爆火原因与工具,并生成几个端午绘画小作品

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 目录 前言 一.AI绘画 1.AI绘画爆火原因 2.AI绘画背后原理 二.AI绘画工具介绍 1.midjour…

IDC武连峰:应用数字安全免疫力理念,促进企业在数字时代韧性发展

作者&#xff1a;IDC中国副总裁、首席分析师 武连峰 数字安全免疫力是一个企业针对各种数字安全威胁时的防御机制&#xff0c;与人体免疫力相似&#xff0c;企业数字安全免疫力包含两类&#xff1a;企业安全文化意识与合规是先天性数字安全免疫力&#xff0c;今天任何一个企业…