

The aim of this project is to measure, store, display and evaluate the temperature in the rooms of a large building over an extended time period. This project has 2 main components:
- Size
- 95 × 70 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 62
- Nets
- 43
- Pads
- 211
- Tracks, vias
- 639, 14
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 7 (file 20221018)
- Created
- 1 Feb 2018
- Updated
- 29 Mar 2026
Overview
Ltl is an open-source printed circuit board by ThomasStolt, from the ThomasStolt/LongTermEnvLogger repository on GitHub. It is a 2-layer board of 95 × 70 mm with 62 parts on 43 nets, routed with 639 tracks and 14 vias.
It is built around the ESP-12E, DS18B20 and TPL5111DDCR, with the TPS73733DCQR, BAT85 and BC327 among its other parts. Its parts include 18 resistors, 12 capacitors, 4 ICs, 4 connectors and 3 transistors. It belongs with the ESP8266 boards of this library.
Main components
8ESP-12E
SMD,24x16mm-20℃~+70℃ -90dBm 16dBm 170mA 2.4GHz 3V~3.6V 56mA 802.11b/g/n ESP8266 Chip On-board PCB Antenna Over-the-air (OTA) update UART、SPI、I2C SMD,24x16mm WiFi Modules ROHSAi-ThinkerWiFi ModulesDS18B20
TO-92-55℃~+125℃ 12bit 3V~5.5V 750ms Single-bus ±0.4℃ TO-92 Temperature Sensors ROHSUMWTemperature SensorsTPL5111DDCR
TSOT-23-6Watchdog timer TSOT-23-6 Application Specific Clock/Timing ROHSTexas InstrumentsTimers / CountersTPS73733DCQR
SOT-223-6-40℃~+125℃@(Tj) 1 1A 3.3V 400uA 5.5V 500mV@(1A) 58dB@(100Hz) 89.1uVrms Fixed Over Current Protection、Over Temperature Protection、Enable Positive SOT-223-6 Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSTexas InstrumentsVoltage Regulators - Linear, Low Drop Out (LDO) RegulatorsBAT85
DO-341 Independent 200mA 2uA@25V 30V 5A 800mV@100mA DO-34 Schottky Diodes ROHSNexperiaSchottky DiodesBC327
TO-921 PNP 100MHz 45V 5V 625mW 630 700mV 800mA PNP TO-92 Bipolar (BJT) ROHSDDFBipolar (BJT)RUM001L02T2CL
SOT-723-55℃~+150℃ 1 N-channel 1.7pF 100mA 150mW 1V 20V 3.3pF 7.1pF 9Ω@1.5V N-Channel SOT-723 MOSFETs ROHSROHM SemiconductorMOSFETsRZM001P02T2L
SOT-723-55℃~+150℃ 1 P-Channel 1.5pF 100mA 150mW 15pF 1V 20V 3.8Ω@4.5V 4pF P-Channel SOT-723 MOSFETs ROHSROHM SemiconductorMOSFETs
README
README.mdLong Term Environment Logger
The aim of this project is to measure, store, display and evaluate the temperature in the rooms of a large building over an extended time period. This project has 2 main components:
A. The hardware of the sensor.
B. The server infrastructure to receive, store and display the measurements.
The Hardware
-
An ultra-low power timer circuit that uses nano-Amps only when asleep and wakes up the entire circuit every approx. 5 minutes for measurement.
-
An LDO voltage regulator that regulates the incoming battery voltage from a LiIon battery to 3.3V
-
A battery voltage sensor that sends the battery voltage to the ESP8266 ADC pin with a voltage divider so that the battery voltage can be monitored.
-
The ESP8266 with a DS18B20 temperature sensor.
-
A small solar cell with a charging circuit, to keep the battery charged for as long as possible.
... and some additional mechanical and electronic components.
The ESP8266 was chosen as the microcontroller. It is versatile, very affordable, has more than enough functionality and information is easy to find.
If you think about it in detail, this project is not quite as trivial as it first appears. Some of the things to consider are:
-
Runtime - How long does a single battery last?
- As the battery-operated temperature sensors are to be distributed throughout a very large building, you want the individual sensors to run for as long as possible, so that you don't have to run around the building changing or charging batteries all the time. One option is the energy-saving mode ("DeepSleep") of the microcontroller. This would reduce the current draw during deep sleep to about 14µA. However, we want to achieve sleep current of less than 100nA! So, the normal Deep-Sleep will not do it.
-
Update OTA(?)
- It might be worth considering adding this capability. This would probably affect the runtime as well, because if we check for updates every time the circuit wakes up, it will cost runtime and energy. So, the question here is, how much runtime this would cost and is this really necessary?
-
WiFi Connection Time
- When the ESP8266 wakes up and has WiFi switched on, it draws about 70mA, which is a lot. So, all efforts need to be taken to reduce the connection time to be a short as possible.
-
Power supply / battery
- Li-Ion batteries are a good energy source for this type of project, especially the 18650 type. They are relatively inexpensive for their capacity. However, as these batteries are very sensitive to mishandling, it is important to take appropriate precautions.
- How can you ensure that the LiIon battery will not be deep discharged?
- How can I ensure that the LiIon battery cannot be overcharged?
- How can I monitor the voltage of the power supply (of the LiIo battery) in order to replace or charge the battery in good time?
- All batteries must be checked regularly for their capacity and possible health issues.
- Li-Ion batteries are a good energy source for this type of project, especially the 18650 type. They are relatively inexpensive for their capacity. However, as these batteries are very sensitive to mishandling, it is important to take appropriate precautions.
Overview
First a short diagram for an overview:

Programmer Tool
An interactive TUI (terminal user interface) that programs each sensor in two steps. Built with Textual for a comfortable dark-mode interface.
Features
- Auto-detects USB serial ports (OTA/network ports filtered out) and pre-selects the right one
- Live hotplug detection — plug in the adapter and it appears immediately
- Parallel background compilation while you prepare the hardware
- Auto-selects the WiFi network from your credentials file (strongest signal)
- Two-column credentials panel — file list on the left, network config on the right; press
Eto edit - Per-location sensor registry (
sensors_home.csv,sensors_school.csv, …) — switches automatically with the selected credentials file - Always-visible Serial Debug panel showing raw ESP output during setup-sketch read
- Adjustable baud rate selector and automatic retry loop on serial read timeout
- Full keyboard navigation — no mouse required
- Clean two-step workflow with progress feedback
Prerequisites
- arduino-cli with the ESP8266 core installed:
bash arduino-cli core install esp8266:esp8266 - Python 3.10+
bash pip install -r tool/requirements.txt
Credentials Setup
cp credentials.example.h credentials_Home.h
# Edit credentials_Home.h and fill in your SSID and passwordYou can have multiple credential files for different locations:
credentials_Home.hcredentials_School.h
These files are gitignored — never commit real credentials.
Board Configuration
Edit tool/arduino_config.py if needed:
BOARD_FQBN = "esp8266:esp8266:generic" # change for your ESP8266 variantCommon FQBNs:
esp8266:esp8266:generic— bare ESP-01/ESP-12 modulesesp8266:esp8266:nodemcuv2— NodeMCU v2 / Lolinesp8266:esp8266:d1_mini— Wemos D1 Mini
Running the Tool
Connect the ESP8266 via USB-TTL adapter, then:
cd tool && python3 ltl_programmer.pyKeyboard shortcuts:
| Key | Action |
|---|---|
F | Start flash workflow |
R | Refresh port list |
E | Edit network config for selected credentials |
Q | Quit |
Enter | Confirm / Continue |
Workflow:
- Select your USB-TTL adapter port (pre-selected automatically)
- Select the credentials location (Home, School, …)
- Press
Fto start — the tool guides you through:- Enter flash mode (RST + FLASH button sequence)
- Setup sketch uploads and reads MAC address, DS18B20 address, and nearby WiFi
- WiFi network is auto-selected from your credentials file
- Enter a room number (1–254)
- Production firmware compiles and uploads with all values baked in
- Sensor is recorded in
tool/sensors_<location>.csv(one file per credentials location)
Flash Mode (ESP-12 / bare modules)
Bare ESP8266 modules without an auto-reset circuit require manual flash mode entry:
- Press and hold RST
- Press and hold FLASH
- Release RST
- Release FLASH
The tool will prompt you at the right moment.
Manual Flash Fallback
If arduino-cli is not available, you can flash manually using the Arduino IDE:
- Flash
code/LTL_setup/LTL_setup.inoand open Serial Monitor at 115200 baud - Note the MAC address and DS18B20 address
- Edit
code/LTL_sensor/LTL_sensor.ino— replace the placeholder values - Copy your
credentials_<location>.htocredentials.hin the same folder - Flash
code/LTL_sensor/LTL_sensor.ino
Sensor Registry
tool/sensors_<location>.csv tracks all programmed sensors per location (gitignored). For example, sensors_home.csv and sensors_school.csv are created automatically when you first flash a sensor using that credentials file.
| Field | Description |
|---|---|
| timestamp | When the sensor was programmed |
| room_number | Room number (also last IP octet) |
| mac_address | ESP8266 MAC address |
| ds18b20_address | DS18B20 OneWire address |
| location | Credentials location used |
| ssid | WiFi network name |
| bssid | Pinned BSSID (empty if not pinned) |
| channel | Pinned channel (empty if not pinned) |
Battery Life Optimization
The production firmware (code/LTL_sensor/LTL_sensor.ino) reduces ESP8266 awake time by ~1060–1480ms per 5-minute cycle compared to the original firmware:
| Optimization | Saving |
|---|---|
| 9-bit DS18B20 resolution (±0.5°C) + async overlap | ~750ms |
| Hardcoded DS18B20 address (no bus scan) | ~10–30ms |
| Post-publish delays removed | ~300ms |
| Total without BSSID pinning | ~1060–1080ms |
| Optional BSSID/channel pinning | +~200–400ms |
| Total with BSSID pinning | ~1260–1480ms |
Parts
62| Qty | Value | Footprint | References |
|---|---|---|---|
| 11 | 10K | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R18 |
| 6 | MountingHole_Pad | MountingHole:MountingHole_3.2mm_M3_Pad_Via | H1, H2, H3, H4, H5, H6 |
| 4 | 100nF | Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mm | C6, C9, C10, C12 |
| 4 | 10uF | Capacitor_THT:CP_Radial_D5.0mm_P2.00mm | C4, C5, C7, C11 |
| 3 | 10uF | Capacitor_SMD:C_1206_3216Metric | C1, C2, C3 |
| 2 | 100 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R2, R3 |
| 2 | 1K | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R14, R15 |
| 2 | Conn_01x04 | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical | J1, J2 |
| 1 | 100uF | Capacitor_THT:CP_Radial_D5.0mm_P2.00mm | C8 |
| 1 | 1042 | 18650:18650_flat | BT1 |
| 1 | 39K | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R17 |
| 1 | 4.7K | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R16 |
| 1 | 43K | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R1 |
| 1 | BAT85 | Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal | D1 |
| 1 | BC327 | Package_TO_SOT_THT:TO-92_Inline_Wide | Q1 |
| 1 | BatDiv | TestPoint:TestPoint_Loop_D1.80mm_Drill1.0mm_Beaded | TP3 |
| 1 | Conn_01x06 | Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical | J4 |
| 1 | Conn_01x16 | Connector_PinHeader_2.54mm:PinHeader_1x16_P2.54mm_Vertical | J3 |
| 1 | DS18B20 | Package_TO_SOT_THT:TO-92 | U4 |
| 1 | Done | TestPoint:TestPoint_Loop_D1.80mm_Drill1.0mm_Beaded | TP1 |
| 1 | Drive | TestPoint:TestPoint_Loop_D1.80mm_Drill1.0mm_Beaded | TP2 |
| 1 | ESP-12E | ESP8266MOD:ESP8266MOD | U3 |
| 1 | Flash | TestPoint:TestPoint_Loop_D1.80mm_Drill1.0mm_Beaded | TP4 |
| 1 | Flash | Button_Switch_THT:SW_PUSH_6mm | Flash1 |
| 1 | Fuse_Small | Fuse:Fuse_1206_3216Metric_Pad1.42x1.75mm_HandSolder | F1 |
| 1 | G*** | kibuzzard-65AD8C40 | kibuzzard-65AD8C40 |
| 1 | G*** | kibuzzard-65AD86B5 | kibuzzard-65AD86B5 |
| 1 | G*** | kibuzzard-65AD8853 | kibuzzard-65AD8853 |
| 1 | G*** | kibuzzard-65AD8212 | kibuzzard-65AD8212 |
| 1 | JP1 | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | JP1 |
| 1 | RUM001L02T2CL | Package_TO_SOT_SMD:SOT-723 | Q2 |
| 1 | RZM001P02T2L | Package_TO_SOT_SMD:SOT-723 | Q3 |
| 1 | Reset | Button_Switch_THT:SW_PUSH_6mm | Reset1 |
| 1 | Reset | TestPoint:TestPoint_Loop_D1.80mm_Drill1.0mm_Beaded | TP5 |
| 1 | TPL5111DDCR | Package_TO_SOT_SMD:SOT-23-6 | U1 |
| 1 | TPS73733DCQR | Package_TO_SOT_SMD:SOT-223-6 | U2 |
Similar boards
- 4 layers85.7 × 73.9 mm

- 2 layers108 × 75 mm

ESP32 C3 Zigbee Temp
Cath272/ESP32-Low-Power-Temp-Monitor
In the project files you may find ESP32-C3 instead of ESP32-C6. I named it wrong when i created the project. The issue is just the file names, the footprints are correct and use a C6.
75 partsGPL-3.0 - 4 layers78 × 130 mm

Solar oracle walkman relay
weiweiweiopen/self-powered-iv-curve-tester-with-single-dssc
Single-DSSC energy-harvesting I-V tester: KiCad hardware, relay switching, GPIO firmware, and energy estimates.
175 partsMIT - 2 layers17.8 × 19 mm

Adafruit adafruit tpl5111 reset enable timer pcb adafruit tpl5111 reset enable timer
oomlout/oomlout_oomp_project_bot_v_2
19 parts - 4 layers57 × 22.5 mm

NB3 hindbrain
NoBlackBoxes/LastBlackBox
A course for brains interested in brains (not tools interested in tools)
147 parts69 - 2 layers24.4 × 35.8 mm

- 4 layers101.5 × 44.8 mm

- 2 layers99.7 × 73.5 mm

Questions
How big is the Ltl PCB?
It measures 95 × 70 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Ltl use?
62 parts, built around the ESP-12E, DS18B20, TPL5111DDCR and TPS73733DCQR. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Ltl KiCad files?
From the ThomasStolt/LongTermEnvLogger repository on GitHub, at the commit this page was made from: the board is kicad/ltl.kicad_pcb and its schematic kicad/ltl.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Ltl design in my own project?
Its repository states no licence, so its author keeps all rights: ask ThomasStolt before reusing the design.