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

 找回密码
 立即注册
查看: 5740|回复: 3

[新奇玩法] ESP32-CAM 配合 Servo 通过HomeAssistant控制,激发无限应用可能。

[复制链接]

1

主题

15

帖子

148

积分

注册会员

Rank: 2

积分
148
金钱
133
HASS币
0
发表于 2021-6-28 13:57:08 | 显示全部楼层 |阅读模式
这篇文章我将详细介绍ESP32-CAM及Servo接入HomeAssistant的方法、通过HomeAssistant页面直接对Servo操控的设置步骤。这一整套方案将为HomeAssistant的应用场景提供无限可能,如果我的表达够清楚,你的理解够透彻,在此方案上只需要略作修改,便能实现你们自己的想法。先放一段最近我与大伙伴使用HomeAssistant远程控制机械臂的视频(简而不陋)
https://www.bilibili.com/video/BV1rq4y1L7kK

一、配置Servo的控制芯片
  Servo的控制芯片我用的是ESP8266 D1MINI。通过ESPHome编译,用ESPHome Flsaher烧录。
1.代码编辑
代码通过ESPHome编写,示例代码如下(这里默认你已经会使用ESPHome编写代码)

esphome:
  name: servos         \\自定义名称
  platform: ESP8266    \\添加设备时候选择自己的芯片平台
  board: nodemcuv2     \\选择自己的芯片型号

wifi:
  ssid: "GreatWill"    \\接入WIFI的名称
  password: "shuchen12345" \\接入WIFI的密码

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "ESPHOMESERVO"  \\自定义芯片热点名称(如果wifi没连接成功,可以通过无线设备找到该设备名称,通过芯片的网页指引芯片连入你希望连接的WiFi)
    password: "12345678"  \\热点的密码

captive_portal:

# Enable logging
logger:

api:                             \\API接口理解为芯片向HomeAssistant伸出的一只手,后期会通过对HomeAssistant的设置让HomeAssistant也向芯片伸手,两只手握在一起便能控制舵机了。
  services:
    - service: control_servo
      variables:
        level: float
      then:
        - servo.write:
            id: my_servo
            level: !lambda 'return level / 100.0;'

ota:                          \\OTA 隔空更新 第一次烧录后的芯片可以不用连接数据线,ESPHome便可向芯片更新代码。

output:                         \\芯片内部的电路管理
  - platform: esp8266_pwm      
    id: pwm_output
    pin: D4                       \\这里需要根据SERVO信号线实际插在芯片哪个针脚设定。我的插在了 D4.。
    frequency: 50 Hz

servo:                            \\定义一个servo,也是照抄就行。
  - id: my_servo
    output: pwm_output


2.芯片烧录

将代码编译后生成的BIN文件通过ESPHome-Flasher-1.3.0-Windows-x64.exe烧录软件,选择对应端口,选择烧录BIN文件,点击“FLASH ESP”

二、配置HomeAssistant

我的HomeAssistant是装在群晖的Docker里的。所以配置文件 configuration.yaml 在群晖的文件管理里能找到。如果你的 HomeAssistant是装在其他平台的话请自行查阅configuration.yaml对应位置。


1.修改配置文件
打开configuration.yaml我们将添加如下示例代码


input_number:              \\HomeAssistant的一个输入组件
  servo_control:
    initial: 0
    min: -100
    max: 100
    step: 1
    mode: slider           \\它通过是滑动条输入值
automation:                \\自动化,将滑动条的值再输入给ESP芯片从而控制servo  
  - alias: Write Servo Value to ESP
    trigger:
      platform: state
      entity_id: input_number.servo_control
    action:
      - service: esphome.little_wemos_control_servo
        data_template:
          level: '{{ trigger.to_state.state | int }}'


2.添加集成及UI卡片


如果一切顺利的话,应该会是如下效果
https://www.bilibili.com/video/BV1uy4y1g7Bs

3.添加多个servo
方法与单个servo设置一样,但需要注意的是 定义多个servo时候的命名要加以区分。ESPHome主要功能部分代码编写如下

api:
  services:
    - service: control_servo
      variables:
        level: float
      then:
        - servo.write:
            id: my_servo
            level: !lambda 'return level / 100.0;'
    - service: control_servo2
      variables:
        level: float
      then:
        - servo.write:
            id: my_servo2
            level: !lambda 'return level / 100.0;'

ota:

output:
  - platform: esp8266_pwm
    id: pwm_output
    pin: D4
    frequency: 50 Hz
  - platform: esp8266_pwm
    id: pwm_output2
    pin: D5
    frequency: 50 Hz

servo:
  - id: my_servo
    output: pwm_output
  - id: my_servo2
    output: pwm_output2
```
同样也要记得修改HomeAssistant的配置文件
```c
input_number:
  servo_control:
    name: Servo Control
    initial: 0
    min: -100
    max: 100
    step: 1
    mode: slider

  servo_control2:
    name: Servo Control
    initial: 0
    min: -100
    max: 100
    step: 1
    mode: slider


automation:
  - alias: Write Servo Value to ESP
    trigger:
      platform: state
      entity_id: input_number.servo_control
    action:
      - service: esphome.servo_control_servo
        data_template:
          level: '{{ trigger.to_state.state | int }}'

  - alias: Write Servo2 Value to ESP
    trigger:
      platform: state
      entity_id: input_number.servo_control2
    action:
      - service: esphome.servo_control_servo2
        data_template:
          level: '{{ trigger.to_state.state | int }}'


一直添加到满足你的需求为止。我这里是添加了6个

三、配置ESP32-CAM

1.芯片选择
淘宝上ESP32-CAM芯片一搜一大把,真的都只是价格的差别么?我买了3次,不知道是否后续要对芯片设置、还是心里作用,总觉得第三次买的ESP32-CAM的镜头成像最好。
https://editor.csdn.net/md/?articleId=118250744


2.代码编辑

```c
esphome:
  name: cam3
  platform: ESP32
  board: esp-wrover-kit

wifi:                    \\需要根据自己网络环境定义
  ssid: ""
  password: ""
  manual_ip:
    static_ip:
    gateway:
    subnet:
logger:
api:
ota:
esp32_camera:
  name: cam
  external_clock:
    pin: GPIO0
    frequency: 20MHz
  i2c_pins:
    sda: GPIO26
    scl: GPIO27
  data_pins: [GPIO5, GPIO18, GPIO19, GPIO21, GPIO36, GPIO39, GPIO34, GPIO35]
  vsync_pin: GPIO25
  href_pin: GPIO23
  pixel_clock_pin: GPIO22
  power_down_pin: GPIO32
  resolution: 1024x768
  jpeg_quality: 10



3.芯片烧录
https://bbs.hassbian.com/thread-12842-1-3.html


舵机条

舵机条
回复

使用道具 举报

33

主题

2051

帖子

5357

积分

论坛元老

Rank: 8Rank: 8

积分
5357
金钱
3306
HASS币
60
QQ
发表于 2021-6-28 15:54:16 | 显示全部楼层
膜拜大佬。
我不生产技术,我只是技术的搬运工。
回复

使用道具 举报

7

主题

157

帖子

1942

积分

金牌会员

Rank: 6Rank: 6

积分
1942
金钱
1785
HASS币
0
发表于 2021-6-29 00:03:20 | 显示全部楼层
太棒了,学习起来。
回复

使用道具 举报

30

主题

526

帖子

2337

积分

金牌会员

Rank: 6Rank: 6

积分
2337
金钱
1806
HASS币
20
发表于 2021-12-20 17:16:25 | 显示全部楼层
本帖最后由 dinglifeng 于 2021-12-20 17:24 编辑

请问一下楼主 我用esp32 nodemcu 接一个舵机成功了,怎么杨写才能接入多个舵机?

# Enable Home Assistant API
api:
  services:
    - service: control_servo
      variables:
        level: float
        level_reset: float
      then:
        - servo.write:
            id: my_servo
            level: !lambda 'return level / 100.0;'
        - delay: 1s
        - servo.write:
            id: my_servo
            level: !lambda 'return level_reset / 100.0;'
    - service: control_servo1
      variables:
        level: float
        level_reset: float
      then:
        - servo.write:
            id: my_servo1
            level: !lambda 'return level / 100.0;'
        - delay: 1s
        - servo.write:
            id: my_servo1
            level: !lambda 'return level_reset / 100.0;'

captive_portal:

servo:
  - id: my_servo
    output: pwm_output
  - id: my_servo1
    output: pwm_output1
output:
  - platform: ledc
    pin: GPIO18
    id: pwm_output
    frequency: 50 Hz
  - platform: ledc
    pin: GPIO19
    id: pwm_output1
    frequency: 50 Hz
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-6-2 16:04 , Processed in 0.257575 second(s), 29 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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