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

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

 找回密码
 立即注册
查看: 1932|回复: 92

[硬件DIY] 更新esphome代码,汽车中控DIY,都说8266太累了,改用esp3...

[复制链接]

26

主题

205

帖子

1103

积分

金牌会员

Rank: 6Rank: 6

积分
1103
金钱
898
HASS币
0
发表于 2022-7-23 11:26:46 | 显示全部楼层 |阅读模式
本帖最后由 shadowba 于 2022-8-2 10:33 编辑

免责声明:没有基础切勿进行车辆改装,本帖仅是个人娱乐,所有因改装引发的各类损失、车辆事故、人员伤害等等与本人无关,责任自负!!!!!
心血来潮,周末愉快,做个汽车中控积木,替换原来的8266esp32“中控”丐版福音,网上找了许久没发现CAN总线如何实现,也未找到相关教程,如有智者可以倾囊相授,深表感激一起玩耍
已实现功能

1.车辆发动机状态显示
2.车门状态显示
3.灯光状态显示
4.充电插头状态显示
5.充电状态显示
6.远程启动或者关闭发动机
7.远程开锁或者关锁
8.远程打开后备箱或者本地车辆实体按钮打开
9.远程打开充电口或者本地车辆实体按钮打开
10.刹车灯、左转灯、右转灯、近光灯、示廓灯、鸣笛控制
11.车内温度检测
12、座椅加热坐垫控制
13.待实现空调配合温度传感器远程控制,冬天送孩子上学再也不会吵这车里冷了,夏天出门可以提前打开空调,凉凉啊。
14.自动大灯,用了两个光敏模块用来分别控制示廓灯和近光灯                                
15.后视镜折叠或者展开
16.蓄电池电压检测
17.手机或者手表刷卡开车门,NFC读卡器模块用I2C实现手机刷卡开锁,因电平不匹配,加了个电平转换模块
以上功能可以互相配合比如锁车后升窗加灯光提示、鸣笛提示,定时开启车辆后检测车内温度开启空调等等,玩法多多,貌似比遥控模型好玩,ENJOY!!

IMG_20220723_074941.jpg
调试成功
NFC刷卡模块PN532安装在左侧后视镜内,线引进车内
IMG_20220324_165219.jpg

锁车升窗需要根据车辆中控不同而定,我的玻璃升降中控在主驾驶控制上,拆开取里面的触点,把线印出来通过继电器闭合或者开路来实现锁车升窗

IMG_20210818_200152.jpg

自制的控制模块

IMG_20210819_072851.jpg

上车测试一切正常

Screenshot_20220724_204101.jpg
16路继电器模块
IMG_20220723_074948.jpg
合影,争取周日装到车上
IMG_20220723_075258.jpg
那么多段子,索性买把钳子!
IMG_20220723_081941.jpg
一不小心烧了一个mcp23017,没想到原来才十多块钱一个,现在价格早已翻了几翻,太贵了
Screenshot_20220728_231416_com.taobao.taobao_edit_777750993086532.jpg
太贵了,索性买直插的自己diy一个扩展
Screenshot_20220728_232128.jpg

洞洞板真是个好东西

IMG_20220728_193405.jpg

请原谅我那渣渣的手艺

IMG_20220728_193412.jpg
充电状态、插头状态,和运行状态是通过PC817光耦串一个500欧左右的电阻接在仪表盘led灯上实现的,是不是很简单??
093945d85jukck3lzj7d1f.png

颗颗饱满,需要哪个状态灯就接哪个

IMG_20210524_182306.jpg
注意LED正负极,接入光耦一定要串电阻,不然对应的表盘灯会不亮
IMG_20210524_185132.jpg
esphome:
  name: "esphome-web-c30ev"
esp32:
  board: esp32dev
  framework:
    type: arduino
logger:
web_server:
  port: 80
ota:
  password: "XXXXXXXXXXXXXXXXX"
wifi:
  networks:
  - ssid: XXXXXXXXXXX
    password: XXXXXXXXXXX
  ap:
    ssid: "XXXXXXXXXXXXXX"
    password: "XXXXXXXXXXXXX"
captive_portal:
mqtt:
  broker: XXXXXXXXXXXX
  username: admin
  password: XXXXXXXXXXXXXXX
i2c:
   - id: bus_a         
     sda: 21
     scl: 22
     scan: true
     frequency: 10kHz
   - id: bus_b         
     sda: 19
     scl: 18
     scan: true
     frequency: 10kHz
mcp23017:
  - id: 'mcp23017_hub'
    i2c_id: bus_a
    address: 0x20
pn532_i2c:
  i2c_id: bus_b
  update_interval: 1s
dallas:
  - pin: 5
    update_interval: 120s
sensor:
  - platform: dallas
    address: 0xXXXXXXXXXXXXXX
    name: "D5 Car-Temperature"
  - platform: adc
    pin: 36
    name: "VP Car Battery Voltage"
    icon: "mdi:car-battery"
    filters:
      - multiply: 20.7
    update_interval: 300s
#  - platform: wifi_signal
#    name: "WiFi Signal C30ev"
#    update_interval: 60s
binary_sensor:
  - platform: pn532
    uid: XX-XX-XX-XX
    name: "D2122 Car-NFC"
    icon: "mdi:nfc"
    on_press:
      then:
        - if:
            condition:
              - binary_sensor.is_on: carlock  #车辆如果已上锁
            then:
              - switch.turn_on: relay12       #打开开锁继电器

        - if:
            condition:
              - binary_sensor.is_off: carlock #如果车辆已解锁
            then:
              - switch.turn_on: relay7        #打开上锁继电器

  - platform: gpio                            #发动机状态检测传感器
    pin:
      number: GPIO39
      mode:
        input: true
    name: "VN Car-engine"
    device_class: running
    icon: "mdi:engine"
    id: engine
    on_press:
      then:
        - if:
            condition:
              - binary_sensor.is_on: parking #如果示廓传感器被打开
            then:
              - switch.turn_on: relay5       #打开示廓灯继电器
        - if:
            condition:
             and:
              - binary_sensor.is_on: dimmed  #如果近光灯传感器被打开
              - binary_sensor.is_on: parking #如果示廓灯传感器被打开
            then:
              - switch.turn_on: relay10      #打开近光灯继电器
        - delay: 5s
        - switch.turn_on: relay11     # 玻璃升降控制
    on_release:                              
      then:
        - switch.turn_off: relay10    #否则关闭近光灯继电器
        - switch.turn_off: relay5     #关闭示廓灯控制继电器
        - delay: 1s
        - switch.turn_off: relay2   #关闭前左座椅加热继电器
        - switch.turn_off: relay3   #关闭前右座椅加热继电器
        - switch.turn_off: relay13   #关闭后排座椅加热继电器
        - delay: 300s
        - switch.turn_off: relay11    #关闭车窗升继电器
  - platform: gpio                    #充电状态传感器
    pin:
      number: GPIO34
      mode:
        input: true
    name: "D34 Car-charging"
    device_class: battery_charging
    icon: "mdi:ev-station"
    id: charging
  - platform: gpio                    #充电插头传感器
    pin:
      number: GPIO35
      mode:
        input: true
    name: "D35 Car-power-plug"
    device_class: plug
    icon: "mdi:power-plug"
  - platform: gpio                    #光照传感器示廓灯
      # One of INPUT or INPUT_PULLUP
    pin:
      number: GPIO32
      mode:
        input: true
#      inverted: true
    name: "D32 Car-parking-lights"
    icon: "mdi:car-parking-lights"
    device_class: light
    id: parking
    filters:
      - delayed_on: 1s
      - delayed_off: 25s 
    on_press:
      then:
        - if:
            condition:
              - binary_sensor.is_on: engine #如果引擎传感器已打开
            then:
              - switch.turn_on: relay5      #打开示廓灯继电器
    on_release:                             
      then:
              - switch.turn_off: relay5     #否则关闭示廓灯继电器
  - platform: gpio                          #传感器近光灯控制
    pin:
      number: GPIO33
      mode:
        input: true
#      inverted: true
    name: "D33 Car-light-dimmed-light"
    icon: "mdi:car-light-dimmed"
    device_class: light
    id: dimmed
    filters:
       - delayed_on: 1s
       - delayed_off: 20s 
    on_press:
      then:
        - delay: 100ms
        - if:
            condition:
             and:
              - binary_sensor.is_on: engine  #如果引擎传感器已打开
              - binary_sensor.is_on: parking #如果近光灯传感器已打开
            then:
              - switch.turn_on: relay10      #打开近光灯继电器
    on_release:                             
      then:              
              - switch.turn_off: relay10     #否则关闭近光灯
  - platform: gpio                           # 打开充电口
    pin:
      number: GPIO13
      mode:
        input: true
        pullup: true
      inverted: true
    name: "D25 Car-plug-button"
    icon: "mdi:ev-plug-type2"
    on_press:
      - switch.toggle: relay1           #充电口按钮开关
  - platform: gpio                      # 行李箱解锁
    pin:
      number: GPIO16
      mode:
        input: true
        pullup: true
      inverted: true
    name: "D26 Car-back-button"
    icon: "mdi:car-back"
    on_press:
      - switch.toggle: relay14          #行李箱按钮开关
  - platform: gpio                      # 自动大灯总控按钮开关
    pin:
      number: GPIO25
      mode:
        input: true
        pullup: true
      inverted: true
    name: "D27 Car-light-auto-button"
    icon: "mdi:lightbulb-auto"
    on_press:
      - switch.toggle: relay5           # 关闭自动示阔灯控制
      - switch.toggle: relay10          # 关闭自动近光灯控制
  - platform: gpio                      # 后排座椅加热总控按钮开关
    pin:
      number: GPIO14
      mode:
        input: true
        pullup: true
      inverted: true
    name: "D14 Car-seat-heater-bl-button"
    icon: "mdi:car-seat-heater"
    on_press:
      - switch.toggle: relay13           # 座椅加热后左
  - platform: gpio                       # 座椅加热前左
    pin:
      number: GPIO26
      mode:
        input: true
        pullup: true
      inverted: true
    name: "D16 Car-seat-heater-fl-button"
    icon: "mdi:car-seat-heater"
    on_press:
      - switch.toggle: relay2           # 座椅加热前左继电器
  - platform: gpio                      # 座椅加热前右按钮开关
    pin:
      number: GPIO17
      mode:
        input: true
        pullup: true
      inverted: true
    name: "D13 Car-seat-heater-fr-button"
    icon: "mdi:car-seat-heater"
    on_press:
      - switch.toggle: relay3           #座椅加热前右继电器
  - platform: gpio                      #车辆上锁状态监测
    pin:
      number: GPIO27
      mode:
        input: true
        pullup: true
      inverted: false
    name: "D23 Car-lock"
    device_class: lock
    icon: "mdi:car"
    id: carlock
  - platform: gpio                      #防盗门控制用来联动家里的防盗门锁
    pin:
      number: GPIO23
      mode:
        input: true
        pullup: true
      inverted: true
    name: "D17 Door-key-button"
    icon: "mdi:door-closed-lock"
  - platform: gpio                      #空调状态
    pin:
      number: GPIO15
      mode:
        input: true
        pullup: true
      inverted: true
    name: "D15 Car-A/C"
    icon: "mdi:air-conditioner"
switch:
  - platform: template                  #车锁开关
    name: "Car key"
    icon: "mdi:car-key"
    lambda: |-
      if (id(carlock).state) {
        return true;
      } else {
        return false;
      }
    turn_on_action:

      - switch.turn_on: relay12     #车门开锁
      - switch.turn_on: relay4      #鸣笛控制
    turn_off_action:
      - switch.turn_on: relay7      #车门上锁
      - switch.turn_on: relay4      #鸣笛控制
      - delay: 500ms   
      - switch.turn_on: relay4      #鸣笛控制
  - platform: template              #一键启停
    name: "Car-One key start"
    icon: "mdi:refresh-auto"
    lambda: |-
      if (id(engine).state) {
        return true;
      } else {
        return false;
      }
    turn_on_action: 
      - switch.turn_on: relay12   #车门开锁继电器  
      - delay: 4s      
      - switch.turn_on: relay8    #打开刹车灯继电器
      - delay: 1s
      - switch.turn_on: start     #按引擎开关
      - delay: 1s
      - switch.turn_off: relay8   #打开刹车灯继电器
    turn_off_action:
      - switch.turn_on: relay8    #打开刹车灯继电器
      - delay: 1s
      - switch.turn_on: start     #按引擎开关
      - delay: 1s
      - switch.turn_off: relay8   #关闭刹车灯继电器      
      - delay: 1s
      - switch.turn_on: relay7    #车门上锁继电器
  - platform: gpio                #汽车引擎启动开关 在esp32 IO上
    pin: 2
    id: start
    name: "D2 Engine start"
    icon: "mdi:engine"
    on_turn_on:
    - delay: 1s
    - switch.turn_off: start
  - platform: gpio                #关闭空调        在esp32 IO上
    pin: 4
    id: acoff
    name: "D4 Car-A/C OFF"
    icon: "mdi:air-conditioner"
    on_turn_on:
    - delay: 1s
    - switch.turn_off: acoff
  - platform: gpio                #打开空调       在esp32 IO上
    pin: 12
    id: acon
    name: "D12 Car-A/C ON"
    icon: "mdi:air-conditioner"
    on_turn_on:
    - delay: 1s
    - switch.turn_off: acon
  - platform: restart               #系统重启
    name: "Car-sys-restart"
#mcp23017_hub
  - platform: gpio
    name: "Car-light-L"         # 左转向灯继电器--正触发
    pin:
      mcp23xxx: mcp23017_hub
      number: 0
      mode:
        output: true
      inverted: false
    icon: "mdi:arrow-left-bold"
    id: relay
    on_turn_on:
    - delay: 400ms
    - switch.turn_off: relay
  - platform: gpio
    name: "Car-ev-plug"    # 充电口
    pin:
      mcp23xxx: mcp23017_hub
      number: 1
      mode:
        output: true
      inverted: false
    icon: "mdi:ev-plug-type2"
    id: relay1
    on_turn_on:
    - delay: 100ms
    - switch.turn_off: relay1   
  - platform: gpio
    name: "Car-seat-heater-fl"    # 座椅加热前左
    pin:
      mcp23xxx: mcp23017_hub
      number: 2
      mode:
        output: true
      inverted: false
    icon: "mdi:car-seat-heater"
    id: relay2
    on_turn_on:
     - delay: 1800s
     - switch.turn_off: relay2

  - platform: gpio
    name: "Car-seat-heater-fr"    # 座椅加热前右
    pin:
      mcp23xxx: mcp23017_hub
      number: 3
      mode:
        output: true
      inverted: false
    icon: "mdi:car-seat-heater"
    id: relay3
    on_turn_on:
     - delay: 1800s
     - switch.turn_off: relay3    
  - platform: gpio
    name: "Car-whistle"           # 鸣笛控制
    pin:
      mcp23xxx: mcp23017_hub
      number: 4
      mode:
        output: true
      inverted: false
    icon: "mdi:bullhorn-variant"
    id: relay4
    on_turn_on:
    - delay: 1ms
    - switch.turn_off: relay4 
  - platform: gpio
    name: "Car-little-light"      # 示廓灯
    pin:
      mcp23xxx: mcp23017_hub
      number: 5
      mode:
        output: true
      inverted: false
    icon: "mdi:car-parking-lights"
    id: relay5
  - platform: gpio
    name: "Car-mirror-open"       # 后视镜展开
    pin:
      mcp23xxx: mcp23017_hub
      number: 6
      mode:
        output: true
      inverted: false
    icon: "mdi:mirror"
    id: relay6
    interlock: [relay9]
    on_turn_on:
    - delay: 3.5s
    - switch.turn_off: relay6
  - platform: gpio
    name: "Car-door-lock"         #车门上锁
    pin:
      mcp23xxx: mcp23017_hub
      number: 7
      mode:
        output: true
      inverted: false
    icon: "mdi:car-door-lock"
    id: relay7
    interlock: [relay12]
    on_turn_on:
    - delay: 500ms
    - switch.turn_off: relay7     #关闭车门上锁继电器
    - switch.turn_on: relay9      #打开后视镜折叠继电器
    - delay: 500ms
    - switch.turn_on: relay       #打开左转灯继电器
    - switch.turn_on: relay15     #打开右转灯继电器
    - delay: 500ms
    - switch.turn_on: relay8      #打开刹车灯继电器
    - delay: 1s
    - switch.turn_off: relay8      #打开刹车灯继电器
    - delay: 10s
    - switch.turn_off: relay11    #关闭玻璃升降控制继电器 
  - platform: gpio                #刹车信号灯控制继电器--正触发
    name: "Car-break-light"       
    pin:
      mcp23xxx: mcp23017_hub
      number: 8
      mode:
        output: true
      inverted: false
    icon: "mdi:car-brake-hold" 
    id: relay8
    on_turn_on:
     - delay: 4s
     - switch.turn_off: relay8   #关闭刹车信号灯控制继电器
  - platform: gpio
    name: "Car-mirror-close"     #后视镜折叠控制继电器
    pin:
      mcp23xxx: mcp23017_hub
      number: 9
      mode:
        output: true
      inverted: false
    icon: "mdi:mirror"
    id: relay9
    interlock: [relay6]
    on_turn_on:
    - delay: 3.5s
    - switch.turn_off: relay9
  - platform: gpio
    name: "Car-light-dimmed"      #近光灯控制继电器
    pin:
      mcp23xxx: mcp23017_hub
      number: 10
      mode:
        output: true
      inverted: false
    icon: "mdi:car-light-dimmed"
    id: relay10
  - platform: gpio
    name: "Car-windshield"        #玻璃升降控制
    pin:
      mcp23xxx: mcp23017_hub
      number: 11
      mode:
        output: true
      inverted: false
    icon: "mdi:car-windshield"
    id: relay11
  - platform: gpio
    name: "Car-door-open"         #车门开锁
    pin:
      mcp23xxx: mcp23017_hub
      number: 12
      mode:
        output: true
      inverted: false
    icon: "mdi:car-door"
    id: relay12
    interlock: [relay7]
    on_turn_on:
    - delay: 500ms
    - switch.turn_off: relay12     #关闭车门开锁继电器
    - switch.turn_on: relay6       #打卡后视镜展开继电器
    - delay: 500ms
    - switch.turn_on: relay         #打开左转灯继电器
    - delay: 500ms
    - switch.turn_on: relay15       #打开右转灯继电器
    - delay: 500ms
    - switch.turn_on: relay         #打开左转灯继电器
    - delay: 500ms
    - switch.turn_on: relay15       #打开右转灯继电器
  - platform: gpio
    name: "Car-seat-heater-bl"     #座椅加热后左
    pin:
      mcp23xxx: mcp23017_hub
      number: 13
      mode:
        output: true
      inverted: false
    icon: "mdi:car-seat-heater"
    id: relay13
    on_turn_on:
     - delay: 1800s
     - switch.turn_off: relay13  
  - platform: gpio
    name: "Car-back"              #行李箱解锁继电器
    pin:
      mcp23xxx: mcp23017_hub
      number: 14
      mode:
        output: true
      inverted: false
    icon: "mdi:car-back"
    id: relay14
    on_turn_on:
    - delay: 500ms
    - switch.turn_off: relay14   #关闭行李箱解锁继电器
  - platform: gpio
    name: "Car-light-R"          #右转向灯继电器--正触发
    pin:
      mcp23xxx: mcp23017_hub
      number: 15
      mode:
        output: true
      inverted: false
    icon: "mdi:arrow-right-bold"
    id: relay15
    on_turn_on:
    - delay: 400ms
    - switch.turn_off: relay15   #关闭右转向灯继电器


















评分

参与人数 5金钱 +48 收起 理由
l24195656 + 8 墙都不扶,就服楼主!
+ 20 高手,这是高手!
firewater + 10 厉害了word楼主!
kaka0992 + 5 墙都不扶,就服楼主!
ciasdmxhxjjpd@c + 5

查看全部评分

回复

使用道具 举报

1

主题

35

帖子

318

积分

中级会员

Rank: 3Rank: 3

积分
318
金钱
283
HASS币
0
发表于 2022-7-23 11:34:40 | 显示全部楼层
围观牛人,盼分享代码学习
回复

使用道具 举报

59

主题

300

帖子

1221

积分

论坛分享达人

积分
1221
金钱
921
HASS币
0
发表于 2022-7-23 12:39:53 | 显示全部楼层
加上 油表 里程 车载 4g, 通过 mqtt 发送 消息到 ha。真正实现全程监控,万物互联!
回复

使用道具 举报

116

主题

4477

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
14745
金钱
10183
HASS币
45
发表于 2022-7-23 15:51:58 | 显示全部楼层
厉害了word楼主
回复

使用道具 举报

22

主题

1664

帖子

5579

积分

论坛元老

Rank: 8Rank: 8

积分
5579
金钱
3905
HASS币
80
发表于 2022-7-23 15:56:32 | 显示全部楼层
远程是怎么实现的?
回复

使用道具 举报

26

主题

205

帖子

1103

积分

金牌会员

Rank: 6Rank: 6

积分
1103
金钱
898
HASS币
0
 楼主| 发表于 2022-7-23 16:09:15 来自手机 | 显示全部楼层
ghostist 发表于 2022-7-23 15:56
远程是怎么实现的?

mqtt+4g无线热点
回复

使用道具 举报

1

主题

165

帖子

1833

积分

金牌会员

Rank: 6Rank: 6

积分
1833
金钱
1668
HASS币
0
发表于 2022-7-23 16:32:52 | 显示全部楼层
厉害了,膜拜
回复

使用道具 举报

8

主题

55

帖子

236

积分

中级会员

Rank: 3Rank: 3

积分
236
金钱
181
HASS币
0
发表于 2022-7-23 16:54:08 | 显示全部楼层
牛人啊。。。原车中控呢。。。。。
回复

使用道具 举报

32

主题

390

帖子

1960

积分

金牌会员

Rank: 6Rank: 6

积分
1960
金钱
1570
HASS币
0
发表于 2022-7-24 01:29:44 来自手机 | 显示全部楼层
这个很厉害啊,可以公开详细资料和原理过程吗?很有参考意义!
回复

使用道具 举报

3

主题

107

帖子

442

积分

中级会员

Rank: 3Rank: 3

积分
442
金钱
335
HASS币
0
发表于 2022-7-24 07:37:12 | 显示全部楼层
牛逼过来围观
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2022-8-16 21:12 , Processed in 0.114373 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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