请选择 进入手机版 | 继续访问电脑版

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

 找回密码
 立即注册
查看: 7511|回复: 120

[新奇玩法] 【10/13更新】12元RF Bridge配置示例

  [复制链接]

7

主题

59

帖子

766

积分

论坛技术达人

积分
766
金钱
697
HASS币
20
发表于 2021-9-13 17:05:06 | 显示全部楼层 |阅读模式
本帖最后由 ryanh7 于 2021-10-13 10:58 编辑

10月13日 更新
【bugfix】修复音量放大时有破音的问题
音量较小问题已经解决。可以在audio_player的音量设置中将音量设置到1000%以内。较高音量播放音乐会有音质损失,但用来播放语音提示时音量可以显著提高。更新方法:联网重新编译esphome。

写在前面
本文旨在于分享一个某宝上的物联盒子的diy经历。该盒子内含esp8266、433射频模块和语音模块。

这是前一个帖子https://bbs.hassbian.com/thread-14000-1-1.html
购买链接就不提了,看客们自行交流。

说明:
涉及电路操作,注意安全,自行承担后果。本文仅做分享,不确保所描述操作内容都是安全的。
35f194b865c6c1f0913e49ad97d492a.jpg


硬件部分
一、刷入esphome
拆开盒子,图上所示位置是esp8266的ttl刷机线,按钮按下后GPIO0即接地。
c7d477ec46bd6c5f09f5ae2e486d8f3.jpg
焊接.png
刷入步骤:
1、连接GND,RX,TX (这里默认看客们都是有过刷esp8266的经验)
2、按住按钮
3、连接3.3v供电线
4、松开按钮
5、刷入esphome(这里默认看客都是会ttl刷入esphome的)


这里楼主为了连接方便,在板子上借用了4个空置的孔位,用飞线接了针座。
针座.png


二、可选部分:改造语音
板子自带一个语音芯片wtn5085,有30条左右和门锁相关的语音。这个芯片可以保留,也可以用一个NPN三极管改成直接由esp8266驱动喇叭。
如果只是是想听听一听语音芯片的内容,可以这样配置
remote_transmitter:
  pin: GPIO2
  carrier_duty_percent: 100%

api:
  services:
    - service: play_audio
      variables:
        index: int
      then:
        - remote_transmitter.transmit_rc_switch_raw:
                    code: !lambda "uint8_t code=index;char str[9];for(int i=0;i<8;i++){str[i]=(code&(1<<i))?'1':'0';}str[8]=0;return str;"
                        protocol:
                          pulse_length: 200
在HASS的开发者工具里找到“服务”,找到esphome.xxxx_play_audio,index输入0到n的数字,调用。应该就能听到盒子发出语音。


如果需要改语音,可以拆下语音芯片,把三极管接进来。(最后结果,音量大概是手机外放的一半)
语音接线.png
手头上刚好有S8050,NPN三极管示例。这里偷懒没有接电阻。
这里没有专门计算电流,不清楚供电模块实际负载情况。
注意,由于改语音后占用了RX线,请改造前请确认已经刷入了esphome并正确配置了网络,以便后续通过OTA升级。


完全配置

esphome:
  name: rf-bridge
  platform: ESP8266
  board: esp_wroom_02
  platformio_options:
    board_build.f_cpu: 160000000L

# Enable logging
logger:
  baud_rate: 0 #RX被语音占用后需禁用原来的日志串口功能

wifi:
  networks:
    - ssid: "xxxxx"
      password: "xxxxxx"
    - ssid: "xxxxx2"
      password: "xxxxxxxxxx2"

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Rf-Bridge Fallback Hotspot"
    password: "xxxxx"

captive_portal:

ota:

external_components: #启用自定义组件
  - source: github://ryanh7/esphome-custom-components@dev
    components: [ audio_player, rf_bridge_cc1101 ]


# Enable Home Assistant API
api:
  services:
    - service: play_audio #在HASS里提供一个播放功能
      variables:
        url: string
      then:
        - audio_player.play:
            url: !lambda "return url;"
    - service: stop_audio #在HASS里提供一个暂停功能
      then:
        - audio_player.stop
    - service: transmit #在HASS里提供一个发送信号功能,protocol默认可以填1,code类似于1111101010101010101
      variables:
        code: string 
        protocol: int
      then:
        - rf_bridge_cc1101.transmit: 
            code: !lambda "return code;" 
            protocol: !lambda "return protocol;"

globals:
  # idle 1, wifi connected 2, reboot 3
  - id: var_light_status #辅助控制状态灯
    type: int
    restore_value: no
    initial_value: '0'
  - id: var_failed_counter #辅助控制wifi未连接超时重启
    type: int
    restore_value: no
    initial_value: '0'

script:
  - id: script_led_idle
    mode: single
    then:
      - if:
          condition:
            lambda: "return (id(var_light_status) != 1) && (id(var_light_status) != 3);"
          then:
            - globals.set:
                id: var_light_status
                value: '1'
            - light.turn_on:
                id: indicator
                effect: "slow flash"
  - id: script_led_connected
    mode: single
    then:
      - if:
          condition:
            lambda: "return (id(var_light_status) != 2) && (id(var_light_status) != 3);"
          then:
            - globals.set:
                id: var_light_status
                value: '2'
            - light.turn_off:
                id: indicator
                transition_length: 0s
  - id: script_led_reboot
    mode: single
    then:
      - globals.set:
          id: var_light_status
          value: '3'
      - light.turn_on:
          id: indicator
          effect: "fast flash"
  # 重置失败统计数
  - id: script_timout_reset
    mode: single
    then:
      - globals.set:
          id: var_failed_counter
          value: '0'
   # 3s检查一次,连续10分钟失败自动重启
  - id: script_timout_then_reboot
    mode: single
    then:
      - lambda: |-
          id(var_failed_counter) += 1;
          if (id(var_failed_counter) > 10*60/3) {
            App.reboot();
          }


output:
  - id: light_output
    platform: esp8266_pwm
    pin: GPIO13

light:
  - platform: monochromatic #指示灯
    id: "indicator"
    output: light_output
    restore_mode: ALWAYS_OFF
    effects:
      - pulse:
          name: "fast flash"
          transition_length: 0s
          update_interval: 100ms
      - pulse:
          name: "slow flash"
          transition_length: 250ms
          update_interval: 500ms

    
interval:
  - interval: 3s #定时检查wifi连接情况,控制状态灯及超时重启
    then:
      - if:
          condition:
            wifi.connected
          then:
            - script.execute: script_led_connected
            - script.execute: script_timout_reset
          else:
            - script.execute: script_led_idle
            - script.execute: script_timout_then_reboot


spi:
  id: cc1101
  clk_pin: GPIO16
  mosi_pin: GPIO12
  miso_pin: GPIO4


rf_bridge_cc1101:
  spi_id: cc1101
  cs_pin: GPIO5
  pin: GPIO14
  dump: #示例,sensor没匹配成功且没设置下面触发器的时候,在控制台打印收到的内容。可用于识别新的433设备。
    - rc_switch
  # on_code_received: #示例,使用一个收到信号时候的触发器。参考esphome的remote receiver组件的on_rc_switch触发器
  #   then:
  #     - lambda: |-
  #         ESP_LOGD("Trigger","received code %06X", x.code);
  

audio_player: #声音组件,支持基于http流的wav文件播放
  volume: 100% #基准音量,可适当增减
  buffer_size: 1024 #http流的缓冲区大小,网络原因造成卡顿时可尝试加大

text_sensor: #示例,播放器状态改变时这个sensor跟着变,可以配合HASS把盒子配置为播放器,该sensor指示播放器状态
  - platform: audio_player
    name: "RF Bridge 1 Player Status"

binary_sensor:
  - platform: gpio #按钮
    pin: GPIO0
    id: "button"
    filters:
      - invert:
      - delayed_on_off: 100ms
    on_press: #按下亮灯
      - light.turn_on:
          id: indicator
          transition_length: 0s
    on_release:
      - light.turn_off:
          id: indicator
          transition_length: 0s
    on_click: #单击暂停播放声音
      - audio_player.stop
    on_multi_click: #长按3s闪烁指示灯,松手重启
      - timing:
          - ON for at least 3s
        then:
          - script.execute: script_led_reboot
      - timing:
          - ON for at least 3s
          - OFF for at least 0.3s
        then:
          - lambda: |-
              App.reboot();
  - platform: rf_bridge_cc1101 #示例,这里配置了一个433人体传感器并绑定对应的433信号
    name: "motion 1"
    device_class: "motion"
    filters:
      - delayed_off: 500ms #传感器触发间隔。由于433一次会发送多个信号,建议最低不小于200ms,大可配置5min,10min等
    code: "101010111110011001101010"
    protocol: 1
配合HASS
设备.png

播放器.png
微信截图_20210913174014.png
写在后面
配置里用到了两个自己写的组件,仓促完成,难免还有不完善的地方,可以提一下意见。cc1101有很多设计无线电的寄存器配置未完全弄清楚,模块的灵敏度也许还有改进空间,有相关经验的朋友也可以交流一下。
代码仅供参考,不保证随着esphome的更新会一直兼容,代码仓库不保证一直有效。
语音这块音质还行,音量还不是很满意,感觉没有原来芯片的pwm差分驱动的声音大。欢迎交流更好的简单方案。10月3日更新,修复音量放大时的破音问题,音量设置到300%~800%,纯语音音量感人。

TODO
根据网友测试结果,信号还比较弱,暂不清楚是硬件问题还是软件配置问题。欢迎已经动手的论友分享DIY成果,以及有相关无线电经验的朋友交流一下。
附一张SDR在2~3米距离接受到信号的对比图。细线是RF Bridge连续发送的信号强度,旁边比较亮的是433人体报警器的。
屏幕截图 2021-09-20 122359.png





评分

参与人数 11金钱 +108 HASS币 +20 收起 理由
sloy + 5 膜拜大神!
cym9007 + 5 感谢楼主分享!
oversky + 8 厉害了word楼主!
yuyuye + 5 大神666!
924215947 + 10
+ 20 + 20 大神666!
mitu + 12 在下对你的景仰犹如滔滔长江之水,连绵不绝.
ghostist + 12 为什么我只能+12最多?
dscao + 16 感谢楼主分享!
Tao173 + 10 感谢楼主分享!
ostwald + 5 厉害了word楼主!

查看全部评分

回复

使用道具 举报

1

主题

61

帖子

494

积分

中级会员

Rank: 3Rank: 3

积分
494
金钱
433
HASS币
0
发表于 2021-9-13 17:52:05 | 显示全部楼层
我草 中午刚刷淘宝看见 下午就看见大神方案了 这就下单
回复

使用道具 举报

30

主题

581

帖子

2745

积分

金牌会员

Rank: 6Rank: 6

积分
2745
金钱
2159
HASS币
30
发表于 2021-9-13 18:08:11 | 显示全部楼层
本帖最后由 huang7dede 于 2021-9-13 18:16 编辑

搞了一个,,,当玩具玩


回复

使用道具 举报

8

主题

763

帖子

3587

积分

论坛元老

Rank: 8Rank: 8

积分
3587
金钱
2824
HASS币
0
发表于 2021-9-13 18:33:30 | 显示全部楼层
学习,谢谢分享
回复

使用道具 举报

6

主题

74

帖子

349

积分

中级会员

Rank: 3Rank: 3

积分
349
金钱
275
HASS币
0
发表于 2021-9-13 18:36:04 | 显示全部楼层
谢谢分享      
回复

使用道具 举报

6

主题

96

帖子

762

积分

高级会员

Rank: 4

积分
762
金钱
666
HASS币
0
发表于 2021-9-14 00:51:03 | 显示全部楼层
非常感谢分享。极具学习参考意义。有问题多想楼主讨教。
回复

使用道具 举报

1

主题

153

帖子

971

积分

高级会员

Rank: 4

积分
971
金钱
818
HASS币
0
发表于 2021-9-14 00:55:35 | 显示全部楼层

学习,谢谢分享
回复

使用道具 举报

18

主题

628

帖子

2562

积分

金牌会员

Rank: 6Rank: 6

积分
2562
金钱
1934
HASS币
0
发表于 2021-9-14 10:25:24 | 显示全部楼层
下单,跟上大神的步伐。
回复

使用道具 举报

6

主题

227

帖子

1021

积分

金牌会员

Rank: 6Rank: 6

积分
1021
金钱
794
HASS币
0
发表于 2021-9-14 12:24:17 | 显示全部楼层
论坛有你更精彩
折腾精神永存,感恩感谢论坛每一位愿意分享的大佬
回复

使用道具 举报

5

主题

64

帖子

284

积分

中级会员

Rank: 3Rank: 3

积分
284
金钱
220
HASS币
0
发表于 2021-9-14 15:55:20 | 显示全部楼层
有5元运费啊
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2021-12-4 03:25 , Processed in 0.134376 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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