Skip to content

tadelv/meatersp32

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MeaterSP32

A "we have Meater at home" kind of device.

Reads a K-type thermocouple (MAX6675) and broadcasts the temperature over BLE using Bluetooth SIG assigned UUIDs, so any generic BLE client can read it.

BLE protocol

Hybrid layout: a custom app-protocol service (the rich, evolving protocol the companion app speaks) plus standard SIG services kept for generic-client interop (nRF Connect, OS-level). Advertised as local name Decent Temp.

All temperatures: int16 little-endian, value × 100 (0.01 °C). 25.70 °C2570. Matches the SIG 0x2A6E format.

Custom "Decent Temp" service

Private 128-bit base (…c155-5f7c-ce0b-3342-a58cf0def2d9), 16-bit slot in the leading field (scale-style, but vendor-owned — collision-proof, not SIG-reserved).

Slot Characteristic Props Payload Status
0001 service
0002 Probe temperature R/Notify int16 ×100 °C, 5 Hz implemented
0003 Rate of rise R/Notify int16 ×100 °C/s stub
0004 Calibration offset R/W int16 ×100 °C (signed) implemented (in-mem)
0005 Status R/Notify uint8 bitfield (sensor-ok / fault) partial

Standard SIG services (interop)

UUID Service Notes
0x181A / 0x2A6E Environmental Sensing / Temperature Same probe value, throttled ~1 Hz for generic clients (ESS isn't meant for 5 Hz streaming).
0x180A Device Information Model / FW rev / serial.
0x180F Battery Compiled in only on battery builds (HAS_BATTERY).

Advertising

Local name Decent Temp in the primary packet (ReaPrime identifies by exact name; Linux/BlueZ scans unfiltered). The 128-bit service UUID rides in the scan response — a 128-bit UUID (18 B) + the name don't both fit in the 31-byte primary packet. App-side, ReaPrime would register the name in DeviceMatcher and the UUID in serviceUuidsFor().

POC scope

Probe-temp streaming + calibration write are live; rate-of-rise and full status flags are stubbed (handles exist, bodies are TODO). Calibration offset is in-memory only — NVS persistence is a TODO.

Toolchain

Built with the pioarduino platform fork (arduino-esp32 3.x) because NimBLE-Arduino 2.x requires core 3.x; the official platformio/espressif32 still ships core 2.x.

BOM:

About

ESP32 Pretending to be a Meater thermometer

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages