Montar um sensor de carga ESP no Home Assistant com M5Stack
AUTOMAÇÃO

Montar um sensor de carga ESP no Home Assistant com M5Stack

Jul 2026 ASN Web 3 acessos

Tutorial: Sensor de Carga para Botijão (M5Stack Atom + 4 células + HX711 + ESPHome + Home Assistant)

Como montar um sensor de carga para medir o botijão de gás (M5Stack Atom + 4 células + HX711 + ESPHome)

Este tutorial mostra como montar um sistema que mede o peso do botijão (ex.: 30 kg cheio → vai caindo até ~15–18 kg vazio), envia os dados para o Home Assistant via ESPHome e exibe um card Lovelace. Também inclui uma automação que avisa a Alexa quando o nível atingir 30% (com proteção para não repetir a notificação por 12 horas).


1) Peças necessárias

Atenção: trabalhar com botijão de gás exige cuidado. Não faça perfurações ou soldas no botijão, apenas use a plataforma/estruturas externas. O propósito aqui é medir o peso do conjunto (botijão + recipiente).

2) Como as 4 células são geralmente ligadas

Normalmente cada célula já vem com 4 fios (V+, V-, S+/S- em alguns casos) e, fisicamente, você monta as 4 células numa plataforma de forma que juntas formem um full bridge. Na prática comercial, as 4 células são conectadas juntas na caixa de junção e o HX711 lê a ponte completa com dois fios (DOUT/CLK).

Conexão física (tabela)

ComponenteLigação típicaNotas
4 × células de cargaJuntadas na caixa de junção → saída combinada (padrão do kit)Siga o manual do seu kit; geralmente há 4 fios por célula e a junção forma a ponte completa.
HX711VCC → 5V (ou 3.3V se seu HX711 suportar), GND → GNDUse a tensão correta; HX711 funciona com 2.7–5.5V, mas verifique o seu módulo.
HX711 → Atom (pinos)DOUT → GPIO_DOUT
CLK → GPIO_CLK
Substitua GPIO_DOUT e GPIO_CLK pelos pinos reais do seu Atom S63R. Ver nota abaixo.

Nota sobre pinos: alguns exemplos comuns de pinos para ESP32 são GPIO32/33, GPIO21/22, etc. O Atom S3/“S63R” tem pinout próprio — verifique o pinout no datasheet do seu módulo e substitua no código ESPHome abaixo.


3) Código ESPHome (colar em config/esphome/botijao.yaml)

Este YAML cria o sensor de peso com o HX711 e expõe o sensor para o Home Assistant. Substitua os pinos GPIO_DOUT e GPIO_CLK pelos valores corretos do seu Atom.

esphome:
  name: esphome-web-0e67d4
  friendly_name: ESPHome Web 0e67d4
  min_version: 2025.9.0
  name_add_mac_suffix: false

esp32:
  variant: esp32s3
  framework:
    type: esp-idf

logger:

api:

ota:
  platform: esphome

web_server:

sensor:
  - platform: hx711
    name: "Balanca"
    dout_pin: GPIO1
    clk_pin: GPIO2
    gain: 128
    update_interval: 5s
    filters:
      - calibrate_linear:
          - -26240 -> 0
          - 55234 -> 3
          - 2378369 -> 90
      - lambda: |-
          // Limita para mínimo 0
          if (x < 0) x = 0;

          // Limita a duas casas decimais SEM arredondar
          x = floorf(x * 100.0) / 100.0;

          return x;
    unit_of_measurement: kg

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

Observação: dependendo da versão do componente HX711 no ESPHome, a leitura pode ser exposta já como valor em kg se você aplicar filtros de calibração. Outro caminho é expor o valor bruto e fazer a calibração com um sensor_template ou no Home Assistant.


4) Como calibrar

Procedimento prático:

  1. Deixe a balança em zero (sem carga). Anote o valor bruto (ou configure offset para zerar).
  2. Coloque um peso conhecido (ex.: saco de 3 kg) e anote o novo valor bruto.


      - calibrate_linear:
          - -26240 -> 0
          - 55234 -> 3
          - 2378369 -> 90
    

Dica: faça várias medições e calcule média para reduzir ruído. Use suportes firmes para as células e evite vibrações no chão.


5) Criando o sensor de percentagem no Home Assistant

Com o sensor de peso disponível no Home Assistant (ex.: sensor.botijao_peso_kg), crie um sensor template que converta para percentagem usando o intervalo conhecido:

# configuration.yaml (ou via Helpers -> Template)
sensor:
  - platform: template
    sensors:
      botijao_percent:
        friendly_name: "Botijão (%)"
        unit_of_measurement: "%"
        value_template: >-
          {% set w = states('sensor.botijao_peso_kg')|float(0) %}
          {% set full = 30.0 %}         # peso quando cheio (kg)
          {% set empty = 16.5 %}        # peso quando vazio (ex.: entre 15 e 18). Ajuste conforme seu botijão.
          {% set pct = ((w - empty) / (full - empty)) * 100 %}
          {{ [0, [100, pct]|min]|max|round(1) }}

Ajuste full e empty pelos valores reais do seu botijão (por exemplo 30.0 e 16.5).


6) Lovelace — card sugerido

Um card simples (gauge) para mostrar percentagem e peso:

# Exemplo para usar no modo YAML do Lovelace
type: vertical-stack
cards:
  - type: gauge
    entity: sensor.botijao_percent
    name: Botijão (%)
    min: 0
    max: 100
  - type: entities
    entities:
      - entity: sensor.botijao_peso_kg
        name: Peso (kg)
      - entity: sensor.botijao_percent
        name: Percentual

7) Automação: avisar a Alexa quando estiver em 30% (com bloqueio 12h)

Este exemplo usa o componente notify.alexa_media (Alexa Media Player) — se você usa outra integração (ex.: native Alexa TTS), adapte o serviço. A automação envia TTS e impede repetição por 12 horas usando um input_boolean.

# 1) Helper: input_boolean (configuration.yaml ou via UI Helpers)
input_boolean:
  botijao_alert_sent:
    name: Botijão - alerta enviado
    initial: off

# 2) Automação principal
automation:
  - alias: "Alerta Botijão 30% (Alexa)"
    trigger:
      - platform: numeric_state
        entity_id: sensor.botijao_percent
        below: 30
    condition:
      - condition: state
        entity_id: input_boolean.botijao_alert_sent
        state: "off"
    action:
      - service: notify.alexa_media
        data:
          target:
            - media_player.sala_alexa      # substitua pela sua Alexa
          message: "Atenção: o botijão de gás está com 30 por cento da carga. Verifique o nível."
          data:
            type: tts
      - service: input_boolean.turn_on
        target:
          entity_id: input_boolean.botijao_alert_sent
      - delay: "12:00:00"   # espera 12 horas
      - service: input_boolean.turn_off
        target:
          entity_id: input_boolean.botijao_alert_sent

Se você usa outro método para TTS (por ex. tts.amazon_polly_say ou serviço nativo), substitua a chamada notify.alexa_media pela sua chamada preferida. O importante é a lógica: só envia se o input_boolean estiver OFF; depois liga o boolean e, após 12h, desliga para permitir novo aviso.


8) Testes e ajustes finais

9) Perguntas frequentes (rápido)

Q: Posso usar apenas 1 célula?
A: Para este tipo de plataforma é comum usar 4 células formando full-bridge — usar 1 exige montagem diferente e não é ideal para cargas grandes/irregulares.

Q: Preciso do HX711?
A: Sim — é o ADC específico para células de carga mais usado em projetos com ESPs simples.


Compartilhar