物联网之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…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
