NodeMCU library for the TI HDC1000 sensor!

2 minute read

It’s been a while since I received my NodeMCU development board but I have only been able to get my hands on it lately.

I soon downloaded the ESP uploader and after reading some Lua docs (and finding out some weird things such as that the “not equal” operator is actually “~=” ) I started writing my own code for the board.

Writing and uploading software to the board is easy and fast. The only concern is that after flashing the NoceMCU firmware you are not left with a lot of memory available.

So I wrote a NodeMCU library (they call them modules) for the TI HDC1000. The code has been merged to the dev branch of the nodemcu firmware and it should go to the master soon, but I’ve set up a repo too (click!).

Download and upload the library

Click here to download the latest library.

You then need to connect to your ESP8266 dev board and upload the “HDC1000.lua” file to it. This is pretty straightforward using ESPlorer.

After connecting to your board, upload the “HDC1000.lua” file.

Setup your sensor

First, require it:

HDC1000 = require("HDC1000")

Then, initialize it:

HDC1000.init(sda, scl, drdyn)

If you don’t want to use the DRDYn pin, set it to false: a 20ms delay will be automatically set after each read request.

HDC1000.init(sda, scl, false)
Reading temperature with the DRDYn pin off.
Reading temperature with the DRDYn pin on.

Configure it:


Default options set the address to 0x40 and enable both temperature and humidity readings at 14-bit resolution, with the integrated heater on. You can change them by initializing your sensor like this:

HDC1000.config(address, resolution, heater);

“resolution” can be set to 14 bits for both temperature and humidity (0x00 – default) 11 bits for temperature (0x40), 11 bits for humidity (0x01), 8 bits for humidity (0x20) “heater” can be set to ON (0x20 – default) or OFF (0x00)

Read some values

You can read temperature and humidity by using the following commands:

temperature = HDC1000.getTemp()

in Celsius degrees.

humidity = HDC1000.getHumi()

in %RH.

Check your battery

The following code returns true if the battery voltage is <2.8V, false otherwise.

isDead = HDC1000.batteryDead();

Complete example code

HDC1000 = require("HDC1000")

sda = 1
scl = 2
drdyn = false

HDC1000.init(sda, scl, drdyn)
HDC1000.config() -- default values are used if called with no arguments. prototype is config(address, resolution, heater)

print(string.format("Temperature: %.2f °C\nHumidity: %.2f %%", HDC1000.getTemp(), HDC1000.getHumi()))

HDC1000 = nil