FastBond3挑战部分-基于ESP32C3的房屋环境监控模块
该项目使用了ESP32C3,实现了房屋智能单元的设计,它的主要功能为:使用红外线控制房屋内家电,同时具备温度湿度空气质量光线气压二氧化碳等多功能。。
标签
MCU
智能家居
传感器
ESPHome
饺子sama
更新2024-09-09
116

项目和创意方向介绍

在智能家居布置中,智能化的程度取决于传感器的种类及数量。因此我设计了一个房屋专用的智能模块,用它可以获取到房屋中的各种数据,以及完成一些智能家居必备的基本功能。集成的功能都是基本上每一个房屋空间都需要的,这样可以把它作为一个基本单元布置在每一个房间中。

方案框图和介绍

image.png


思考了一番,房屋中通常需要使用的功能模块有以上这些。有了这些功能布置在每一个房间中,就应该可以实现大部分的自动化控制任务。出于成本考虑,主控我使用的是ESP32C3。

项目原理图介绍

为了方便未来的功能拓展,我把板子上的SPI和I2C接口都引了出来。

image.png

元件上由于SGP-30需要1.8V供电,而BME280是可以支持1.8V和3.3V宽电压供电的。既然无可避免的需要使用1.8V电源和电平转换器,因此我SGP30和BME280都是使用的1.8V进行供电。

指定厂商元器件介绍

ESP32-C3-MINI-1 Dual-mode WiFi Bluetooth BLE 5.0 4MB MCU | eBay

ESP32-C3-MINI-1U是通用型Wi-Fi模组,体积小,具有丰富的外设接口,配置 4 MB 嵌入式 flash,搭载 RISC-V 32位单核处理器。可用于智能家居、工业自动化、医疗保健、消费电子产品等领域。

e0ddb97bd8337955800cd1e3fd2810c.png

BH1750FVI-TR是一款用于I²C总线接口的16位串行输出型数字环境光传感器IC。该芯片最适合用于获取环境光数据,以调整移动电话的LCD和键盘背光功率。它可以在高分辨率下进行大范围的检测。

PCB设计介绍及遇到的问题和解决方法

考虑到这块板子是要布置在每个房间中的,而且需要面对着房间的开放区域。因为无论是人在传感器,还是红外发射和接收,都是有指向性的。因此为了不影响房屋装修美观,这块传感器板子应该要设计的越小越好,越没存在感越好。

image.png

极致紧凑设计后,可以看到元件之间几乎没有空隙。我把额外的拓展引脚全部放在了板子下方,当使用AC-DC电源供电时,5V电源输入也是从这里进行输入。

关键代码及说明

代码我使用的是esphome进行编写,这样可以更好更便捷的把产品融入到物联网系统中。除了默认模板中的必须配置外,只需要以下几项,就可以配置完成所有硬件。

remote_receiver:
  pin:
    number: GPIO5
    inverted: true
    mode: INPUT_PULLUP
  rmt_channel: 2
  dump: all


remote_transmitter:
  pin:
    number: GPIO4
    inverted: false
    mode: OUTPUT
  rmt_channel: 0
  carrier_duty_percent: 50%


i2c:
  sda: 8
  scl: 9


uart:
  tx_pin: 21
  rx_pin: 20
  baud_rate: 115200


binary_sensor:
  - platform: gpio
    name: "Human Presence"
    pin:
      number: GPIO3
      inverted: false
      mode: INPUT
    device_class: motion


sensor:
  - platform: sgp30
    eco2:
      name: "Workshop eCO2"
      accuracy_decimals: 1
    tvoc:
      name: "Workshop TVOC"
      accuracy_decimals: 1
    store_baseline: yes
    address: 0x58
    update_interval: 1s


  - platform: bme280_i2c
    temperature:
      name: "BME280 Temperature"
      oversampling: 16x
    pressure:
      name: "BME280 Pressure"
    humidity:
      name: "BME280 Humidity"
    address: 0x77
    update_interval: 1s


  - platform: bh1750
    name: "BH1750 Illuminance"
    address: 0x23
    update_interval: 1s


  - platform: adc
    pin: 1
    name: "Sound Level"
    update_interval: 1s


light:
  - platform: neopixelbus
    type: GRB
    name: NeoPixel
    pin: GPIO0
    variant: WS2812
    num_leds: 1
    restore_mode: RESTORE_DEFAULT_OFF


但除此之外,如果我们希望使用红外发射器来控制家里的各种电器,还需要使用service API来完成。通过使用这个功能,我们几乎可以在esphome中添加任何我们想要的API接口。举个例子,如果我想使用aeha协议发送数据,那么需要添加下面这些配置

api:
  services:
    - service: transmit_aeha
      variables:
        address: int
        data: int[]
        repeat_times: int
        repeat_wait_time: int
      then:
        - logger.log:
            format: "address: %d, data length: %d"
            args:
              - address
              - data.size()
        - remote_transmitter.transmit_aeha:
            repeat:
              times: !lambda 'return repeat_times;'
              wait_time: !lambda 'return repeat_wait_time;'
            address: !lambda 'return address;'
            data: !lambda |-
                std::vector<uint8_t> unsignedCharVector;
                for (const auto& num : data) {
                  uint8_t unsignedCharNum = static_cast<uint8_t>(num);
                  unsignedCharVector.push_back(unsignedCharNum);
                }
                return unsignedCharVector;

项目附件中会有完整的配置文件,我将所有的协议都添加了进去。这样未来在实际使用场景,我们就可以很方便的通过nodered来设置发送的红外指令内容,而无需再去调整和重新烧录源代码。

功能展示图及说明

电路板我设计的是单面焊接,背面在安装时应该是紧贴墙壁或外壳的:

8c7ab0827fd566932df91584ff74a20.jpg


正面的人在传感器模块通过排针焊接在主板上,传感器下面就是ESP32-C3模块。其余的传感器都在模块下方区域:

87ad2fd402b3bd2df06e2287859238c.jpg

插上电后,烧录好程序,就可以直接登录开发板自身的http服务器来进行交互控制:

image.png

如果需要解析红外遥控器的数据,拿着遥控器对着电路板按动按钮,在这个页面中也可以直接看到数据

image.png

有了这些数据,我们就可以直接通过NodeRed或HomeAssistant来配置物联网遥控器了。比如像这样,就可以在HomeAssistant中创建一个开关,用来发送开关红外指令:

image.png

由于我们使用的是esphome API,因此设备也可以很容易的被HomeAssistant自动发现和添加:

image.png

心得体会

这个项目使用esp32c3这么小一个主控实现了众多的功能,在设计上还是颇具挑战。即使到现在这样,我发些电路板的设计还有提升的空间,例如对BME280进行隔离处理,避免其中的温度传感器受到SGP-30中加热器的干扰;或是直接使用BME680,用里面的TVOC传感器数据计算eCO2。优化方案有很多,这次活动让我通过亲自动手开拓了思路,获益良多。

附件下载
室内传感器.7z
团队介绍
个人
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号