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

news2024/11/18 21:33:39

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-Fi
  connectToWiFi();

  // 设置 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 的开,板子的第二个灯亮起,其他灯的效果也是一样的,不做重复的演示
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2132895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA 修改 ${USER} 配置

背景 安装了阿里巴巴代码规范插件&#xff0c;需要使用自动添加作者信息的功能 但是添加的是个人昵称&#xff0c;并非公司要求的工号等信息&#xff0c;于是需要做出修改 修改方案 历经一番波折后&#xff0c;终于发现其原理&#xff0c;是因为 插件添加作者信息&#xff0…

Version ‘18.19.0‘ not found - try `nvm ls-remote` to browse available versions.

nvm安装指定版本不好使了 使用 nvm install 18.19.0 一直报错 Version 18.19.0 not found - try nvm ls-remote to browse available versions.然而使用 nvm ls-remote 只看到 iojs-v1.0.0iojs-v1.0.1iojs-v1.0.2iojs-v1.0.3iojs-v1.0.4iojs-v1.1.0iojs-v1.2.0iojs-v1.3.0iojs…

GPU池化为实现Robotaxi按下快进键

日前&#xff0c;甲子光年智库推出《2022中国Robotaxi行业研究报告&#xff1a;探寻规模化商业落地之路》。Robotaxi&#xff08;无人驾驶出租车&#xff09;是自动驾驶技术发展应用的终极目标之一&#xff0c;新基建下的智慧共享出行将链接贯穿未来数智化生活全场景。 该报告从…

html限制仅有一个音/视频可播放

html限制仅有一个音/视频可播放 /** 多个音频仅能播放一个 */ function audiosPlay() {const audios document.getElementsByTagName(audio);const videos document.getElementsByTagName(video);function pauseAll() {var self this;[].forEach.call(audios, function (i) …

MySQL之对数据库和表的操作

目录 一、创建数据库 二、字符集和校验规则 1、查看系统默认字符集 2、查看系统默认的校验规则 3、查看数据库支持的字符集 4、查看数据库支持的字符集校验规则 5、校验规则对数据库的影响 三、操作数据库 1、查看数据库 2、查看创建语句 ​编辑 3、修改数据库 4、…

从键入网址到显示页面全流程(超详细版)

网络 &#x1f468;‍&#x1f3eb; 小林coding 键入网址到网页显示&#xff0c;期间发生了什么 HTTP【端口&#xff1a;80】 解析URL 协议Web服务器地址目录 文件名 生成请求报文 请求行 请求方法&#xff08;get、post …&#xff09;请求路径协议的版本&#xff08;HTTP/1…

品读 Java 经典巨著《Effective Java》90条编程法则,第4条:通过私有构造器强化不可实例化的能力

文章目录 【前言】欢迎订阅【品读《Effective Java》】系列专栏java.lang.Math 类的设计经验总结 【前言】欢迎订阅【品读《Effective Java》】系列专栏 《Effective Java》是 Java 开发领域的经典著作&#xff0c;作者 Joshua Bloch 以丰富的经验和深入的知识&#xff0c;全面…

主数据管理系统:KPaaS 集成平台助力企业数据治理

在数字化转型的浪潮中&#xff0c;企业面临着日益复杂的信息技术环境。多系统并存、数据分散的现象普遍存在&#xff0c;这对企业的数据管理和业务协同提出了严峻挑战。主数据管理&#xff08;Master Data Management, MDM&#xff09;作为确保企业核心业务数据准确、一致、完整…

Vite - public目录的图片也会被处理?(public目录的特点)

目录 1&#xff0c;问题描述2&#xff0c;解决3&#xff0c;问题分析3.1&#xff0c;public 目录特点3.2&#xff0c;原因 1&#xff0c;问题描述 复现步骤&#xff1a; 项目为 vite5.0.8 创建的 Vue3 TS 项目。 将图片&#xff08;10kb&#xff09;放到了 public 目录下&a…

设计表时的三大范式(MySQL)

设计表时的三大范式 什么是范式第一范式第二范式不满足第二范式的缺点数据冗余插入异常更新异常删除异常 第三范式 什么是范式 在表的设计中&#xff0c;范式是一种设计规范&#xff0c;用于更好的组织和管理数据。 设计数据表时的范式有第一范式1NF、第二范式2NF、第三范式3…

linux-L8.linux更改文件的拥有者

L8.更改文件的拥有者 Chown root 123.txt xxx_你的用户名_xxxlinux 查看文件的所有者 在Linux中&#xff0c;可以使用ls命令的-l选项来查看文件的详细信息&#xff0c;包括文件的所有者。如下&#xff1a; ls -l

【828华为云征文|轻松搭建蝌蚪聊天室:华为云Flexus X实例实战教程】

文章目录 华为云Flexus X实例概述部署【蝌蚪聊天室】项目准备工作具体操作指南服务器相关环境确认用git拉取项目安装相关依赖运行项目查看效果 总结 华为云Flexus X实例概述 华为云Flexus云服务是一款专为中小企业和开发者设计的高级云产品&#xff0c;提供即开即用的体验&…

动手学习RAG: moka-ai/m3e 模型微调deepspeed与对比学习

动手学习RAG: 向量模型动手学习RAG&#xff1a;迟交互模型colbert微调实践 bge-m3 1. 环境准备 pip install open-retrievals2. 使用M3E模型 from retrievals import AutoModelForEmbeddingembedder AutoModelForEmbedding.from_pretrained(moka-ai/m3e-base, pooling_meth…

【Windows】获取进程缓解策略设置情况

目录 一、前言 二、主要概念 三、实现步骤 四、总结 原文出处链接&#xff1a;[https://blog.csdn.net/qq_59075481/article/details/142234952] 一、前言 在现代操作系统中&#xff0c;进程缓解策略&#xff08;Process Mitigation Policy&#xff09;提供了一种防御机制…

谷歌创始人谢尔盖·布林回归一线:承认错失先机,每天都在写代码

在科技界&#xff0c;有些名字永远闪耀着创新的光芒&#xff0c;谢尔盖布林就是其中之一。作为谷歌的联合创始人&#xff0c;布林在经历了一段时间的隐退后&#xff0c;宣布重返一线&#xff0c;投身于人工智能&#xff08;AI&#xff09;技术的研发。本周&#xff0c;在洛杉矶…

F12抓包10:UI自动化 - Elements(元素)定位页面元素

​课程大纲 1、前端基础 1.1 元素 元素是构成HTML文档的基本组成部分之一&#xff0c;定义了文档的结构和内容&#xff0c;比如段落、标题、链接等。 元素大致分为3种&#xff1a;基本结构、自闭合元素&#xff08;self-closing element&#xff09;、嵌套元素。 1、基本结构&…

Docker 常用命令(未完待续...)

Docker 常用命令&#xff08;未完待续...&#xff09; 命令的完整名称和别名帮助登录和搜索命令 (Login and Search Commands)其他管理命令 (Other Management Commands)镜像命令 (Image Commands)容器命令 (Container Commands)docker run 从镜像创建并运行一个新的容器docker…

Midjourney中秋特典-12张图附魔咒

第一张 魔咒 A Mid-Autumn Festival poster, a round bright moon, a Chinese-style pavilion with a scene of a reunion from Dream of the Red Chamber, a new Chinese style --ar 3:4 --v 6.1第二张 魔咒 The bright full moon hung in the night sky,clear in outline a…

【疑难杂症2024-005】docker-compose中设置容器的ip为固定ip后,服务无法启动

本文由Markdown语法编辑器编辑完成。 1.背景&#xff1a; 我们的产品是通过docker image的方式发布&#xff0c;并且编排在docker-compose.yml中发布。在同一个docker-compose.yml中的服务&#xff0c;相互之间&#xff0c;可以通过对方的服务名和端口&#xff0c;来直接访问…

动态规划算法---04.斐波那契数列模型_解码方法_C++

题目链接&#xff1a;91. 解码方法 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/decode-ways/description/ 一、题目解析 题目&#xff1a; 题目大意&#xff1a;从题目中我们可以知道&#xff0c;解码就是在字符串s中由‘1’到‘26’的字符可以转化…