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

【IPV6从入门到起飞】5-3 IPV6+Home Assistant(ESP32+MQTT+GPIO)远程控制灯

IPV6+Home Assistant[ESP32+MQTT+GPIO]远程控制灯

  • 1 背景
  • 2 Home Assistant 配置
  • 3 ESP32 配置
    • 3-1 工程代码
    • 3-2 硬件接线
  • 4 实现效果

1 背景

在上一小节我们通过ESP32接入了Home Assistant,实现了温度、湿度、光照强度的数据采集,但智能家居更多的是实现控制,现在我们通过4个IO以及灯来模拟家庭的设备,通过Home Assistant远程控制开关。

如果有熟读上一节的内容 【IPV6从入门到起飞】5-2 IPV6+Home Assistant(ESP32+MQTT+DHT11+BH1750)传感器采集上传监测 的话,本节的内容相当简单。

还是老的套路。

2 Home Assistant 配置

配置yaml,添加四个灯,设置主题以及控制字

config/configuration.yaml
mqtt:switch:- name: "Lamp 1"command_topic: "home/esp32/lamp1"payload_on: "1"payload_off: "0"- name: "Lamp 2"command_topic: "home/esp32/lamp2"payload_on: "1"payload_off: "0"- name: "Lamp 3"command_topic: "home/esp32/lamp3"payload_on: "1"payload_off: "0"- name: "Lamp 4"command_topic: "home/esp32/lamp4"payload_on: "1"payload_off: "0"

检查配置,重载配置

在我我们的概览页会出现四个开关

在这里插入图片描述

3 ESP32 配置

直接使用GPIO5、18、19、21作为输出

3-1 工程代码

#include <WiFi.h>
#include <PubSubClient.h>const char* ssid = "mywifi_2.4G";            // 替换为你的 Wi-Fi SSID
const char* password = "12345666";           // 替换为你的 Wi-Fi 密码
const char* mqttServer = "192.168.66.118";   // 替换为你的 MQTT Broker IP
const int mqttPort = 1883;                    // 默认 MQTT 端口
const char* mqttUser = "YOUR_MQTT_USERNAME"; // 如果需要,替换为你的用户名
const char* mqttPassword = "YOUR_MQTT_PASSWORD"; // 如果需要,替换为你的密码WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);// 定义灯的 GPIO 引脚
const int lamp1Pin = 5;
const int lamp2Pin = 18;
const int lamp3Pin = 19;
const int lamp4Pin = 21;void setup() {Serial.begin(115200);// 设置 GPIO 引脚为输出pinMode(lamp1Pin, OUTPUT);pinMode(lamp2Pin, OUTPUT);pinMode(lamp3Pin, OUTPUT);pinMode(lamp4Pin, OUTPUT);// 连接到 Wi-FiconnectToWiFi();// 设置 MQTT 服务器mqttClient.setServer(mqttServer, mqttPort);mqttClient.setCallback(mqttCallback);
}void loop() {if (!mqttClient.connected()) {reconnectMQTT();}mqttClient.loop();
}void connectToWiFi() {Serial.print("Connecting to WiFi...");WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {delay(1000);Serial.print(".");}Serial.println("Connected to WiFi!");
}void reconnectMQTT() {while (!mqttClient.connected()) {Serial.println("Attempting MQTT connection...");if (mqttClient.connect("ESP32Client", mqttUser, mqttPassword)) {Serial.println("connected");mqttClient.subscribe("home/esp32/lamp1");mqttClient.subscribe("home/esp32/lamp2");mqttClient.subscribe("home/esp32/lamp3");mqttClient.subscribe("home/esp32/lamp4");} else {Serial.print("failed, rc=");Serial.print(mqttClient.state());Serial.println(" try again in 5 seconds");delay(5000);}}
}void mqttCallback(char* topic, byte* payload, unsigned int length) {payload[length] = '\0'; // 确保字符串结束String message = String((char*)payload);if (strcmp(topic, "home/esp32/lamp1") == 0) {digitalWrite(lamp1Pin, message == "1" ? HIGH : LOW);} else if (strcmp(topic, "home/esp32/lamp2") == 0) {digitalWrite(lamp2Pin, message == "1" ? HIGH : LOW);} else if (strcmp(topic, "home/esp32/lamp3") == 0) {digitalWrite(lamp3Pin, message == "1" ? HIGH : LOW);} else if (strcmp(topic, "home/esp32/lamp4") == 0) {digitalWrite(lamp4Pin, message == "1" ? HIGH : LOW);}
}

3-2 硬件接线

(这里使用的是步进电机驱动板,恰好有个灯,拿来用一下)
在这里插入图片描述

4 实现效果

点击页面上的 lamp2 的开,板子的第二个灯亮起,其他灯的效果也是一样的,不做重复的演示
在这里插入图片描述
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java 抽象类 接口--详解
  • 判断语句有几种写法
  • 【解决】AnimationCurve 运行时丢失数据问题
  • 三十三、Gin的中间件
  • 使用 ECharts 实现响应式图表:优化移动端用户体验
  • QT如何通过QTableWidget控件开发表格功能
  • 默认端口被占用后,如何修改Apache2 端口
  • Vue3 : ref 与 reactive
  • 计算机组成原理——第二章(19)
  • 基于SpringBoot的考研资讯平台设计与实现
  • 关于Python爬虫的基础知识
  • 如何实现过滤器、拦截器和全局异常捕获?
  • 使用dcm数据训练nnunet
  • FreeRTOS学习笔记(八)事件
  • echarts 3D地图
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Computed property XXX was assigned to but it has no setter
  • Consul Config 使用Git做版本控制的实现
  • Docker下部署自己的LNMP工作环境
  • gops —— Go 程序诊断分析工具
  • IDEA 插件开发入门教程
  • PHP CLI应用的调试原理
  • SOFAMosn配置模型
  • sublime配置文件
  • Vue.js 移动端适配之 vw 解决方案
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • AI算硅基生命吗,为什么?
  • ​一些不规范的GTID使用场景
  • #Spring-boot高级
  • (+4)2.2UML建模图
  • (1)Jupyter Notebook 下载及安装
  • (2015)JS ES6 必知的十个 特性
  • (a /b)*c的值
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (接口封装)
  • (论文阅读40-45)图像描述1
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一)Neo4j下载安装以及初次使用
  • (译) 函数式 JS #1:简介
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)菜鸟学数据库(三)——存储过程
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .NET CLR基本术语
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .net 调用海康SDK以及常见的坑解释
  • .Net的C#语言取月份数值对应的MonthName值
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • @Async注解的坑,小心
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [<死锁专题>]