【IPV6从入门到起飞】5-4 IPV6+Home Assistant(ESP32+MQTT+ILI9488)远程留言墙

news2024/11/13 8:45:58

IPV6+Home Assistant[ESP32+MQTT+ILI9488]远程留言墙

  • 1 背景
  • 2 Home Assistant 配置
    • 2-1 配置 yaml
    • 2-2 效果
  • 3 ESP32 配置
    • 3-1 使用 TFF_eSPI 库
    • 3-2 修改默认的SPI屏幕配置文件
    • 3-3 接线
    • 3-4 ESP32 工程代码
  • 4 测试
    • 4-1 留言板设置内容
    • 4-2 ESP32 屏幕显示
  • 5 后记

1 背景

在前面我们的几个小节已经对Home Assistant的功能有了一定的了解:

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)
【IPV6从入门到起飞】5-2 IPV6+Home Assistant(ESP32+MQTT+DHT11+BH1750)传感器采集上传监测
【IPV6从入门到起飞】5-3 IPV6+Home Assistant(ESP32+MQTT+GPIO)远程控制灯

在这一小节我们通过ESP32 接上ILI9488(SPI,320x480)屏幕,实现Home Assistant的留言功能。
简述如下:
在Home Assistant进行留言,在ESP32的屏幕上实时显示留言的内容。

下面开始实现我们的方案。

2 Home Assistant 配置

2-1 配置 yaml

还是一样的操作,在 config/configuration.yaml添加以下的内容:
在根节点下添加

      
input_text:
  message_board:
    name: "留言板"
    initial: "说点什么吧^_^"
    max: 1000
    
automation:
  - alias: "Send Message to ESP32"
    trigger:
      platform: state
      entity_id: input_text.message_board
    action:
      service: mqtt.publish
      data:
        topic: "home/esp32/message"
        payload: "{{ states('input_text.message_board') }}"

2-2 效果

重启或者重新加载配置后,在我们的概览页新增了以下的内容:
在这里插入图片描述

3 ESP32 配置

3-1 使用 TFF_eSPI 库

搜索安装这个
在这里插入图片描述

3-2 修改默认的SPI屏幕配置文件

因为我们要使用到 <TFT_eSPI.h>,里面包含了 <User_Setup_Select.h>
在这里插入图片描述

而 <User_Setup_Select.h> 使用了 <User_Setup.h>
在这里插入图片描述
所以我们修改<User_Setup.h> 文件的配置即可
目录可参考以下路径:

C:\Users\Administrator\Documents\Arduino\libraries\TFT_eSPI

在这里插入图片描述
以下是我的配置

#define ILI9488_DRIVER
#define TFT_WIDTH  320
#define TFT_HEIGHT 480

// The hardware SPI can be mapped to any pins
#define TFT_MISO 19
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS   15  // Chip select control pin
#define TFT_DC   22  // Data Command control pin
#define TFT_RST   4  // Reset pin (could connect to RST pin)
// #define TOUCH_CS 21

// Section 3. Define the fonts that are to be used here
#define LOAD_GLCD   // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
#define LOAD_FONT2  // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#define LOAD_FONT4  // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
#define LOAD_FONT6  // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
#define LOAD_FONT7  // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.
#define LOAD_FONT8  // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
//#define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT
#define LOAD_GFXFF  // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts

#define SMOOTH_FONT

// Section 4. Other options
#define SPI_FREQUENCY  27000000
#define SPI_READ_FREQUENCY  20000000
#define SPI_TOUCH_FREQUENCY  2500000

#define USE_HSPI_PORT //这条重要

参考了博客 https://blog.51cto.com/u_16213687/10731709

3-3 接线

按照上面的配置 pin 对 pin 连接即可,注意要BL给3.3v

3-4 ESP32 工程代码

#include <TFT_eSPI.h> // 引入 TFT_eSPI 库
#include <WiFi.h>     // 引入 WiFi 库
#include <PubSubClient.h> // 引入 PubSubClient 库

// WiFi 和 MQTT 配置
const char* ssid = "mywifi_2.4G"; // 替换为您的 WiFi SSID
const char* password = "12345666"; // 替换为您的 WiFi 密码
const char* mqtt_server = "192.168.66.118"; // 替换为您的 MQTT 代理地址

TFT_eSPI tft = TFT_eSPI(); // 创建 TFT_eSPI 对象
WiFiClient espClient; // 创建 WiFi 客户端
PubSubClient client(espClient); // 创建 MQTT 客户端

void setup() {
  tft.init(); // 初始化显示器
  tft.setRotation(3); // 设置显示方向为 3
  tft.fillScreen(TFT_BLACK); // 清屏并填充黑色背景

  tft.setFreeFont(&FreeSans12pt7b); // 使用 FreeSans 字体,大小为 12pt

  // 设置文本颜色和大小
  tft.setTextColor(TFT_WHITE);
  tft.setTextSize(2);

  // 连接到 WiFi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
  }

  // 连接到 MQTT 代理
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
  reconnect();
}

void loop() {
  client.loop(); // 处理 MQTT 消息
}

// MQTT 连接
void reconnect() {
  while (!client.connected()) {
    if (client.connect("ESP32Client")) {
      client.subscribe("home/esp32/message"); // 订阅留言主题
    } else {
      delay(5000);
    }
  }
}

// 处理接收到的消息
void callback(char* topic, byte* payload, unsigned int length) {
  // 清屏
  tft.fillScreen(TFT_BLACK);
  
  // 将消息转换为字符串并显示
  String message;
  for (int i = 0; i < length; i++) {
    message += (char)payload[i];
  }
  
  // 设置光标位置并显示消息
  tft.setCursor(40, 40);
  tft.println(message);
}

4 测试

4-1 留言板设置内容

在这里插入图片描述

4-2 ESP32 屏幕显示

在这里插入图片描述

5 后记

在折腾ESP32驱动ili9488屏幕时花了好长的时间,绕了一些弯路
目前的屏幕响应速度很快,更新后基本上是秒刷的
缺点:目前只支持英文的显示,后续在看看能不能支持中文的显示

更多玩法后续持续更新,欢迎关注探讨~

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

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

相关文章

自动驾驶中的决策规划技术分享--轻舟智航

文章目录 0.概述&#xff1a;1 导航模块2 决策模块2.1 车道决策2.2 障碍物决策 3 轨迹规划3.1 时空分离规划3.2 时空联合规划 4 对比 0.概述&#xff1a; 李仁杰&#xff0c;轻舟智航规划算法负责人&#xff0c;自动驾驶决策与规划技术专家。 在自动驾驶系统中&#xff0c;决策…

Win10 录屏秘籍大公开:从新手到高手的进阶之路

之前因为某些原因不方便到客户那里进行软件培训&#xff0c;我们就发现录屏讲解供客户随时查看的方式好像更有效果。这次我就介绍一些能够实现win10怎么录屏操作的工具讲解。 1.福昕录屏大师 链接&#xff1a;www.foxitsoftware.cn/REC/ 这个工具是一款专业的电脑录屏软件&a…

SVN泄露 CTFHUB 解题笔记

参考大佬链接CTFHub | SVN泄露_ctfhubsvn泄露-CSDN博客 先下载插件 然后把GIT&#xff1b;里面的代码 乱盘上去 python2 不知道需不需要 先装了 再说。。。我的是裸机~ 开始作妖模式 Ubuntu 22.10 | Installati.one 上面一行的代码 链接 下面 插件 GITHUB页面下面的代码 d…

企业网络安全关键:防御措施和应急响应

感谢浪浪云支持发布 浪浪云活动链接 &#xff1a;https://langlangy.cn/?i8afa52 文章目录 什么是网络安全常见的网络安全威胁病毒和恶意软件网络钓鱼拒绝服务攻击中间人攻击社会工程学 基本的网络安全措施强密码策略双因素认证安装和更新防病毒软件定期备份 高级的网络安全方…

Java-面向对象编程(基础部分)

类和对象的区别和联系 类&#xff1a;类是封装对象的属性和行为的载体&#xff0c;在Java语言中对象的属性以成员变量的形式存在&#xff0c;而对象的方法以成员方法的形式存在。 对象&#xff1a;Java是面向对象的程序设计语言&#xff0c;对象是由类抽象出来的&#xff0c;…

使用 MobaXterm 远程连接 Linux 虚拟机并实现文件传输

文章目录 前言一、什么是 MobaXterm二 、MobaXterm 安装三、使用 MobaXterm 远程连接 Linux 虚拟机1. 准备工作2. 创建 SSH 连接3. 登录虚拟机 四、使用 MobaXterm 进行文件传输总结 前言 在日常开发和运维中&#xff0c;Windows 用户经常需要通过远程连接到 Linux 服务器进行…

链式栈讲解

文章目录 &#x1f34a;自我介绍&#x1f34a;链式栈入栈和出栈linkstack.hlinkstack.c 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以&#xff1a;点赞关注评论收藏&#xff08;一键四连&#xff09;哦~ &#x1f34a;自我介绍 Hello,大家好&#xff0c;我是小珑也要…

UBUNTU20.04安装CH384串口卡驱动

继续上文&#xff1a;统信UOS安装CH384串口卡驱动-CSDN博客 统信UOS系统成功安装CH384串口驱动后&#xff0c;继续在ubuntu20.04下安装驱动&#xff0c;发现一直报错&#xff0c;原因是内核驱动不一致。 解决办法&#xff1a; 1. 下载最新的驱动。CH35XCH384驱动源文件资源-C…

【WPF】02 按钮控件圆角配置及状态切换

按钮圆角 先从工具箱里拖进来一个Button控件&#xff0c;然后对这个按钮进行美化。 首先在 xaml 里按钮控件部分 添加如下代码&#xff1a; <Button x:Name"btnLogin" Content"登录" HorizontalAlignment"Center" Margin"0,399,0,0&q…

报错合计-1

向开发描述&#xff1a;先勾选一个病灶后复制&#xff0c;控制台报错 报错类型查询后为前端DOM节点相关报错&#xff0c;提给前端开发 报错解释&#xff1a; TypeError: Failed to execute selectNode on Range: parameter 1 is not of type Node 这个错误表明你尝试使用 Range…

【机器学习】:深潜智能的底层逻辑、前沿探索与未来展望】

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 在科技的浩瀚星空中&#xff0c;机器学习犹如一颗璀璨的新星&#xff0c;以其独特的魅力和无限潜力&#xff0c;引领着我们向智能的深处探索。今天&#xff0c;我们将一同踏上这场深度之旅&#xff0c;不仅解析…

AI时代,服务器厂商能否打破薄利的命运?

文&#xff5c;刘俊宏 编&#xff5c;王一粟 AI大模型正在引发新一轮的“算力焦渴”。 近日&#xff0c;OpenAI刚发布的o1大模型再次刷新了大模型能力的上限。对比上一次迭代的版本&#xff0c;o1的推理能力全方位“吊打”了GPT-4o。更优秀的能力&#xff0c;来自与o1将思维…

Flink官方文档

Flink官方文档&#xff08;全面、详细&#xff09;&#xff1a;https://nightlies.apache.org/flink/flink-docs-master/zh/

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL24

边沿检测 有一个缓慢变化的1bit信号a&#xff0c;编写一个程序检测a信号的上升沿给出指示信号rise&#xff0c;当a信号出现下降沿时给出指示信号down。 注&#xff1a;rise,down应为单脉冲信号&#xff0c;在相应边沿出现时的下一个时钟为高&#xff0c;之后恢复到0&#xff0…

116页PPT麦肯锡方法详解-用简单的方法做复杂的事

读者朋友大家好&#xff0c;最近有会员朋友咨询晓雯&#xff0c;需要《116页PPT麦肯锡方法详解-用简单的方法做复杂的事》资料&#xff0c;欢迎大家文末扫码下载学习。 以下是在实际工作中应用麦肯锡问题解决法的具体方式&#xff1a; 一、项目管理与流程优化领域 界定问题 …

再看Java-笔试

放在前面的话 最近确实有些空闲&#xff0c;分配的功能从一开始的两眼一黑到现在的一上午就能完成&#xff0c;这何尝不是一种进步呢。 该说不说&#xff0c;海康的API问题相比较其他第三方的API还是蛮多的&#xff0c;而且10月份人工客服还会停运&#xff0c;不过到那个时候…

LeetCode54. 螺旋矩阵(2024秋季每日一题 21)

给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2&#xff1a; 输入&#xff1a;matrix [[1,…

由于安全风险,安全领导者考虑禁止人工智能编码

安全团队与开发团队之间的紧张关系 83% 的安全领导者表示&#xff0c;他们的开发人员目前使用人工智能来生成代码&#xff0c;57% 的人表示这已成为一种常见做法。 然而&#xff0c;72% 的人认为他们别无选择&#xff0c;只能允许开发人员使用人工智能来保持竞争力&#xff0…

【Unity】对象池 - 未更新完

自定义泛型对象池 文章目录 自定义泛型对象池封装泛型类例子 使用Unity自带对象池 封装泛型类 public abstract class MyPool<T> : MonoBehaviour where T :Component {[SerializeField] protected T prefab; // 生成的预制体[SerializeField] protected int defaultNum…

Delphi5利用DLL实现窗体的重用

文章目录 效果图参考利用DLL实现窗体的重用步骤1 设计出理想窗体步骤2 编写一个用户输出的函数或过程&#xff0c;在其中对窗体进行创建使它实例化步骤3 对工程文件进行相应的修改以适应DLL格式的需要步骤4 编译工程文件生成DLL文件步骤5 在需要该窗体的其他应用程序中重用该窗…