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

 找回密码
 立即注册
查看: 75|回复: 0

[硬件DIY] 【设备DIY】接入HA的蓝牙网关的制作和蓝牙温度计的制作

[复制链接]

1

主题

1

帖子

32

积分

新手上路

Rank: 1

积分
32
金钱
31
HASS币
0
发表于 昨天 19:51 | 显示全部楼层 |阅读模式
根据论坛里大佬们的讨论,成功制作了基于ESP32的蓝牙网关(网线款)、基于ESP32C3的蓝牙网关(无线款)、基于CH592F的BTHOME蓝牙温湿度计、基于ESP8266的涂鸦开关,特此发帖分享!点击标题可以跳转到项目位置,可以打板或下载配置文件(蓝牙网关有线版可能还在审核),预计还会制作基于CH592F的ibeacon定位模块!


一、基于ESP32C3的蓝牙网关(无线款)
1、这个项目是什么?目前,市面上的很多设备都采用低功耗的蓝牙,这些设备往往都不支持wifi连接,一方面也许是因为功耗的问题,另一方面,万恶(不是)的商家可以尽情售卖自己的蓝牙网关产品,就几大厂家来看,蓝牙网关的价格往往在150-200元的价位,这对于我——电子垃圾佬来说无异于巨大的负担(虽然我的元器件价格也超过这个价格了emmm),那么,有没有一种方法,既可以获得廉价的设备,又可以少敲代码——鱼与熊掌真的不可以兼得吗?

                               
登录/注册后可看大图

2、什么是ESPhome?ESPHome 是一个开源的物联网(IoT)框架,专为简单易用地配置和控制 ESP8266 和 ESP32 芯片开发的。它允许用户使用 YAML 配置文件轻松创建固件,以运行在支持的 ESP 芯片上,从而实现设备的自动化控制与集成,尤其是在智能家居领域。ESPHome 常被用作 Home Assistant 的伴侣工具,也可以独立运行。用户不再受限于传统的代码编程,只需要轻松的配置脚本就可以构建文件。

                               
登录/注册后可看大图

3、如何安装环境并烧录程序?我建议使用虚拟环境miniconda
(1)安装python环境
创建一个新的 Python 虚拟环境:
conda create -n esphome_env python=3.10 -y

激活虚拟环境:

conda activate esphome_env
(2)安装ESPhome
使用 pip 安装 ESPHome:
pip install esphome
验证安装是否成功:
esphome version
在你的工程文件下新建一个文件夹用于存储工程,在这个文件夹的上级目录执行
esphome dashboard demoe/
demo是按照你创建的文件夹名字来

                               
登录/注册后可看大图

(3)使用esphome新建并编译下载工程
打开esphome,在浏览器中输入:localhost:6052

                               
登录/注册后可看大图

点击"NEW DEVICE",选择ESP32C3设备,新建工程

                               
登录/注册后可看大图


                               
登录/注册后可看大图

选择EDIT,把附件中的yaml配置文件中的文本粘贴进来(注意,请更改自己家里的WiFi和密码)

                               
登录/注册后可看大图

在这里:

                               
登录/注册后可看大图

更改完毕后,回到主界面, 点击“Validate”

                               
登录/注册后可看大图


                               
登录/注册后可看大图

验证无误后,点击右下角的INSTALL

                               
登录/注册后可看大图

选择“Plug into....”那一项,使用usb数据线连接设备和电脑
此时你应该可以听到设备管理器不停的弹出和断开设备....

                               
登录/注册后可看大图


                               
登录/注册后可看大图

选择好设备,进行烧录,初次烧录时间较长,请耐心等待
4、我怎么使用这个设备?(1)烧录成功后,设备初始化时,右侧灯闪烁,左侧绿灯呼吸灯闪烁,蜂鸣器播放“一闪一闪亮晶晶....”
(2)打开log对话窗可以观察连接日志

                               
登录/注册后可看大图

(3)连接成功wifi后,右侧灯蓝灯常亮,如果连接失败,左侧灯会有黄色闪烁
(连接wifi、断开wifi均有提示音,可以在ymal文件中自行修改)
5、在HomeAssistant中添加esphome

                               
登录/注册后可看大图

端口号不用变,填入ip即可(我建议路由器端绑定mac地址)
什么?你没有HomeAssistant?快去买个渣机玩客云或者电视盒子,刷入Armbian系统,在docker或者原机下安装HA.....(按照评论区需求以及元子决定是否出视频教程)

6、添加BLE设备以小米为例,HA在设备端会显示小米的设备(或者其他设备)

                               
登录/注册后可看大图

添加小米设备(这里是温度计)

                               
登录/注册后可看大图

***注意,米家设备需要解密密钥,密钥获取请参考:https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor
其中,小米ID可以从id.mi.com中获得***
7、元器件采购(1)基本元器件——优信买全套就ok
(2)外壳(不太想打广告的,可是就他一家包邮我能有什么办法QvQ)

                               
登录/注册后可看大图

PS:主板厚度1.6mm,面板厚度1.0mm
二、基于ESP32的蓝牙网关(网线款)
1、这个项目是什么?目前,市面上的很多设备都采用低功耗的蓝牙,这些设备往往都不支持wifi连接,一方面也许是因为功耗的问题,另一方面,万恶(不是)的商家可以尽情售卖自己的蓝牙网关产品,就几大厂家来看,蓝牙网关的价格往往在150-200元的价位,这对于我——电子垃圾佬来说无异于巨大的负担(虽然我的元器件价格也超过这个价格了emmm),那么,有没有一种方法,既可以获得廉价的设备,又可以少敲代码——鱼与熊掌真的不可以兼得吗?

                               
登录/注册后可看大图

2、什么是ESPhome?ESPHome 是一个开源的物联网(IoT)框架,专为简单易用地配置和控制 ESP8266 和 ESP32 芯片开发的。它允许用户使用 YAML 配置文件轻松创建固件,以运行在支持的 ESP 芯片上,从而实现设备的自动化控制与集成,尤其是在智能家居领域。ESPHome 常被用作 Home Assistant 的伴侣工具,也可以独立运行。用户不再受限于传统的代码编程,只需要轻松的配置脚本就可以构建文件。

                               
登录/注册后可看大图

3、如何安装环境并烧录程序?我建议使用虚拟环境miniconda
(1)安装python环境
创建一个新的 Python 虚拟环境:
conda create -n esphome_env python=3.10 -y

激活虚拟环境:


conda activate esphome_env
(2)安装ESPhome
使用 pip 安装 ESPHome:
pip install esphome
验证安装是否成功:
esphome version
在你的工程文件下新建一个文件夹用于存储工程,在这个文件夹的上级目录执行
esphome dashboard demoe/
demo是按照你创建的文件夹名字来

                               
登录/注册后可看大图

(3)使用esphome新建并编译下载工程
打开esphome,在浏览器中输入:localhost:6052

                               
登录/注册后可看大图

点击"NEW DEVICE",选择ESP32设备,新建工程

                               
登录/注册后可看大图


                               
登录/注册后可看大图

选择EDIT,把附件中的yaml配置文件中的文本粘贴进来

                               
登录/注册后可看大图

更改完毕后,回到主界面, 点击“Validate”

                               
登录/注册后可看大图


                               
登录/注册后可看大图

验证无误后,点击右下角的INSTALL

                               
登录/注册后可看大图

选择“Plug into....”那一项,使用usb数据线连接设备和电脑
应该可以看到一个CH340K的设备,可以直接烧录,硬件部分增加了自动下载电路.

                               
登录/注册后可看大图


                               
登录/注册后可看大图

选择好设备,进行烧录,初次烧录时间较长,请耐心等待
4、我怎么使用这个设备?(1)烧录成功后,设备初始化时,左侧红灯闪烁,右侧绿灯呼吸灯闪烁,蜂鸣器播放“一闪一闪亮晶晶....”
(2)打开log对话窗可以观察连接日志

                               
登录/注册后可看大图

(3)连接HA后,左侧灯红灯熄灭,如果连接失败,左侧红灯会有闪烁
5、在HomeAssistant中添加esphome

                               
登录/注册后可看大图

端口号不用变,填入ip即可(我建议路由器端绑定mac地址)
什么?你没有HomeAssistant?快去买个渣机玩客云或者电视盒子,刷入Armbian系统,在docker或者原机下安装HA.....(按照评论区需求以及元子决定是否出视频教程)

6、添加BLE设备以小米为例,HA在设备端会显示小米的设备(或者其他设备)

                               
登录/注册后可看大图

添加小米设备(这里是温度计)

                               
登录/注册后可看大图

***注意,米家设备需要解密密钥,密钥获取请参考:https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor
其中,小米ID可以从id.mi.com中获得***
7、元器件采购(1)基本元器件——优信买全套就ok
(2)外壳(不太想打广告的,可是就他一家包邮我能有什么办法QvQ)

                               
登录/注册后可看大图

PS:主板厚度1.6mm,面板厚度1.2mm
8、相较于VerA版本的更新1、采用网口连接HA主机,使得蓝牙的扫描效率更高
2、增加了一颗RGB灯,可以手动修改颜色和亮度

                               
登录/注册后可看大图

9、复刻注意1、这里的外壳装配需要注意,C口的高度略高,需要打磨0.2mm左右的铝壳,在焊接过程中,可以采用铁板烧正面、部分铁板烧C口(背面),手动焊接背面的方式
2、网口可以买那种1元包邮的,和4元正版的那种是一样的
三、基于CH592F的BTHOME蓝牙温湿度计
1、项目来源项目的灵感来自@Azunya蓝牙温湿度计 工程,源工程使用的是AD广播的name属性播放温湿度计的信息,思路很好,但是这样的广播不能够接入任何智能设备,那么有没有一种方法能把DIY的温湿度计接入HA设备呢?
2、BThome协议BTHome协议是一种轻量级的蓝牙通信协议,设计用于智能家居传感器设备与接收端(如网关或主控设备)之间的数据传输。它由 ESPHome 项目团队开发,专注于实现低功耗、高效率的数据传输,特别适用于蓝牙低功耗(Bluetooth Low Energy, BLE)设备。

                               
登录/注册后可看大图

https://bthome.io/协议官网
3、实现原理实现原理很简单,官网上也给出了温湿度计的案例,我们将采集到的温湿度计填入具有uuid属性的BThome数据缓冲区中,即可向蓝牙网关进行广播。
(这里的蓝牙网关可以参考我的上个项目:https://oshwhub.com/bitshen/esp32-c3-mi-ni-lan-ya-wang-guan_copy
4、操作过程(1)烧录代码,使用WCHIPS烧录代码

                               
登录/注册后可看大图

(2)在HA中搜索设备,添加即可

                               
登录/注册后可看大图

(3)最终效果

                               
登录/注册后可看大图


(4)电量显示不太准,但是不想改了
四、基于涂鸦插座的智能插座ESPHOME版本
插座基于涂鸦mc010(esp8266),注意010w系列是博通系列不可以使用(焊接很繁琐)
烧录点可以参考网络上其他大佬的视频,我这里只给出ESPhome的配置文件。https://post.smzdm.com/p/a6pgp2ko/
tuya.ymal
substitutions:
  button_pin: GPIO13 
  relay_pin: GPIO12
  led_state_pin: GPIO5
  led_relay_pin: GPIO4
  node_name: plug-tuya
  node_id: plug_tuya
  node_name_friendly: ${node_name}
packages:
  common: !include common/common.yaml

esphome:
  name_add_mac_suffix: true

binary_sensor:
  - platform: gpio
    name: "${node_name}-button"
    id: "${node_id}_button" 
    pin:
      number: $button_pin
      inverted: true
      mode:
        input: true
        pullup: true
    on_press:
      then:
        - logger.log: "TOGGLE switch..."
        - switch.toggle: ${node_id}_switch
light:
  - platform: monochromatic
    name: ${node_name}-relay-led
    id: ${node_id}_relay_led
    output: ${node_id}_relay_led_pinout
    default_transition_length: 200ms

  - platform: status_led
    name: ${node_name}-LinkLed
    id: ${node_id}_link_led
    pin:
      number: $led_state_pin
      inverted: true

output:
  - platform: esp8266_pwm
    pin:
      number: $led_relay_pin
      inverted: true
    id: ${node_id}_relay_led_pinout

switch:
  - platform: safe_mode
    name: ${node_name}-safemode
    id: "${node_id}_safemode"

  - platform: gpio
    pin: $relay_pin
    name: "${node_name}-switch"
    id: "${node_id}_switch"  
    on_turn_on:
      then: 
        - light.turn_on: ${node_id}_relay_led
        - light.turn_off: ${node_id}_link_led
    on_turn_off:
      then: 
        - light.turn_off: ${node_id}_relay_led
        - light.turn_on: ${node_id}_link_led
common.ymal
esphome:
  name: ${node_name}

esp8266:
  board: esp01_1m
  restore_from_flash: false  

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  fast_connect: true
  reboot_timeout: 30min
  ap:
    ssid: "${node_id} hotspot"
    password: !secret ap_password

logger:
    level: INFO
api:
  password: !secret api_password
  reboot_timeout: 1h
ota:
  - platform: esphome
    password: !secret esphome_ota_password

web_server:
  port: 80
  include_internal: true
  version: 1

text_sensor:
  - platform: version
    name: '${node_name_friendly}-Version'
    id: ${node_id}_platform_version
  - platform: wifi_info
    ip_address:
      name: "${node_name_friendly}-IP"
      id: ${node_id}_ip
    bssid:
      name: "${node_name_friendly}-BSSID"
      id: ${node_id}_bssid
    mac_address:
      name: "${node_name_friendly}-MAC"
      id: ${node_id}_mac
  - platform: template
    name: '${node_name_friendly}-Uptime'
    id: ${node_id}_uptime_human
sensor:
  - platform: uptime
    id: ${node_id}_raw_up_time
    update_interval: 15min
    internal: true
    on_raw_value:
      then:
        - text_sensor.template.publish:
            id: ${node_id}_uptime_human
            state: !lambda |-
              int seconds = round(id(${node_id}_raw_up_time).raw_state);
              int days = seconds / (24 * 3600);
              seconds = seconds % (24 * 3600);
              int hours = seconds / 3600;
              seconds = seconds % 3600;
              int minutes = seconds /  60;
              seconds = seconds % 60;
              return (
                (days ? String(days) + "d " : "") +
                (hours ? String(hours) + "h " : "") +
                (minutes ? String(minutes) + "m " : "") +
                (String(seconds) + "s")
              ).c_str();
  - platform: wifi_signal
    name: "${node_name_friendly}-WifiSignal"
    id: ${node_id}_wifi_signal
    update_interval: 15min

    
binary_sensor:
  - platform: status
    name: "${node_name_friendly}-LinkStatus"
    id: ${node_id}_link_status

switch:
  - platform: restart
    name: "${node_name_friendly}-Restart"
    id: ${node_id}_restart

















回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-22 00:56 , Processed in 0.047787 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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