『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 496|回复: 5

[基础教程] esphome控制ssd1306屏幕开关,实现人来亮屏无人息屏,温湿度

[复制链接]

1

主题

9

帖子

148

积分

注册会员

Rank: 2

积分
148
金钱
139
HASS币
0
发表于 2024-3-22 17:04:47 | 显示全部楼层 |阅读模式
本帖最后由 eenas 于 2024-3-22 17:04 编辑

最近买了一块ssd1306屏幕,用于显示温湿度等信息,并且想实现有人亮屏、无人息屏。经过一番搜索,发现并没找到完整且适合小白的教程,所以就自己去搜索,将结果拼接,最终实现了这个效果,适合小白直接套用。由于自己也是小白,里边有些注释写的可能不够准确,欢迎大家指正,一起学习。
这里用的元器件有:
ESP32开发板
dht11温湿度传感器
ssd1306显示器
SR602热释电人体红外传感器
以下为面包板的接线图(接线凌乱,大家不要在意):
截图1.png
i2c:
  - id: xsq  #定义i2c_id为xsq的sda、scl针脚,供后面调用
    sda: GPIO1   #使用ESP32 TX0
    scl: GPIO3   #使用ESP32 RX0

font:
  - file: "fonts/ht.ttf"  #设置字体的路径,需要先在HA上安装“Samba share”加载项,在config/esphome目录下放字体文件,这里为了目录明了新建了个fonts文件夹,即config/esphome/fonts下放了ht.ttf这个字体文件
    id: my_font  #用于给display调用字体选项,方便选择显示不同的字体、字号、字符
    size: 15  #设置字体的大小
    glyphs: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZna .-温湿度传感器%:° #设置需要显示的字符
  - file: "fonts/hyhj.ttf"
    id: my_font1
    size: 15
    glyphs: 温湿度传感器

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    i2c_id: xsq  #定义显示器的i2c_id为xsq
    address: 0x3C
    id: my_display  #设置显示器的id,用于后面switch调用
    lambda: |-
      it.print(0, 0, id(my_font1), "温湿度传感器");
      it.printf(0, 32, id(my_font), "温度: %.1f °C", id(dhtwd).state);
      it.printf(0, 46, id(my_font), "湿度: %.1f %%", id(dhtsd).state);
#上方前1个数字是显示到显示器的x坐标,第2个是y坐标,第1个id是选择需要的字体(字体、字号、字符),第2个id是选择输出内容的传感器id(id在传感器中定义),%.1f表示输出的内容输出到小数点后1位(比如输出到20.1,同理%.0f表示只输出整数),要输出%则需要写为%%
#注意,需要屏幕内容是在""内(如"多功能传感器",则屏幕显示多功能传感器,同时确保所输出的字符在前面的字体中有定义)

sensor:
  - platform: dht
    pin: GPIO18   #定义dht11使用ESP32 D18针脚,根据实际情况自己的选择,后面同理
    temperature:
      name: "Temperature"
      id: "dhtwd"  #提供给lambda调用(display中的第二个id,用于输出传感器的数据)
    humidity:
      name: "Humidity"
      id: "dhtsd"  #提供给lambda调用(display中的第二个id,用于输出传感器的数据)
    update_interval: 5s  #定义更新时间为5秒

binary_sensor:
  - platform: gpio
    pin: GPIO19
    name: "人体红外传感器"
    id: hw  #用于后面switch调用
    device_class: motion
    on_press:
      - switch.turn_on: sw  #当该GPIO为“按下”时(即有人时)执行id为sw的trun_on的操作
    on_release:
      - switch.turn_off: sw  #当该GPIO为“释放”时(即无人时)执行id为sw的trun_off的操作

switch:  #此为开关,须在前面调用
  - platform: template
    name: ESP Screen Switch
    id: sw
    lambda: |-
      if (id(hw).state) {
        return true;
      } else {
        return false;
      }
#上面的id(hw)为人体红外传感器的id,用于判断有人还是无人
    turn_on_action:
      - lambda: id(my_display).turn_on();  #此处id为显示器id,用于执行显示器开启,即有人开启屏幕
    turn_off_action:
      - lambda: id(my_display).turn_off();  #此处id为显示器id,用于执行显示器关闭,即无人关闭屏幕







评分

参与人数 6金钱 +56 收起 理由
梦飞翔 + 5 感谢楼主分享!
leafly + 5 感谢楼主分享!
DDDear + 10 感谢楼主分享!
book123 + 10 论坛有你更精彩!
flyice + 10 感谢楼主分享!
sorrypqa + 16 感谢楼主分享!

查看全部评分

回复

使用道具 举报

50

主题

1300

帖子

4892

积分

论坛DIY达人

积分
4892
金钱
3592
HASS币
20
发表于 2024-3-22 17:16:57 | 显示全部楼层
学习学习!谢谢分享!
回复

使用道具 举报

1

主题

13

帖子

143

积分

注册会员

Rank: 2

积分
143
金钱
130
HASS币
0
发表于 2024-4-7 17:12:49 | 显示全部楼层
顶一下 省的造轮子了,手里一堆esp8266和OLED 刚好用来做显示终端, 还可以用来显示和控制别的设备的状态,加几个按键做成一个迷你HA控制面板,画个外壳封装一下,感觉也好玩
回复

使用道具 举报

1

主题

9

帖子

148

积分

注册会员

Rank: 2

积分
148
金钱
139
HASS币
0
 楼主| 发表于 2024-4-8 14:04:05 | 显示全部楼层
msaiwl 发表于 2024-4-7 17:12
顶一下 省的造轮子了,手里一堆esp8266和OLED 刚好用来做显示终端, 还可以用来显示和控制别的设备的状态, ...

是的,可惜我比较懒,之前立创打过一次板,但画板的时候画错了,导致打出的板废了,后面就懒得搞了,就这样将就着用了,要不就拿个小点的喷锡板自己飞线焊接,要外壳的话就拿积木拼一下,将就着也能用,就是有点费手
回复

使用道具 举报

0

主题

16

帖子

486

积分

中级会员

Rank: 3Rank: 3

积分
486
金钱
470
HASS币
0
发表于 2024-4-8 16:56:52 | 显示全部楼层
2410c人在传感器没用到啊
回复

使用道具 举报

1

主题

9

帖子

148

积分

注册会员

Rank: 2

积分
148
金钱
139
HASS币
0
 楼主| 发表于 2024-4-10 17:36:55 | 显示全部楼层
梦飞翔 发表于 2024-4-8 16:56
2410c人在传感器没用到啊

ld2410c这篇帖子没有写进去,我在实际使用中有用到(还有SGP30),这篇帖子主要还是讲屏幕偏多,关于2410C的调用在论坛有很多了,就不赘述了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-27 17:28 , Processed in 2.230346 second(s), 31 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表