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.
Loading README and project media…
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.

You'll need:
All of these components are readily available at the time of writing, you should be able to easily source them.
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.
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.
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.
+----------+ +------------------+
| 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 | | |
| +-----------------+ | |
+----------------------------+----------------------+
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.
include/example_config.h to include/config.h and change the OTA update password and devicename (this one is optional)example_env_secrets.ini to env_secrets.ini and set the same password for the --auth optionplatformio.ini file has default_envs set to d1_mini_serialdefault_envs set to d1_mini_ota and the correct IP in env_secrets.ini at the upload_port entry), no more need for USB cablesThe 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:
{
"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:

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.