当前位置: 首页 > news >正文

物联网之ESP32与微信小程序实现指示灯、转向灯

MENU

  • ESP32
  • 微信小程序


ESP32

代码

#include <WiFi.h>
#include <WebServer.h>
#include <ArduinoJson.h>const char* ssid = "jifu";
const char* pass = "2022xinchan!@#";
const int dateTime = 500;
const int ledPin4 = 4;
const int ledPin5 = 5;
bool isLTS = false;
bool isRTS = false;
bool isDFL = false;WebServer server(8068);// 封装响应函数
void sendResponse(int code, const char* status, const char* message, const String& originId, const String& newId) {StaticJsonDocument<200> doc;doc["code"] = code;doc["status"] = status;doc["message"] = message;JsonObject responseObj = doc.createNestedObject("response");responseObj["originId"] = originId;responseObj["newId"] = newId;String res;serializeJson(doc, res);server.send(code, "application/json", res);
}// 封装指示灯错误响应
void fnIndicatorLightSendResponseError(const String& originId, const String& newId) {isLTS = false;isRTS = false;isDFL = false;sendResponse(500, "failure", "失败", originId, newId);
}// 封装指示灯
void fnEncapsula(int pin1, int pin2) {if (pin1 != 1) digitalWrite(pin1, HIGH);if (pin2 != 1) digitalWrite(pin2, HIGH);delay(dateTime);if (pin1 != 1) digitalWrite(pin1, LOW);if (pin2 != 1) digitalWrite(pin2, LOW);delay(dateTime);
}// 左转灯
void leftTurnSignal() {fnEncapsula(ledPin4, 1);
}// 右转灯
void rightTurnSignal() {fnEncapsula(1, ledPin5);
}// 双闪灯
void doubleFlashingLights() {fnEncapsula(ledPin4, ledPin5);
}// 指示灯
void fnIndicatorLight() {String originId = server.arg("originId");String newId = server.arg("newId");if (originId == "") {int id = newId.toInt();switch (id) {case 1:isLTS = true;sendResponse(200, "success", "左转灯已开启", originId, newId);break;case 2:isRTS = true;sendResponse(200, "success", "右转灯已开启", originId, newId);break;case 3:isDFL = true;sendResponse(200, "success", "双闪灯已开启", originId, newId);break;default:fnIndicatorLightSendResponseError(originId, newId);break;}} else if (newId == "") {int id = originId.toInt();switch (id) {case 1:isLTS = false;sendResponse(200, "success", "左转灯已关闭", originId, newId);break;case 2:isRTS = false;sendResponse(200, "success", "右转灯已关闭", originId, newId);break;case 3:isDFL = false;sendResponse(200, "success", "双闪灯已关闭", originId, newId);break;default:fnIndicatorLightSendResponseError(originId, newId);break;}} else if (originId != "" && newId != "") {if (newId == "1") {isLTS = true;isRTS = false;isDFL = false;sendResponse(200, "success", "左转灯已开启", originId, newId);} else if (newId == "2") {isLTS = false;isRTS = true;isDFL = false;sendResponse(200, "success", "右转灯已开启", originId, newId);} else if (newId == "3") {isLTS = false;isRTS = false;isDFL = true;sendResponse(200, "success", "双闪灯已开启", originId, newId);} else {fnIndicatorLightSendResponseError(originId, newId);}} else {fnIndicatorLightSendResponseError(originId, newId);}
}// 初始化WiFi服务
void runInit() {WiFi.mode(WIFI_STA);WiFi.begin(ssid, pass);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print("Loading in progress...");}pinMode(ledPin4, OUTPUT);pinMode(ledPin5, OUTPUT);Serial.print("\nWiFiIP: ");Serial.println(WiFi.localIP());
}// 主函数
void setup() {Serial.begin(9600);runInit();server.on("/api/apiIndicatorLight", HTTP_GET, fnIndicatorLight);server.begin();
}// 循环函数
void loop() {server.handleClient();if (isLTS) leftTurnSignal();if (isRTS) rightTurnSignal();if (isDFL) doubleFlashingLights();
}

解析

敬请期待…


微信小程序

Html

代码

<view class="d_g gtc1_1fr gg_38"><view class="h_208 lh_208 fs_58 fw_b ta_c bc_efefef radius_8 {{activa===item.id?'color_409eff':''}}" wx:for="{{list}}" wx:key="id" data-id='{{item.id}}' catchtap='handleTabBar'>{{item.title}}</view>
</view>

解析
敬请期待…


JavaScript

代码

// components/IndicatorLight/page.js
import {indicatorLight
} from '../../api/indicatorLight.js';const {showToast
} = getApp();Component({/*** 组件的属性列表*/properties: {},/*** 组件的初始数据*/data: {list: [{id: 1,title: '左 转'},{id: 2,title: '右 转'},{id: 3,title: '双 闪'}],activa: ''},/*** 组件的方法列表*/methods: {async handleTabBar({target: {dataset: {id}}}) {const that = this;const thatData = that.data;let originId = thatData.activa;let newId = id;newId = originId === id ? '' : id;let {message} = await indicatorLight({originId,newId});that.setData({activa: newId},() => showToast(message));}}
})

解析
敬请期待…

相关文章:

物联网之ESP32与微信小程序实现指示灯、转向灯

MENU ESP32微信小程序 ESP32 代码 #include <WiFi.h> #include <WebServer.h> #include <ArduinoJson.h>const char* ssid "jifu"; const char* pass "2022xinchan!#"; const int dateTime 500; const int ledPin4 4; const int le…...

ICPC网络赛 以及ACM训练总结

一、训练反思 关于我自己暑假期间训练的反思&#xff0c;我承认无论是因为什么原因&#xff0c;我自己浪费我整整一个暑假的时间&#xff0c;暑假期间正是我们集训的关键时期&#xff0c;这期间没有任何的事情来打扰我们学习&#xff0c;而我却熬夜&#xff0c;白天训练懈怠&a…...

优化深度学习模型训练过程:提升PASCAL VOC 2012数据集上Deeplabv3+模型训练效率的策略

创作不易&#xff0c;您的打赏、关注、点赞、收藏和转发是我坚持下去的动力&#xff01; 优化说明&#xff1a; 避免重复下载和解压数据集&#xff1a;将downloadTrue改为downloadFalse&#xff0c;防止每次运行代码都重新下载和解压数据集&#xff0c;从而节省时间。 使用pin…...

【乐吾乐大屏可视化组态编辑器】使用手册

1 总览 开始设计&#xff1a;大屏可视化设计器 - 乐吾乐Le5le 1.1 画布 画布即绘画区域&#xff0c;将图形拖拽到画布进行编辑&#xff0c;绘制大屏。 1.2 菜单栏 顶部菜单导航&#xff0c;一级菜单可设置Logo、公司名称、文件编辑、常用编辑、查看、帮助&#xff0c;设置大…...

uniapp+若依 开发租房小程序源码分享

1、使用Uniapp开发的前台&#xff0c;基于 Vue.js 开发所有前端应用的框架&#xff0c;开发者编写一套代码&#xff0c;可发布到iOS、Android、Web&#xff08;响应式&#xff09;、以及各种小程序 2、基于SpringBoot的权限管理系统&#xff0c;易读易懂、界面简洁美观。 核心…...

日系编曲:节奏吉他与主音吉他 吉他的节奏型 节奏吉他的编写思路 吉他的Riff

这篇文章介绍的是日系吉他编写中的多吉他编写思路&#xff01; 日系吉他构成特点 ​一般日系曲子构成有两把以上的吉他&#xff0c;根据需求来进行补充&#xff1a; 通常至少为一把主音一把节奏&#xff0c;一把左一把右&#xff0c;主音一般是电吉他&#xff0c;节奏可以是电…...

【网络安全的神秘世界】目录遍历漏洞

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 先来了解两个概念&#xff1a; 身份认证&#xff1a;验证用户或者系统身份的过程&#xff0c;确保他们所声明的身份是真实的…...

使用 SpringBoot 基础web开发的支持

首先导入项目相关的依赖&#xff1a; pom.xml 文件&#xff1a; 导入相关项目依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-in…...

nature reviews genetics | 细胞互作和通讯方法总结

–https://doi.org/10.1038/s41576-023-00685-8 The diversification of methods for studying cell–cell interactions and communication 留意更多内容&#xff0c;欢迎关注微信公众号&#xff1a;组学之心 研究团队和研究单位 细胞间相互作用的前沿进展&#xff1a;从转…...

AI 浪潮中的一体化数据库|外滩大会之OceanBase实录

2024 年 9 月 5 日至 7 日&#xff0c;在上海黄浦世博园区&#xff0c;“2024 Inclusion 外滩大会”盛大举行。期间&#xff0c;9月6日&#xff0c;由OceanBase携手赛迪顾问共同策划并主办了 “AI浪潮中的分布式数据库&#xff1a;探索行业增长新动能与关键业务负载实践”。本…...

Qt自定义按键实现长,短按

本文介绍Qt自定义按键实现长&#xff0c;短按。 Qt触摸屏应用有时会涉及到触摸屏按钮长&#xff0c;短按操作&#xff0c;如长按实现关机操作&#xff0c;本文基于普通QPushButton为基类&#xff0c;自定义按键实现长&#xff0c;短按操作。 1.定义新类 这里以QPushButton为…...

禁用win10的自动更新功能

禁用win10自动更新的方法&#xff1a; 方法1&#xff1a;系统设置 开始->设置&#xff08;win i&#xff09;->更新和安全->高级选项->暂停更新&#xff08;只能暂停35天&#xff09; 方法2&#xff1a;服务 开始->运行&#xff08;win r&#xff09;->s…...

机器学习 第12章 计算学习理论

目录 基础知识PAC学习有限假设空间可分情形不可分情形 VC维稳定性 基础知识 计算学习理论研究的是关于通过"计算"来进行"学习"的理论&#xff0c;即关于机器学习的理论基础&#xff0c;其目的是分析学习任务的困难本质&#xff0c;为学习算法提供理论保证…...

【雅特力AT32】外部中断事件控制器EXINT(附源码解析)

基础概念弄懂了之后&#xff0c;对于实际开发中断初始化流程和寄存器查阅是很重要的。 1.EXINT介绍 2.功能描述和配置流程 中断初始化流程☆ ​ 1>选择中断源 ​ 2>选择触发方式 ​ 3>使能中断或事件 ​ 4>产生软件触发 ​ 中断清除流程 ​ 其他注意点 3.EXINT寄存…...

Redis集群_cluster

cluster集群 cluster翻译就是集群&#xff0c;所以cluster集群也叫做redis集群相比于哨兵模式&#xff0c;cluster集群能支持扩容&#xff0c;并且无需额外的节点来监控状态&#xff0c;所以使用这种模式集群的系统会用的更多些redis cluster采用的是去中心化网络拓扑架构&…...

jdk相关介绍

JDK&#xff0c;全称Java Development Kit&#xff0c;是Java语言开发的基础工具包。它包含了Java运行时环境&#xff08;JRE&#xff09;以及用于开发Java应用程序的各种工具和库。JDK为Java程序员提供了编译、调试和运行Java应用程序所需的全部环境。 JDK的主要组成部分包括&…...

【GoMate框架案例】讯飞大模型RAG智能问答挑战赛top10 Baseline

【RAG框架】GoMate&#xff1a;RAG Framework within Reliable input,Trusted output 【项目链接】&#xff1a;https://github.com/gomate-community/GoMate 一、赛题背景 RAG&#xff08;检索增强生成&#xff09;是一种结合了检索模型和生成模型的技术&#xff0c;它通过检…...

2024/9/15 408“回头看”之应用层小总结(下)

域名系统DNS: 本地域名服务器 本地域名服务器起着代理的作用&#xff0c;会将报文转发到根域名服务器、顶级域名服务器、权限域名服务器。 递归查询&#xff1a; 迭代查询&#xff1a; 文件传送协议FTP: FTP客户和FTP服务器之间使用的是tcp连接。 控制连接使用21端口&…...

经纬恒润高压电池管理系统,助力新能源汽车飞速发展

随着新能源汽车行业的快速发展&#xff0c;电池管理系统作为关键技术之一&#xff0c;其重要性日益凸显。经纬恒润自主研发的高压电池管理系统&#xff08;Battery Management System&#xff0c;BMS&#xff09;&#xff0c;凭借卓越的性能与先进的技术&#xff0c;在新能源汽…...

一文速通calcite结合flink理解SQL从文本变成执行计划详细过程

文章目录 你可以学到啥测试代码背景知识SQL转变流程图问题 你可以学到啥 SQL如何一步步变成执行计划的有哪些优化器&#xff0c;哪些优化规则calcite 和flink 如何结合的 测试代码 EnvironmentSettings settings EnvironmentSettings.inBatchMode(); TableEnvironment tabl…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...