当前位置: 首页 > 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…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...