A simple, small, low-power, tap-to-read NFC tag that logs temperature and humidity

This project is coming soon. Sign up to receive updates and be notified when this project launches.

cuplTag is a simple, battery powered NFC tag with a twist, in that it easily and automatically senses and displays the ambient temperature and humidity wherever it is. How cuplTag works is unlike other temperature and humidity sensors, utilizing the simplicity and user-friendly features of NFC technology.

While you could use Bluetooth or IoT sensors to achieve similar goals, they all need some degree of configuration, pairing or app installation. Most sensors are black boxes at some level, especially if an app or web app is needed. cuplTag is fully open source and clearly documented, intended for modification and longevity of use. Best of all, simply tap your phone to cuplTag and the data is displayed clearly and securely. It’s that easy.

How Does it Work?

The microcontroller periodically wakes up to read temperature and humidity from a sensor. These readings are written into a URL, which opens automatically when the tag is scanned (tapped) by a phone. The cuplTag web application unwraps and decodes the circular buffer, adds timestamps and plots data on a graph. Ease-of-use is a priority. On the user’s end, you just tap the tag to view its data: there is no need to install a dedicated app.

cuplTag is built around an NFC sensor. Humidity and temperature data are written into a URL that is stored on a dual interface I2C and NFC EEPROM. A web application extracts data from a ~1KB circular buffer in the URL, writes it to a database and plots it on a graph. A mobile phone opens a URL automatically when it is read from an NFC tag, and displays a web interface with the humidity and temperature data.

Use cuplTag Anywhere, Anytime

The cuplTag system offers unparalleled ease-of-use in a low cost package. There are many uses for a super simple-to-use temperature and humidity sensor, here’s just a few examples:

At home:

  • Enhance temperature monitoring for increased comfort and fine-tuning of energy consumption.
  • Preventing mold conditions. The optimum range for relative humidity is between 40% and 60% (source). Mold grows when the humidity is too high.
  • Houseplants often require specific temperature and humidity.
  • Film storage.

In professional environments:

  • Monitor cold environments so items like food are never stored in sub-optimal temperatures.
  • Sense the temperature and humidity in a greenhouse or garden center.
  • Temperature monitoring in laboratories.
  • Goods in transit.

cuplTag Demo


Each tag has its own secret key. When the web application unwraps the circular buffer and displays timestamped samples in a graph, a message authentication code (HMAC) is used to verify that the URL was created by the cuplTag and not a 3rd party. Without an HMAC, there’d be a spoofing problem. Anyone could write a URL containing a list of samples that appears to originate from a tag. The HMAC is generated from the list of circular buffer samples and a secret key as described here. One tag is highly unlikely to produce the same HMAC twice, so the code is also used to guard against replay attacks, where a valid URL is obtained by a 3rd party and re-opened more than once.

Fully Open Source

cuplTag is a system comprised of hardware, firmware, frontend and backend web applications. All are open source.

  • Link to board schematics

  • Link to other design files like the layout and project files. (HT07 was designed in KiCAD.)

  • Link to firmware here and here.

  • The firmware employs the encoder in cuplcodec to generate the tag URL, here’s the code and docs.

  • Tag URL parameters are decoded into a list of samples by a Python web application, here’s the code, more code and API docs.

  • Data is passed to and from the cuplbackend web application by cuplfrontend, which is written in ReactJS.

cuplTag System Deployment Information

Tags will work with zero configuration after a battery is inserted. The tags are pre-configured to display data using an instance of cuplfrontend. This can be changed. The frontend makes API calls to an instance of cuplbackend.. A user can recreate this deployment on their own infrastructure if they choose to.

The cupldeploy project is the parent of cupltag, cuplbackend and cuplfrontend. A tagged commit of cupldeploy represents a ‘system version number’. It connects versions of each child project that are inter-operable.

And, finally, there are some more descriptions of cuplcodec, cuplbackend and cuplfrontend on the project website.

Interested in This Project?

You can sign up to be notified when this campaign launches, and to get any other useful updates, right at the top of this page. We work hard to only send out useful information and you can unsubscribe at any time.

See Also

Subscribe to the Crowd Supply newsletter, highlighting the latest creators and projects: