🌡️ M5 Thermal Camera
Biometal · M5Stack Core Basic + AMG8833

Flash your thermal camera

This installs the thermal-imager firmware for an M5Stack Core Basic (the 2020 ESP32 model) wired to a Panasonic AMG8833 «Grid-EYE» 8×8 infrared array. After flashing, the Core shows a live thermal image upscaled to 216×216 with a bicubic filter, a colour scale, and min / centre / max readouts — no Wi-Fi, no app, no account.

Flashing happens entirely in your browser over USB via Web Serial — nothing is uploaded anywhere and no credentials are needed. Wire the module first (wiring diagram below), or flash now: the firmware shows an on-screen wiring guide until it finds the sensor.

Install firmware

Connect the M5Stack Core with a data USB-C cable (charge-only cables are the single most common failure), then press Connect & Flash and pick the CP210x / CH9102 serial port when prompted.

Advanced options

Stuck after a failed attempt? Use recovery erase, then flash again.

Wiring — AMG8833 → Grove Port A

The AMG8833 is an I²C device. On the M5Stack Core it goes to Port A, the red Grove socket on the right-hand side — that is the I²C one (GPIO 21 = SDA, GPIO 22 = SCL). If you have M5Stack's own Grove-cabled thermal unit, just plug it in; for a bare breakout (Adafruit / clone) cut a Grove cable or use a Grove-to-jumper adapter and follow the colours below.

AMG8833 to M5Stack Core Basic wiring diagram Grove Port A on the M5Stack Core connects to the AMG8833 breakout: 5V to VIN, GND to GND, GPIO21 (white) to SDA, GPIO22 (yellow) to SCL. MAX CTR MIN A B C M5Stack Core Basic ESP32 · 2020 PORT A I²C RED · 5V BLACK · GND YELLOW · SCL · GPIO 22 WHITE · SDA · GPIO 21 8×8 VIN 3–5V 3Vo · n/c GND SCL SDA INT · n/c AMG8833 breakout Grid-EYE · I²C 0x69
AMG8833 → M5Stack Core Basic, Grove Port A (I²C). Port A is the red socket — the black and blue sockets (B / C) are plain GPIO and ADC, and the sensor will not be found there.
Grove wireM5Stack Port AAMG8833 pinNote
Red5VVIN / VCCUse 5V, not the module's 3Vo output
BlackGNDGNDCommon ground
WhiteGPIO 21SDAI²C data
YellowGPIO 22SCLI²C clock

I²C address. The firmware probes 0x69 first, then 0x68. Breakouts default to 0x69 with AD_SELECT floating; tying that pad to GND moves it to 0x68. Either works — no rebuild needed.

Voltage. The AMG8833 die runs at 3.3 V, but every common breakout (Adafruit, M5Stack, the usual clones) has a regulator and level shifting, so feeding 5 V into VIN is correct. A bare, unregulated Grid-EYE chip must be fed 3.3 V instead — check your board before plugging it in.

Using it

ButtonPressHold
ANext colour palette
Ironbow → Rainbow → Gray → Ice/Fire → Blue/Orange
Show / hide the hot & cold markers
BTemperature range
Auto → Body → Warm → Hot
Double-press: raw 8×8 view on/off
Noise smoothing
OFF → LOW → MED → HIGH (shown as S0…S3)
CFreeze the frameRotate / mirror the image

All settings are saved on the device and survive a reboot. Auto range follows the scene but never stretches below a 3 °C span — pointed at a flat wall, an unconstrained auto-range would amplify sensor noise into a boiling mess. Hold C is the fix if your image comes out mirrored or upside down: which corner the sensor calls «pixel 0» depends on how you mounted it.

Noise smoothing (hold B) averages frames over time on top of the sensor's own filter: each step roughly halves the visible noise but adds lag — at HIGH a moving hand leaves a short trail. Default is MED; drop to OFF/LOW when watching fast changes, go HIGH for static scenes like wall insulation. The current level is shown as S0…S3 next to the palette name.

What to expect. This is a 64-pixel sensor with roughly a 60° field of view and ±2.5 °C absolute accuracy — it finds a warm pipe, a draughty window, an overheating regulator or a person in a room. It is not a FLIR: it will not read a thermometer or resolve fine detail. Readings are of the surface the sensor sees, so shiny metal reads far too cold (low emissivity).

If something goes wrong

«AMG8833 not found» on screen. The firmware is fine — it just can't see the sensor. Check the module is in the red Port A, that SDA and SCL are not swapped, and that VIN has power. It re-probes every second, so fixing the cable is enough; no reflash.

No serial port in the browser dialog. Almost always a charge-only USB cable, or missing USB-serial drivers (CP210x for older Cores, CH9102 for newer ones).

Flash fails part-way. Drop the speed to 115200 in Advanced options, keep «Erase whole flash first» ticked, and retry. If the board no longer boots, use Erase flash (recovery) and flash again.

Wrong chip detected. This firmware is for the ESP32-based Core Basic / Gray. Core2, CoreS3 and StickC use different chips and displays and need a different build.