当前位置: 首页 > 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));}}
})

解析
敬请期待…


http://www.mrgr.cn/news/27678.html

相关文章:

  • ubuntu20.04 colmap 安装2024.11最新
  • 电商系统开发:Spring Boot框架实战
  • 【Hadoop】【hdfs】【大数据技术基础】实验三 HDFS 基础编程实验
  • jdk1.7的hashmap为什么会出现死循环问题
  • 对接钉钉审批详情
  • Spark RDD sortBy算子什么情况会触发shuffle
  • MyBatis中多对一关系的三种处理方法
  • “双减”政策下的课外辅导变革:少儿编程迎来新机遇
  • Java内部类,看这一篇就够了!
  • synchronized的详解、锁的升级过程和优缺点比较
  • 什么是快充协议,最常见的快充协议有哪些
  • 进程间通信之消息队列详解
  • 个人虚拟物品商城网站源码,后台试Thinkphp6.0开发的,前端是vue的。
  • 三、(JS)JS中常见的表单事件
  • 返回当前栈内最小元素
  • Dubbo SPI源码
  • 面试题总结(三) -- 内存管理篇
  • Java--图书管理系统(新版详细讲解)
  • Scrapy 2.6 Spider Middleware 爬虫页中间件基本使用
  • 基于python+django+vue的学生考勤管理系统
  • 86-java jmap分析内存
  • Java API 之集合框架进阶
  • 24年云南省下半年事业单位少有人知的10个真相
  • 【Android Studio】API 29(即Android 10)或更高版本,在程序启动时检查相机权限,并在未获取该权限时请求它
  • 约瑟夫环和一元多项式修正版
  • 乌俄冲突下AI和计算机的使用