ProbeHarbor probe
Prebuilt sensor firmware from the ProbeHarbor project. Flash it from this page, then it finds a temperature sensor by itself and posts a reading every minute.
Wiring
| From | To board | Note |
|---|---|---|
| Sensor VCC | 3V3 | |
| Sensor GND | GND | |
| DS18B20 or DHT22 data | GPIO 4 | 4.7 kΩ pull-up to 3V3. Up to four DS18B20s share the line |
| I2C sensor SDA | GPIO 21 | SHT31, BME280 or AHT20, found at boot |
| I2C sensor SCL | GPIO 22 | |
| Leak contact | GPIO 27 | Other wire to GND. Only read when enabled in setup |
| Door reed switch | GPIO 26 | Other wire to GND. Only read when enabled in setup |
| Battery divider midpoint | GPIO 35 | 1:1 divider from a single Li-ion cell. Only read when enabled |
Tested on this board
- TestedBrowser flash, USB settings, Wi-Fi and first reading with a DS18B20 (firmware 1.0.1)
- TestedDHT22 on GPIO 4 (firmware 1.1.1)
- TestedBME280 on I2C: temperature, humidity and pressure (firmware 1.2.2)
- TestedSHT31 on I2C (firmware 1.2.3)
- TestedDoor reed switch, with a post on every change (firmware 1.2.3, 2026-10-29)
- TestedAHT20 on SDA 21 / SCL 22 (firmware 1.2.6, 2026-11-11)
Wiring
| From | To board | Note |
|---|---|---|
| Sensor VCC | 3V3 | |
| Sensor GND | GND | |
| DS18B20 or DHT22 data | GPIO 4 | 4.7 kΩ pull-up to 3V3. Up to four DS18B20s share the line |
| I2C sensor SDA | GPIO 8 | SHT31, BME280 or AHT20, found at boot |
| I2C sensor SCL | GPIO 9 | |
| Leak contact | GPIO 5 | Other wire to GND. Only read when enabled in setup |
| Door reed switch | GPIO 6 | Other wire to GND. Only read when enabled in setup |
| Battery divider midpoint | GPIO 7 | 1:1 divider from a single Li-ion cell. Only read when enabled |
Tested on this board
- TestedFlash, settings and Wi-Fi over the native USB port (firmware 1.2.4, 2026-11-05)
- TestedAHT20 on SDA 8 / SCL 9 (firmware 1.2.6, 2026-11-11)
Wiring
| From | To board | Note |
|---|---|---|
| Sensor VCC | 3V3 | |
| Sensor GND | GND | |
| DS18B20 or DHT22 data | GPIO 4 | 4.7 kΩ pull-up to 3V3. Up to four DS18B20s share the line |
| I2C sensor SDA | GPIO 6 | SHT31, BME280 or AHT20, found at boot |
| I2C sensor SCL | GPIO 7 | |
| Leak contact | GPIO 5 | Other wire to GND. Only read when enabled in setup |
| Door reed switch | GPIO 10 | Other wire to GND. Only read when enabled in setup |
| Battery divider midpoint | GPIO 3 | 1:1 divider from a single Li-ion cell. Only read when enabled |
Tested on this board
- TestedNative USB port, settings and Wi-Fi, DHT22 on GPIO 4 (firmware 1.2.5, 2026-11-06)
Parts
| Quantity | Part | Where to buy |
|---|---|---|
| 1× | ESP32 dev board | Buy at Amazon |
| 1× | or ESP32-S3-DevKitC-1 | Buy at Adafruit |
| 1× | or ESP32-C3-DevKitM-1 | Buy at Adafruit |
| 1× | DS18B20 waterproof probe, or a DHT22 | Buy at Adafruit |
| 1× | 4.7 kΩ resistor, pull-up for the probe data line | Buy at Amazon |
| 1× | Optional I2C sensor: SHT31 | Buy at Adafruit |
| 1× | Optional I2C sensor: BME280 | Buy at Adafruit |
| 1× | Optional I2C sensor: AHT20 | Buy at Adafruit |
| 1× | Optional door reed switch | Buy at Adafruit |
| 2× | Optional 100 kΩ resistors, battery divider | Buy at Adafruit |
Amazon buy links may include an Associates tag, and this site may earn a commission from qualifying Amazon purchases at no extra cost to you. Adafruit links are direct.
Load it
This browser cannot flash. Use Chrome or Edge on a desktop.
Flashing needs a secure page. Open this site over https or from http://localhost.
One image per chip family: ESP32, ESP32-S3 and ESP32-C3. The installer detects which one is connected.
- Create a device at probeharbor.dev to get a device key.
- Keep the board on USB and send Wi-Fi and the key with the form below.
- No computer nearby? Join the ProbeHarbor-Setup Wi-Fi network from a phone and fill in the portal instead.
The probe has no settings after a flash. Fill these in with the board still on USB. They go straight to the board and are not stored by this site.
Field notes
- Flashing writes a merged image at offset 0, which also erases saved Wi-Fi and the device key. Send settings again after every flash.
- TT post -5 means the reply was lost, not the reading. In testing the server had stored both readings that printed -5.
- An I2C sensor that is found at boot but then prints TT sensor problem usually has a loose power or ground wire. That was the cause when it happened on the S3.
- Hold BOOT for five seconds to erase Wi-Fi and the key. Feather boards have no button on GPIO 0, so resend settings instead.
- On a Feather, probe data on GPIO 4 is the pad marked A5 and the door input on GPIO 26 is A0.
Not tested yet
- Leak and battery inputs on any board
- Setup portal and the five-second BOOT reset
- DS18B20 on the S3 and C3, and any I2C sensor on the C3
- UART port on the S3 and on a C3 DevKitM-1
- A long unattended run on the S3