Montar um sensor de carga ESP no Home Assistant com M5Stack
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
- 4× load cells (ex.: 50 kg cada ou conforme sua escolha) — montadas em uma plataforma com junção para formar full-bridge.
- 1× HX711 (amplificador ADC para células de carga).
- 1× M5Stack Atom (você informou “Atom S63R” — estou considerando uma variante ESP32-S3; ajuste pinos conforme pinout do seu módulo).
- Dupla-face, caixa de junção (onde as 4 células se encontram), base mecânica para o botijão.
- Fonte de alimentação estável 5V/USB para o Atom.
LINKS
S63 Core: https://s.click.aliexpress.com/e/_c3MUMIKD
Scale Kit: https://s.click.aliexpress.com/e/_c3SLRmRL
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)
| Componente | Ligação típica | Notas |
|---|---|---|
| 4 × células de carga | Juntadas 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. |
| HX711 | VCC → 5V (ou 3.3V se seu HX711 suportar), GND → GND | Use a tensão correta; HX711 funciona com 2.7–5.5V, mas verifique o seu módulo. |
| HX711 → Atom (pinos) | DOUT → GPIO_DOUTCLK → 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:
- Deixe a balança em zero (sem carga). Anote o valor bruto (ou configure offset para zerar).
- 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
- Teste com pesos conhecidos e verifique se a percentagem bate com o esperado.
- Ajuste filtros no ESPHome (sliding window, median) para reduzir ruído.
- Se a leitura oscilar muito com pequenas vibrações, aumente o
window_sizeou oupdate_interval. - Verifique o posicionamento mecânico das células — centralize o peso e evite alavancas que gerem leituras erráticas.
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.
