Before your prototype can warn that it is getting too warm

You are preparing a powered display, interactive exhibit or another enclosed prototype for people to try. You can already show a temperature on screen. The next request sounds simple: show a warning when it gets too warm. Before handing it over, you need to see the whole sequence work: warming up, triggering the warning, cooling down and returning to normal.

A developer using a different temperature sensor described exactly this gap in a TI support discussion: the temperature was above the configured limit, yet the expected alert was missing. Later tests showed an alert, but its recovery behavior still differed from what the developer wanted. Reading a value and implementing a useful warning were two separate jobs.

On our bench we connected a GraftSense T117B temperature module to a GraftPort carrier board with a Raspberry Pi Pico, running MicroPython. The module read temperatures without trouble. The output also left an important question open, which makes this a good example of what to check before calling a temperature warning finished.

Start with the actual module and connection

The module connects to the controller's I2C0 connector with a four-wire cable. The program uses GP4 for SDA, GP5 for SCL and a 400 kHz clock. It scans addresses 0x40 through 0x43, and in our run the device answered at 0x40.

That is more useful than assuming an address from a code comment. The chip selects its address through its ADDR pin, and the module has its own address-selection arrangement, so confirm which address responds on your board.

Check power at the module connector as well as at the chip. The module schematic shows a 5 V input feeding a 3.3 V regulator. Confirm the connector supply and the regulated rail on your particular board rather than applying the chip's voltage range directly to the module input.

Pinout of the T117 six-pin package with SCL, GND, ALERT, ADDR, VDD and SDA, and the four I2C addresses set by the ADDR pin
The chip has an open-drain ALERT pin, but the module's four-wire connector does not bring it out.

The four connector signals are power, ground, SDA and SCL. They carry the temperature data but do not expose the chip's ALERT output. That matters later if you want a hardware signal to wake the controller or trigger another action.

What the test program did

We used version 1.0.0 of our T117B driver with MicroPython 1.23.0. Keep driver and firmware versions together when you review a result; a different driver can change the configuration and timing.

The program waits three seconds at startup, creates the I2C bus, scans for the sensor and prints four bytes from its ROM-ID area. It then requests continuous measurement with eight-sample averaging. The selected rate setting, MPS_2_1, means one conversion every two seconds, not two fresh measurements per second.

The loop reads the temperature and prints a cached status beside it. The driver reads the low and high temperature bytes, treats them as a signed 16-bit number and converts it:

temperature_c = signed_raw / 256.0 + 25.0
Register layout of the T117 temperature value, the conversion raw divided by 256 plus 25, and three worked examples
Two registers form a signed value; the 1/256 step is data resolution, not measurement accuracy.

The fine step size should not be confused with accuracy. The Mysentech datasheet specifies the T117B at ±0.5°C over 0 to 60°C. That is a specification for the sensor, not a calibration of the assembled module, and not an assurance that it measures the part of your product you care about.

The loop prints on a nominal 500 ms schedule, and the read call itself waits 500 ms. With conversion configured for every two seconds, repeated values are expected. Faster terminal output does not mean faster sensing or a faster warning.

Read the result before trusting the warning

The test set a high threshold of 30°C and a low threshold of 10°C. It briefly wrote wider thresholds, restored the normal pair and checked that the driver rejected invalid arguments: reversed thresholds, an averaging selection of 99 and a rate selection of 8. Those checks show how the software handles bad requests. They do not take the sensor through the corresponding temperatures or exercise the alarm output.

The recorded temperatures then rose from 29.91°C to 30.58°C. Throughout, the displayed high_alert, low_alert and raw status stayed at zero. It is tempting to call that run complete. But the readings went above the configured 30°C upper limit, and no warning appeared. The test demonstrates communication and changing temperature readings; it does not demonstrate a working high-temperature warning.

There is not enough evidence to name a single cause. Read-and-clear behavior, configuration, conversion timing and the actual pin state need to be checked together, and at no point did an indicator or display change in response to an alarm.

Reading the driver also showed that its mode and polarity bit positions are swapped relative to the datasheet's alert-mode table. With both options left at zero, that alone does not explain this run. It does mean you should reconcile those options before trying a different alarm mode, rather than trusting their names.

Decide where the warning decision lives

Decide whether the program will compare each fresh temperature against a limit, or whether it will rely on the sensor's own alert function. The first approach works over the existing I2C connection. The second requires verifying the chip configuration and, if you want the physical output, getting access to ALERT. Our four-wire connection did not test that path.

Test the warning where the sensor will live

Define what "too warm" means for this prototype before choosing a threshold. A sensor near a regulator, a sensor touching a housing and a sensor meant to measure room air answer different questions. None of them automatically reports the hottest component elsewhere in the product.

A thermostat developer's PCB discussion describes how heat reaching a sensor through the board affected its readings. It is a different project and sensor, but it makes the placement decision concrete. Sensirion's design guide likewise explains why a sensor's own accuracy does not establish the accuracy of the assembled device.

For the next test, record the temperature, the status or decision and the visible warning together. Start below the chosen limit, approach it gradually within the assembly's permitted conditions, then let it cool. Repeat the crossing, and restart the prototype while it is already above the limit. Agree on when a warning should clear; otherwise a feature can pass the first warm-up and surprise you on the second.

Also try a disconnected sensor. A missing reading should have a defined visible state rather than quietly leaving an old temperature on screen. During a user trial, the person testing needs to know whether the device is warm, has recovered or cannot currently measure temperature.

Our bench run covered the first part: a connected module, working data access, parameter checks and recorded output. The next milestone is a repeatable warning-and-recovery demonstration in the intended assembly. That is still prototype validation, not evidence of a certified protective cutoff.