物联网之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训练总结
一、训练反思 关于我自己暑假期间训练的反思,我承认无论是因为什么原因,我自己浪费我整整一个暑假的时间,暑假期间正是我们集训的关键时期,这期间没有任何的事情来打扰我们学习,而我却熬夜,白天训练懈怠&a…...

优化深度学习模型训练过程:提升PASCAL VOC 2012数据集上Deeplabv3+模型训练效率的策略
创作不易,您的打赏、关注、点赞、收藏和转发是我坚持下去的动力! 优化说明: 避免重复下载和解压数据集:将downloadTrue改为downloadFalse,防止每次运行代码都重新下载和解压数据集,从而节省时间。 使用pin…...

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

uniapp+若依 开发租房小程序源码分享
1、使用Uniapp开发的前台,基于 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序 2、基于SpringBoot的权限管理系统,易读易懂、界面简洁美观。 核心…...
日系编曲:节奏吉他与主音吉他 吉他的节奏型 节奏吉他的编写思路 吉他的Riff
这篇文章介绍的是日系吉他编写中的多吉他编写思路! 日系吉他构成特点 一般日系曲子构成有两把以上的吉他,根据需求来进行补充: 通常至少为一把主音一把节奏,一把左一把右,主音一般是电吉他,节奏可以是电…...

【网络安全的神秘世界】目录遍历漏洞
🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 先来了解两个概念: 身份认证:验证用户或者系统身份的过程,确保他们所声明的身份是真实的…...

使用 SpringBoot 基础web开发的支持
首先导入项目相关的依赖: pom.xml 文件: 导入相关项目依赖 <?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 留意更多内容,欢迎关注微信公众号:组学之心 研究团队和研究单位 细胞间相互作用的前沿进展:从转…...

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

Qt自定义按键实现长,短按
本文介绍Qt自定义按键实现长,短按。 Qt触摸屏应用有时会涉及到触摸屏按钮长,短按操作,如长按实现关机操作,本文基于普通QPushButton为基类,自定义按键实现长,短按操作。 1.定义新类 这里以QPushButton为…...
禁用win10的自动更新功能
禁用win10自动更新的方法: 方法1:系统设置 开始->设置(win i)->更新和安全->高级选项->暂停更新(只能暂停35天) 方法2:服务 开始->运行(win r)->s…...
机器学习 第12章 计算学习理论
目录 基础知识PAC学习有限假设空间可分情形不可分情形 VC维稳定性 基础知识 计算学习理论研究的是关于通过"计算"来进行"学习"的理论,即关于机器学习的理论基础,其目的是分析学习任务的困难本质,为学习算法提供理论保证…...

【雅特力AT32】外部中断事件控制器EXINT(附源码解析)
基础概念弄懂了之后,对于实际开发中断初始化流程和寄存器查阅是很重要的。 1.EXINT介绍 2.功能描述和配置流程 中断初始化流程☆ 1>选择中断源 2>选择触发方式 3>使能中断或事件 4>产生软件触发 中断清除流程 其他注意点 3.EXINT寄存…...

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

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

【GoMate框架案例】讯飞大模型RAG智能问答挑战赛top10 Baseline
【RAG框架】GoMate:RAG Framework within Reliable input,Trusted output 【项目链接】:https://github.com/gomate-community/GoMate 一、赛题背景 RAG(检索增强生成)是一种结合了检索模型和生成模型的技术,它通过检…...

2024/9/15 408“回头看”之应用层小总结(下)
域名系统DNS: 本地域名服务器 本地域名服务器起着代理的作用,会将报文转发到根域名服务器、顶级域名服务器、权限域名服务器。 递归查询: 迭代查询: 文件传送协议FTP: FTP客户和FTP服务器之间使用的是tcp连接。 控制连接使用21端口&…...

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

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

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器: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 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

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

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...