闪电麦昆 语音控制齿轮行进轨迹,ESP32搭配语音控制板,串口通信,附视频演示地址

news2024/11/24 19:41:53

演示地址 https://www.bilibili.com/video/BV1cW421d79L/?vd_source=b8515e53f6d4c564b541d98dcc9df990

语音控制板的配置
在这里插入图片描述

web展示页面
在这里插入图片描述

esp32 程序

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <LittleFS.h>
#include <WebSocketsServer.h>

ESP8266WebServer server(80);
WebSocketsServer webSocket = WebSocketsServer(81); // WebSocket服务器在端口81上运行


void setup() {
  Serial.begin(115200);
  WiFi.softAP("ESP8266-AP", "12345678");

  // 初始化LittleFS
  if (!LittleFS.begin()) {
    Serial.println("An Error has occurred while mounting LittleFS");
    return;
  }

  server.on("/", HTTP_GET, handleRoot);
  server.on("/paper-full.min.js", HTTP_GET, handleJS);
  server.on("/chilun.svg", HTTP_GET, handleSVG); // 添加路由处理SVG请求


  server.begin();
  Serial.println("HTTP server started");
  
  webSocket.begin(); // 启动WebSocket服务器
  webSocket.onEvent(webSocketEvent); // 注册WebSocket事件处理函数
}

void handleRoot() {
  File file = LittleFS.open("/index.html", "r");
  if (!file) {
    Serial.println("File not found");
    return;
  }
  server.streamFile(file, "text/html");
  file.close();
}

void handleJS() {
  File file = LittleFS.open("/paper-full.min.js", "r"); // 打开JavaScript文件
  if (!file) {
    Serial.println("File not found");
    return;
  }
  server.streamFile(file, "application/javascript"); // 确保MIME类型是正确的
  file.close();
}

// 处理SVG文件的请求
void handleSVG() {
  File file = LittleFS.open("/chilun.svg", "r");
  if (!file) {
    Serial.println("File not found");
    return;
  }
  server.streamFile(file, "image/svg+xml"); // 确保MIME类型设置为SVG
  file.close();
}

// WebSocket事件处理函数
void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) {
  switch(type) {
    case WStype_DISCONNECTED:
      Serial.printf("[%u] Disconnected!\n", num);
      break;
    case WStype_CONNECTED:
      {
        IPAddress ip = webSocket.remoteIP(num);
        Serial.printf("[%u] Connected from %d.%d.%d.%d\n", num, ip[0], ip[1], ip[2], ip[3]);
        webSocket.sendTXT(num, "Hello from ESP8266"); // 向连接的客户端发送消息
      }
      break;
    case WStype_TEXT:
     {
        Serial.printf("[%u] Received Text: %s\n", num, payload);
        // 将接收到的消息广播给所有连接的客户端
        String message = String((char *)payload); // 将payload转换为String对象,以便处理
        webSocket.broadcastTXT(message); // 使用broadcastTXT直接广播消息
      }
  }
}


void loop() {
  server.handleClient();
  webSocket.loop(); // 确保处理WebSocket事件
  // 检查串口是否有数据读取
  if (Serial.available() > 0) {
    String data = Serial.readString(); // 读取串口数据
    Serial.print("Received from Serial: "); // 打印接收到的消息
    Serial.println(data); // 显示串口接收到的数据
    webSocket.broadcastTXT(data); // 将读取到的数据发送给所有WebSocket客户端
  }
}

在这里插入图片描述

参考资料
https://github.com/earlephilhower/arduino-littlefs-upload

https://github.com/earlephilhower/arduino-esp8266littlefs-plugin

https://github.com/lorol/arduino-esp32fs-plugin

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

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

相关文章

最全方案解决Android Studio中使用lombok插件错误: 找不到符号的问题

直接原因 先直接说原因&#xff0c;小部分是因为配置错误导致的&#xff0c;注意查看下面的步骤即可&#xff0c;另一大部分是因为Java和Kotlin混编的问题&#xff0c;lombok和kapt冲突&#xff0c;其实你用了kotlin基本不需要用lombok&#xff0c;多此一举&#xff01;所以可…

最新版 Global Mapper 26 发布

我们在《工作中常用的软件&#xff0c;可直接下载0.3m卫星影像、DEM和土地覆盖数据》一文中&#xff0c;为你分享了GlobalMapper25版本。 现在&#xff0c;该神器的最新版GlobalMapper26已发布&#xff0c;如果这两个版本的软件你都需要&#xff0c;请在文末查看它们的下载方法…

Spring源码分析:bean加载流程

背景 在Spring中&#xff0c;Bean的加载和管理是其核心功能之一&#xff0c;包括配置元数据解析、Bean定义注册、实例化、属性填充、初始化、后置处理器处理、完成创建和销毁等步骤。 源码入口 AbstractBeanFactory#doGetBean 具体源码流程如下&#xff1a; bean加载流程&#…

怎么利用商品详情API接口实现数据获取与应用?

在当今数字化的商业时代&#xff0c;高效获取和利用商品数据对于企业和开发者来说至关重要。商品详情 API 接口为我们提供了一种便捷的方式来获取丰富的商品信息&#xff0c;从而实现各种有价值的应用。本文将深入探讨如何利用商品详情 API 接口实现数据获取与应用。 一、商品…

信号转导的风暴中心:ERK1/2

前 言 ERK1/2是RAF-MEK-ERK信号通路的关键组成部分&#xff0c;在Thr202、Tyr204位点被磷酸化从而激活&#xff0c;进而激活多种与细胞增殖、分化、迁移和血管生成相关的底物&#xff08;超过160种&#xff09;。因此ERK1/2的(Thr202, Tyr204)/(Thr185, Tyr187)磷酸化是ERK激…

从SQL Server过渡到PostgreSQL:理解模式的差异

前言 随着越来越多的企业转向开源技术&#xff0c;商业数据库管理员和开发者也逐渐面临向PostgreSQL迁移的需求。 虽然SQL Server和PostgreSQL共享许多数据库管理系统&#xff08;RDBMS&#xff09;的基本概念&#xff0c;但它们在处理某些结构上的差异可能会让人感到困惑&…

利用Spring Boot实现医疗病历的B2B平台集成

第5章 系统实现 5.1 管理员角色 5.1.1 医院管理 管理员可以在医院管理界面对医院信息进行添加&#xff0c;修改&#xff0c;删除&#xff0c;查询操作。医院管理页面的运行结果如图5-1所示&#xff1a; 图5-1医院管理界面 5.1.2 医院注册 管理员可以在医院注册界面对医院信息…

【LeetCode】动态规划—1312. 让字符串成为回文串的最少插入次数(附完整Python/C++代码)

动态规划—1312. 让字符串成为回文串的最少插入次数 题目描述前言基本思路1. 问题定义目标&#xff1a;举例&#xff1a; 2. 理解问题和递推关系动态规划思路&#xff1a; 3. 解决方法动态规划方法伪代码&#xff1a; 4. 进一步优化5. 小总结 Python代码Python代码解释&#xf…

基于Spring Boot的医疗病历B2B平台开发策略

第4章 系统设计 4.1 系统总体设计 系统不仅要求功能完善&#xff0c;而且还要界面友好&#xff0c;因此&#xff0c;对于一个成功的系统设计&#xff0c;功能模块的设计是关键。由于本系统可执行的是一般性质的学习信息管理工作&#xff0c;本系统具有一般适用性&#xff0c;其…

Java项目:148 基于springboot的校友管理系统

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 校友管理系统项目说明 ​ 本系统是一个学校与毕业生的交流平台。方便校友们了解母校的最新动态&#xff0c;同学的情况&#xff1b;同时学校也可以通过平台了解…

<<迷雾>> 第11章 全自动加法计算机(2)--5 比特存储器 示例电路

可以读/写单个5位二进制数的存储器. info::操作说明 将多个比特单元组合的结果, 整体操作流程类似, 只是可同时读取多位 注: D0~D4 处没有引入写入测试开关, 读者可仿照前面自行引入 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.n…

【React】React18核心源码解读

前言 本文使用 React18.2.0 的源码&#xff0c;如果想回退到某一版本执行git checkout tags/v18.2.0即可。如果打开源码发现js文件报ts类型错误请看本人另一篇文章&#xff1a;VsCode查看React源码全是类型报错如何解决。 阅读源码的过程&#xff1a; 下载源码 观察 package…

MySQL 【日期】函数大全(二)

DATE_ADDDATE_FORMATDATE_SUBDATEDIFFDAYDAYNAMEDAYOFMONTHDAYOFWEEK 1、DATE_ADD DATE_ADD(date, value) &#xff1a;在指定的日期/时间上加上指定的时间间隔加并返回新的日期/时间。 DATE_ADD(date, value) DATE_ADD(date, INTERVAL value unit) date&#xff1a;需要操作…

Qt-系统处理键盘按键相关事件(58)

目录 描述 使用 单个按键 组合键 描述 Qt 中的按键事件是通过 QKeyEvent 类来实现的。当键盘上的按键被按下或者被释放时&#xff0c;键盘事件便会触发 Qt 中对按键事件进行了封装&#xff0c;QShortCut 就是封装出来的&#xff0c;这里我们介绍底层的函数 使用 单个按键…

如何将csdn文章导出为pdf

前言 在csdn上浏览文章的时候我发现有的文章支持pdf导出&#xff0c;但是有的文章不支持pdf导出&#xff0c;为了解决能将csdn上所有文章都能以pdf格式导出遂作此文。 正文 先上代码&#xff1a; (function(){use strict;var contentBox $("div.article_content")…

智能 AI 应用为什么需要知识库

智能 AI 应用为什么需要知识库 上回我们讲到如何在 Dify 上搭建企业知识库&#xff0c;并引入大语言模型应用中&#xff0c;实现企业内部知识助手。 使用 Dify 快速搭建企业内部知识助手。 其中提到的企业知识库&#xff0c;正是 “检索增强生成(Retrieval-Augmented Generat…

开放式耳机哪个品牌音质好?开放式耳机排行榜10强推荐!

耳机在我们的日常生活中扮演着重要角色&#xff0c;无论是上班路上还是运动时&#xff0c;它们都能帮助我们放松并增强安全感。选择一款合适的耳机很关键&#xff0c;开放式耳机因其设计&#xff0c;在不同场合都适用&#xff0c;特别是在运动时&#xff0c;它们提供了稳固而舒…

【笔记】Day2.2.1表设计说明

主键ID一般使用bigint类型 运送类型 使用比int更小的tinyint类型 eg&#xff1a;普快代表1 特快代表2&#xff08;没写反&#xff09; 关联城市 varchar 2代表京津冀 3代表江浙沪 4代表川渝 首重和续重都有小数点 故使用double 轻抛系数都为整数 故使用int 创建时间和修改…

基于SpringBoot+Vue的体育馆场地预约系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

【测试】自动化——概念篇

自动化测试 自动化概念 什么是自动化&#xff1f; 自动化操作在生活中处处可见&#xff0c;自动化洒水机、自动洗手液、超市自动闸门。 自动化测试——>自动的测试软件&#xff08;减少人力和时间的消耗&#xff0c;提高软件的测试质量&#xff09;。 人力&#xff1a;2…