Skip to the content
PCBKitNew board
2 layers25.7 × 34.4 mmTemperatureDisplay, the printed circuit board in 3D

Measures temperature and humidity using a GXHT30 and displays this information on an SSD1306 OLED display. Offers a HTTP endpoint to read values as JSON, also outputs values on serial.

Size
25.7 × 34.4 mm
Copper layers
2
Thickness
1.6 mm
Parts
4
Nets
16
Pads
32
Tracks, vias
20, 0
Pours
2
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
19 Mar 2025
Updated
14 Apr 2025

Overview

TemperatureDisplay is an open-source printed circuit board by RobThree, from the RobThree/TemperatureDisplay repository on GitHub, published under the MIT licence. It is a 2-layer board of 25.7 × 34.4 mm with 4 parts on 16 nets, routed with 20 tracks and 0 vias.

It is built around the GXHT30. It belongs with the lEDs and displays and interfaces and adapters boards and the ESP8266 boards of this library.

Main components

1

README

README.md

Logo Temperature Display

Uses an Wemos D1 mini with a GXHT30 I²C temperature & humidity sensor and a SSD1306 I²C 0.96" OLED display.

This project supports OTA updates, uses the WiFi manager to configure the WiFi and provides a REST API to get the temperature and humidity as JSON. The readings (and display) are updated every 2 seconds (by default, configurable) and also output to serial.

Example

Hardware

You'll need:

All of these components are readily available at the time of writing, you should be able to easily source them.

PCB

The pcb directory contains the KiCad (9.0) design files for the Wemos D1 mini shield PCB. PCBWay reached out to me and was kind enough to support this project. The project is available at PCBWay's Shared Projects for easy ordering.

PCB front PCBWay logo PCB back

PCB front PCBWay logo PCB back

For more pictures of the PCB and/or project see the project page or the /img/PCBWay directory. I would like to thank PCBWay again 🙏 Shipping was incredibly quick 🛫🛬 and the PCB is perfectly finished 👌

In a next iteration I'm hoping to integrate the GXHT30 on the shield, but being pretty new to PCB design this first iteration uses a module.

DIY

Connect the GXHT30 and SSD1306 to the Wemos D1 mini's 3v3 pin, connect the grounds of all three modules. And connect SDA to D2 (GPIO4) and SCL to D1 (GPIO5). That's it. Done. Apparently some modules require 5V; if your display is glitching or not turning on, try connecting it to the 5V pin on the Wemos D1 mini. I power the project via the Wemos' onboard USB port but you should also be able to power it by directly powering the power pins.

text
                           +----------+        +------------------+
                           |  GXHT30  |        |     SSD1306      |
                           |    [X]   |        |                  |
                           |          |        |                  |
                           | V G  S S |        |    V  G  S  S    |
   +-----------------+     | C N  D C |        |    C  N  D  C    |
   |  Wemos D1 mini  |     | C D  A L |        |    C  D  A  K    |
   |    (ESP8266)    |     +----------+        +------------------+
   |                 |       | |  | |               |  |  |  |
   |              D1 |-------|-|--|-+---------------|--|--|--+
   |              D2 |-------|-|--+-----------------|--|--+
   |                 |       | |                    |  |
   |                 |       | |                    |  |
   |                 |       | |                    |  |
   |                 |       | |                    |  |
   |             GND |-------|-+--------------------|--+
+--| 3V3             |       |                      |
|  +-----------------+       |                      |
+----------------------------+----------------------+

Tips on assembly:

  • ⚠️ On some displays there's a capacitor that can get quite close to the pins of this board. You might want to take a sidecutter and snip of a piece of the pin or use some kapton tape or some other means to isolate the pin. Make sure you check BOTH left and right side of the display!
  • Solder the pinheaders/sockets first, and only then solder the display / temperature sensor. If you solder the display first you'll have a hard time reaching the pins connecting the board to the Wemos D1 mini
  • When soldering the display to the board, use a female header as a spacer for the perfect alignment.
  • You don't need to use male/female headers to connect the Wemos D1 mini to the PCB, you can use pins-only to make the device more compact. Just make sure you keep enough clearance!
  • Don't forget to emjoy the peel-feel when removing the protective peel from the OLED 🤤

Software

This is a PlatformIO project. I'm sure someone will help convert this to an Arduino IDE project, but it's not going to be me.

How to get started

  1. Open this folder in PlatformIO for VSCode
  2. Copy include/example_config.h to include/config.h and change the OTA update password and devicename (this one is optional)
  3. Copy example_env_secrets.ini to env_secrets.ini and set the same password for the --auth option
  4. ⚠️ Make sure your platformio.ini file has default_envs set to d1_mini_serial
  5. Connect your USB cable to your device and the Wemos D1 mini
  6. Compile the project and upload via (USB virtual) serial to your Wemos D1 mini
  7. You should now be able to connect to a WiFi AP named after your devicename (see step 2); connect to it, set your WiFi credentials and save
  8. The Wemos D1 mini should reboot and the OLED display should (shortly) show the IP; the display should show any other errors or problems as well
  9. Next time you update you can use the OTA configuration (default_envs set to d1_mini_ota and the correct IP in env_secrets.ini at the upload_port entry), no more need for USB cables

Once it's up and running

The display will show the temperature in °C or Fahrenheit (see include/config.h) and the humidity in %RH (Relative Humidity). If your sensor is way off you can fix this by setting TEMPERATUREOFFSET and/or HUMIDITYOFFSET in include/config.h and updating the device or, much easier, by using the web UI. The temperature and humidity will also be output to the serial port every time the sensor is read (see UPDATEINTERVAL) and when you use the /read endpoint of the REST API (e.g. http://<deviceip>/read [GET]) you'll get the readings as json:

json
{
  "celsius": {
    "temperature": 22.81,
    "offset": -5
  },
  "fahrenheit": {
    "temperature": 73.058,
    "offset": -9
  },
  "humidity": {
    "relative_perc": 31.29,
    "relative_perc_offset": 8
  },
  "wifi": {
    "rssi": -48
  },
  "lastupdate": "1.62 seconds ago",
  "display": "c",
  "devicename": "MyDevice"
}

These values are only updated every time the sensor is read (again: see UPDATEINTERVAL). There is also a /reset endpoint ([PUT]) that will reboot the device.

Finally, the device also offers a user-friendly UI at the / endpoint (e.g. http://<deivce-ip-here>/) which updates every 5 seconds:

Screenshot

You can find the settings at http://<deivce-ip-here>/settings or by clicking the cog in the top right corner of the home screen. The settings screen allows you to adjust some values. Once your changed settings have been saved you can go back home by clicking the 'home' icon in the top right corner.

Attribution

Parts

4
QtyValueFootprintReferences
2Connector_Generic:Conn_01x08Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_VerticalP1, P2
1GXHT30Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_VerticalJ2
1SSD1306Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_VerticalJ1

Questions

How big is the TemperatureDisplay PCB?

It measures 25.7 × 34.4 mm and has 2 copper layers, 1.6 mm thick.

What parts does the TemperatureDisplay use?

4 parts, built around the GXHT30. 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 TemperatureDisplay KiCad files?

From the RobThree/TemperatureDisplay repository on GitHub, at the commit this page was made from: the board is pcb/Temperature Display.kicad_pcb and its schematic pcb/Temperature Display.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the TemperatureDisplay design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 10 layers70 × 50 mmSoilsense, the printed circuit board in 3D

    Soilsense

    wasylews/soilsense

    A low-power soil moisture and climate sensor on an ESP-01, powered by a single 18650 cell for an estimated six months. Custom PCB and a 3D-printed enclosure.

    29 parts
  • 2 layers18.5 × 26 mm24g2usb rp2350zero, the printed circuit board in 3D

    24g2usb rp2350zero

    joypad-ai/joypad-os

    Universal controller firmware for building adapters, dongles, and custom controllers.

    4 parts1.7kApache-2.0
  • 2 layers116 × 33 mm966595-1 and 963356-1, the printed circuit board in 3D

    966595-1 and 963356-1

    rusefi/rusefi

    rusefi - GPL internal combustion engine control unit

    4 parts1.2k
  • 2 layers19 × 18 mmDaughter board, the printed circuit board in 3D

    Daughter board

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    4 parts915
  • 2 layers24.8 × 24.8 mmNrf24 breakout, the printed circuit board in 3D

    Nrf24 breakout

    tardate/LittleArduinoProjects

    a collection of "Little Electronic & Arduino Projects", most involving electronics or an Arduino in one way or another!

    4 parts803MIT
  • 2 layers26 × 20 mmCap chain, the printed circuit board in 3D

    Cap chain

    drandyhaas/KiCadRoutingTools

    A set of Python/Rust tools to aid routing in KiCad

    4 parts744MIT
  • 2 layers34.7 × 20 mmXG Station Power MSI, the printed circuit board in 3D

    XG Station Power MSI

    osy/XG_Mobile_Station

    Open source eGPU dock for ROG Ally and ROG Flow

    4 parts712CC-BY-4.0
  • 2 layers20.3 × 24.5 mmJack power input, the printed circuit board in 3D

    Jack power input

    Luos-io/luos_engine

    Open-source and real-time orchestrator for cyber-physical-systems, to easily design, test and deploy embedded applications and digital twins.

    4 parts546MIT