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

 找回密码
 立即注册
查看: 2865|回复: 6

[经验分享] sonoff rf bridge R2 v2.2刷esphome过程分享(remote_transmitterd避坑)

[复制链接]

76

主题

1357

帖子

1万

积分

元老级技术达人

积分
18296
金钱
16899
HASS币
290
发表于 2022-1-17 15:57:59 | 显示全部楼层 |阅读模式
本帖最后由 dscao 于 2022-1-18 20:19 编辑

之前玩12元的rf-bridge感觉还不错,但信号弱是唯一不足的地方,本来想着淘个信号放在转发之类的设备,成品设备也要80以上。干脆弄个sonoff rf bridge玩玩,成品小巧,看有不少文章介绍这个。于是买了个新款的好看,回来后发现刷esphome的资料很少,中文的更少。还好国外论坛有一些资料。

008.jpg

009.jpg

003.jpg

004.jpg


先在编译esphome固件:按官方的代码下载bin文件,https://esphome.io/components/rf_bridge.html
esphome:
  name: sonoff-rf-bridge

esp8266:
  board: esp01_1m

# Enable Home Assistant API
web_server:
  port: 80

api:
  services:
    - service: send_rf_code
      variables:
        sync: int
        low: int
        high: int
        code: int
      then:
        - rf_bridge.send_code:
            sync: !lambda 'return sync;'
            low: !lambda 'return low;'
            high: !lambda 'return high;'
            code: !lambda 'return code;'
    - service: learn
      then:
        - rf_bridge.learn

uart:
  tx_pin: 1
  rx_pin: 3
  baud_rate: 19200

logger:
  baud_rate: 0

rf_bridge:
  on_code_received:
    then:
      - homeassistant.event:
          event: esphome.rf_code_received
          data:
            sync: !lambda 'char buffer [10];return itoa(data.sync,buffer,16);'
            low: !lambda 'char buffer [10];return itoa(data.low,buffer,16);'
            high: !lambda 'char buffer [10];return itoa(data.high,buffer,16);'
            code: !lambda 'char buffer [10];return itoa(data.code,buffer,16);'

ota:
  password: !secret ota_password


status_led:
  pin:
    number: GPIO13
    inverted: false

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

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

captive_portal:


参考网上资料用ttl将编译的固件通过ESPHome-Flasher-1.4.0-Windows-x64.exe刷入:
可以使用,收发也都没问题,就是信号的格式只能是这种。发可以在hass的服务中调用服务,事件中订阅esphome.rf_code_received也能收到json的消息。
已经刷入esphome固件了,升级或修改或刷其它固件都非常方便了。
002.jpg
(参考刷机接线图,按住唯一的按钮插入电脑usb,点工具刷机)

007.jpg

后找到硬改的教程:
https://community.home-assistant ... hing-help/344326/17
代码要参考:https://esphome.io/components/re ... emote-setting-up-rf
先升级固件:
esphome:
  name: sonoff-rf-bridge

esp8266:
  board: esp01_1m

# Enable Home Assistant API
web_server:
  port: 80

api:
  services:
    - service: send_rf_code
      variables:
        sync: int
        low: int
        high: int
        code: int
      then:
        - rf_bridge.send_code:
            sync: !lambda 'return sync;'
            low: !lambda 'return low;'
            high: !lambda 'return high;'
            code: !lambda 'return code;'
    - service: learn
      then:
        - rf_bridge.learn

uart:
  tx_pin: 1
  rx_pin: 3
  baud_rate: 19200

logger:
  baud_rate: 0

rf_bridge:
  on_code_received:
    then:
      - homeassistant.event:
          event: esphome.rf_code_received
          data:
            sync: !lambda 'char buffer [10];return itoa(data.sync,buffer,16);'
            low: !lambda 'char buffer [10];return itoa(data.low,buffer,16);'
            high: !lambda 'char buffer [10];return itoa(data.high,buffer,16);'
            code: !lambda 'char buffer [10];return itoa(data.code,buffer,16);'

ota:
  password: !secret ota_password

remote_receiver:
  pin: 4
  dump: rc_switch
  # Settings to optimize recognition of RF devices
  tolerance: 50%
  filter: 250us
  idle: 4ms
  buffer_size: 2kb

remote_transmitter:
  pin: 5
  carrier_duty_percent: 100%

  
# this will log received commands, and can also transmit. Read up here:
# https://esphome.io/components/remote_transmitter.html#remote-setting-up-rf

status_led:
  pin:
    number: GPIO13
    inverted: false

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

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

captive_portal:


switch:
  - platform: template
    name: Sample Remote
    turn_on_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '011000000011111001010100'
          protocol: 1
          repeat: 5
只是接上两根线,开机发现接收到多种格式的信号了,包括原来的信号和新的rc_switch格式的了。如果只接两根线,接收就是功能较全的,也不影响原来的功能。但只能用原来的格式发送。(发送Sample Remote时没反应)

005.jpg

找来美工刀,划断教程中图片中指示的位置,再操作发现发送Sample Remote时有反应了,接收到相同信号了。但是外界的设备没反应,外部射频接收器也没收到信号 。于是继续cut,反复试了多次,难道是没断开,又加深切口。还是不行,最后把教程中的三个地方都切了。

006.jpg

反复弄和修改代码,都是无法发送,但接收信号正常。

断断续续试了一天多,发送信号发不出去,但esphome内部却能接收到,用射频接收器帖着sonoff边上也能收到信号,但内容不一致。想了一天多时间没想明白,以为又给玩废掉一个设备。郁闷时突然找到了线索,最终找到了正确的答案:
https://github.com/esphome/issues/issues/1828Remote transmitter is not working after update [1.15.3]->[1.16.0]

这个问题不仅是这个设备,基本上所有用新版本的esphome编译的固件作为信号发射时都会出现这个问题。而esphome官网介绍中却没看到说明。

001.jpg

最后正常使用的代码:

esphome:
  name: sonoff-rf-bridge

esp8266:
  board: esp01_1m

# Enable Home Assistant API
web_server:
  port: 80

api:
  services:
    - service: send_rf_code
      variables:
        sync: int
        low: int
        high: int
        code: int
      then:
        - rf_bridge.send_code:
            sync: !lambda 'return sync;'
            low: !lambda 'return low;'
            high: !lambda 'return high;'
            code: !lambda 'return code;'
    - service: learn
      then:
        - rf_bridge.learn

uart:
  tx_pin: 1
  rx_pin: 3
  baud_rate: 19200

logger:
  baud_rate: 0

rf_bridge:
  on_code_received:
    then:
      - homeassistant.event:
          event: esphome.rf_code_received
          data:
            sync: !lambda 'char buffer [10];return itoa(data.sync,buffer,16);'
            low: !lambda 'char buffer [10];return itoa(data.low,buffer,16);'
            high: !lambda 'char buffer [10];return itoa(data.high,buffer,16);'
            code: !lambda 'char buffer [10];return itoa(data.code,buffer,16);'

ota:
  password: !secret ota_password

remote_receiver:
  pin: 4
  dump: rc_switch
  # Settings to optimize recognition of RF devices
  tolerance: 50%
  filter: 250us
  idle: 4ms
  buffer_size: 2kb

remote_transmitter:
  pin: 5
  carrier_duty_percent: 100%

  
# this will log received commands, and can also transmit. Read up here:
# https://esphome.io/components/remote_transmitter.html#remote-setting-up-rf

status_led:
  pin:
    number: GPIO13
    inverted: false

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

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

captive_portal:


switch:
  - platform: template
    name: Sample Remote
    turn_on_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '011000000011111001010100'
          protocol: 1
          repeat: 
            times: 10
            wait_time: 0s
          #  wait_time: 100ms
  - platform: template
    name: Sample Switch
    id: switch_1
    optimistic: true
    assumed_state: true
    turn_on_action:
      remote_transmitter.transmit_rc_switch_raw:
        code: '010101101010100000100001'
        protocol: 1
        repeat: 
          times: 10
          wait_time: 0s
    turn_off_action:
      remote_transmitter.transmit_rc_switch_raw:
        code: '010101101010100000100010'
        protocol: 1
        repeat: 
          times: 10
          wait_time: 0s
            
binary_sensor:
  - platform: status
    name: "Sonoff RF Bridge Status" 
    
  - platform: remote_receiver
    name: "Sample Blinds Up"
    rc_switch_raw:
      code: '010101101010100000100010'
      protocol: 1
    filters:
      - delayed_off: 500ms



这里的rf-bridge相关的代码已经没用了,因为线都给剪断了。有空再研究一下看看api和homeassistant.homeassistant.event部分能否修改成现在可用的,这样方便直接在hass中调用而不用修改固件。
这里重点问题是新版esphome编译时, remote_transmitter.transmit_rc_switch_raw 默认的是wait_time: 250us 一定要改成或加上: wait_time: 0s 才能正常发送信号。



评分

参与人数 1金钱 +10 收起 理由
wormshow + 10 感谢楼主分享!

查看全部评分

回复

使用道具 举报

54

主题

317

帖子

1371

积分

金牌会员

Rank: 6Rank: 6

积分
1371
金钱
1054
HASS币
0
发表于 2022-1-17 16:25:27 来自手机 | 显示全部楼层
高手,好大工程。
回复

使用道具 举报

40

主题

3057

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11135
金钱
8028
HASS币
182
发表于 2022-1-17 16:33:46 | 显示全部楼层
有这个时间不如买个蜂鸟???
Nero
回复

使用道具 举报

74

主题

1942

帖子

7885

积分

元老级技术达人

积分
7885
金钱
5893
HASS币
430

活跃会员教程狂人

发表于 2022-1-17 16:42:15 | 显示全部楼层
我也有一个早起的版本,按照坛子里面的大神分享的刷Tasmota之后接入zha后就吃灰了,1年半了,没有DIY设备玩不动...
所有过往,皆为序章。
回复

使用道具 举报

10

主题

183

帖子

1771

积分

论坛技术达人

积分
1771
金钱
1583
HASS币
20
发表于 2022-1-18 17:45:35 | 显示全部楼层
本帖最后由 szlww 于 2022-1-18 17:53 编辑

新版本的rf_bridge 刷机必须切板么? 一代rf bridge可以无损刷机,它有个单独的MCU:efm8bb1, 可以刷改版固件,刷入之后支持巨多协议。我的rf bridge就是无损刷机的:先把tasmota刷到esp固件,然后利用tasmota刷入MCU:efm8bb1的改版固件,然后在将esphome刷入esp,就可以使用esphome的rf_bridge组件控制efm8bb1,实现各种协议了,当然不刷esphome 直接使用tasmota也是可以的。
esphome文档中有提到这第二个MCU:
https://esphome.io/components/rf_bridge.html?highlight=rf_bridge

RF Bridge Component
The RF Bridge Component provides the ability to send and receive 433MHz remote codes without hardware hacking the circuit board to bypass the efm8bb1 MCU. This component implements the communication protocol that the original efm8bb1 firmware implements. The device is connected via the UART bus. The uart bus must be configured at the same speed of the module which is 19200bps.

Portisch firmware
If you have flashed the secondary MCU with the Portisch firmware, ESPHome is able to receive the extra protocols that can be decoded as well as activate the other modes supported.

回复

使用道具 举报

76

主题

1357

帖子

1万

积分

元老级技术达人

积分
18296
金钱
16899
HASS币
290
 楼主| 发表于 2022-1-18 20:14:31 | 显示全部楼层
szlww 发表于 2022-1-18 17:45
新版本的rf_bridge 刷机必须切板么? 一代rf bridge可以无损刷机,它有个单独的MCU:efm8bb1, 可以刷改版 ...

是啊,要支持更多协议新款的就需要切线,R2 V2.2 的芯片与以前的不同了,目前还没有可刷写的固件吧。
R2 V2.1和第一代都是相同的芯片efm8bb1,黑色的那款,是可以刷固件就支持更多协议。

这里说得很清楚,https://community.home-assistant ... hing-help/344326/47
New direct hack
It is the equivalent of Hardware Itead Sonoff RF Bridge Direct Hack 101 to get super wide protocol support, but for the new R2 v2.2 board (not a way to flash Portisch.)

The Sonoff Bridge has 4 main chips (labeled on the circuit board picture above)
• U1 is an 8051 instruction set micro used to encode/decode RF It used to be EFM8BB1 now OB38R08A1 in V2.2, this is the change preventing Portish.
• U2 is the ESP8266
• U5 is the RF Transmitter
• U4 is the RF Receiver

After the “Direct Hack” we removed U1 from the system
• RF Received data out connects into ESP8266 GPIO4
• RF Transmitter data in connects to ESP8266 GPIO5
回复

使用道具 举报

10

主题

183

帖子

1771

积分

论坛技术达人

积分
1771
金钱
1583
HASS币
20
发表于 2022-1-18 21:33:28 | 显示全部楼层
本帖最后由 szlww 于 2022-1-18 21:36 编辑
dscao 发表于 2022-1-18 20:14
是啊,要支持更多协议新款的就需要切线,R2 V2.2 的芯片与以前的不同了,目前还没有可刷写的固件吧。
R2 ...

哦,是这样啊。估计很快就可以支持无损刷机了,之前V2.1和一代刚开始都是要切板的,后来就不用了。看你的拆机图 v2.2的天线改成板载的了,估计信号强度比前一代的弹簧天线提升了不少,但是切板相当于损失了射频芯片和rf_bridge组件,比较亏。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-25 15:06 , Processed in 0.062641 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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