# No-Code Indoor Grow Monitor with PPFD and VPD Measurements

## Overview

![](https://cdn-learn.adafruit.com/assets/assets/000/140/080/medium800/temperature___humidity_hero-phone-plant-wide.jpg?1759276593 )

## IoT Grow Monitor

Fall is almost here. With temperatures falling, the basil and heirloom tomatoes that you have been growing in your garden to top your dinner with are moving back inside the house for winter._&nbsp;But will they still grow?&nbsp;_&nbsp;

## Remote Monitoring

This project is a low-cost, easy to build internet-of-things (IoT) device that can help you to remotely monitor your indoor crops or exotic plants. Using Adafruit IO, you can remotely see your sensor data in real time on a mobile device giving you a visual user interface.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/030/medium640/sensors_hero-IO-dash.jpg?1759176003)

## DIY 3D Printed Device

The device is designed to be suspended in mid-air, so the no-contact thermometer is pointing towards the leaves or flowers of your plant.&nbsp;

The 3D printed case houses a couple of **sensors to calculate your plant's photosynthetic photon flux density (PPFD) and vapor pressure deficit (VPD).**

**Knowing these data points can help optimize the yield of your indoor crops.&nbsp;**

![](https://cdn-learn.adafruit.com/assets/assets/000/140/031/medium640/sensors_hero-device-plants.jpg?1759176161)

## WipperSnapper & Blockly Actions

With Adafruit IO’s new Blockly Actions, you can drag and drop “blocks” to create advanced triggers.&nbsp;

**In this project you'll use “Math Blocks” to calculate the PPFD and VPD using advanced formulas and temperature sensor data.**

With Wippersnapper, you can **easily setup your QT Py ESP32 device with I2C sensors all within the browser with no need for coding**. The Adafruit IO site is intuitive and will walk you through the process.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/032/medium640/sensors_hero-actions.jpg?1759176310)

## Parts
Featured
### Adafruit QT Py S3 with 2MB PSRAM WiFi Dev Board with STEMMA QT

[Adafruit QT Py S3 with 2MB PSRAM WiFi Dev Board with STEMMA QT](https://www.adafruit.com/product/5700)
The ESP32-S3 has arrived in QT Py format - and what a great way to get started with this powerful new chip from Espressif! With dual 240 MHz cores, WiFi and BLE support, and native USB, this QT Py is great for powering your IoT projects. Now we even have this powerhouse of a board with built...

In Stock
[Buy Now](https://www.adafruit.com/product/5700)
[Related Guides to the Product](https://learn.adafruit.com/products/5700/guides)
![Angled shot of purple, square-shaped microcontroller.](https://cdn-shop.adafruit.com/640x480/5700-06.jpg)

Featured
### Adafruit MLX90632 FIR Remote Thermal Temperature Sensor

[Adafruit MLX90632 FIR Remote Thermal Temperature Sensor](https://www.adafruit.com/product/6403)
Remote infrared sensors are unique in their ability to measure something they are pointed at, but not touching, and we've been looking for a replacement for the [now-discontiued TMP007 for a few years](https://www.adafruit.com/product/2023). The&nbsp; **Adafruit MLX90632...**

In Stock
[Buy Now](https://www.adafruit.com/product/6403)
[Related Guides to the Product](https://learn.adafruit.com/products/6403/guides)
![Angled shot of black, rectangle-shaped FIR temperature sensor breakout.](https://cdn-shop.adafruit.com/640x480/6403-00.jpg)

Featured
### Adafruit VEML7700 Lux Sensor - I2C Light Sensor

[Adafruit VEML7700 Lux Sensor - I2C Light Sensor](https://www.adafruit.com/product/4162)
Vishay has a lot of light sensors out there, and this is a nice simple lux sensor that's easy to add to any microcontroller. Most light sensors just give you a number for brighter/darker ambient lighting. The VEML7700 makes your life easier by calculating the lux, which is an SI unit for...

In Stock
[Buy Now](https://www.adafruit.com/product/4162)
[Related Guides to the Product](https://learn.adafruit.com/products/4162/guides)
![Angled shot of lux sensor breakout.](https://cdn-shop.adafruit.com/640x480/4162-10.jpg)

Featured
### Adafruit SCD-40 - True CO2, Temperature and Humidity Sensor

[Adafruit SCD-40 - True CO2, Temperature and Humidity Sensor](https://www.adafruit.com/product/5187)
Take a deep breath in...now slowly breathe out. Mmm isn't it wonderful? All that air around us, which we bring into our lungs, extracts oxygen from and then breathes out carbon dioxide. CO2 is essential for life on this planet we call Earth - we and plants&nbsp;take turns using and...

In Stock
[Buy Now](https://www.adafruit.com/product/5187)
[Related Guides to the Product](https://learn.adafruit.com/products/5187/guides)
![Angled shot of Adafruit SCD-40 - NDIR CO2 Temperature and Humidity Sensor.](https://cdn-shop.adafruit.com/640x480/5187-08.jpg)

### STEMMA QT / Qwiic JST SH 4-Pin Cable - 50mm Long

quantity: 2
[STEMMA QT / Qwiic JST SH 4-Pin Cable - 50mm Long](https://www.adafruit.com/product/4399)
This 4-wire cable is&nbsp;50mm / 1.9" long and fitted with JST SH female 4-pin connectors on both ends. Compared with the chunkier JST PH these are 1mm pitch instead of 2mm, but still have a nice latching feel, while being easy to insert and remove.

<a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/4399)
[Related Guides to the Product](https://learn.adafruit.com/products/4399/guides)
![Angled of of JST SH 4-Pin Cable.](https://cdn-shop.adafruit.com/640x480/4399-00.jpg)

### STEMMA QT / Qwiic JST SH 4-pin Cable - 100mm Long

[STEMMA QT / Qwiic JST SH 4-pin Cable - 100mm Long](https://www.adafruit.com/product/4210)
This 4-wire cable is a little over 100mm / 4" long and fitted with JST-SH female 4-pin connectors on both ends. Compared with the chunkier JST-PH these are 1mm pitch instead of 2mm, but still have a nice latching feel, while being easy to insert and remove.

<a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/4210)
[Related Guides to the Product](https://learn.adafruit.com/products/4210/guides)
![Angled shot of STEMMA QT / Qwiic JST SH 4-pin Cable.](https://cdn-shop.adafruit.com/640x480/4210-00.jpg)

### Blue USB Type C to USB A Cable with 540 Degree Rotating End

[Blue USB Type C to USB A Cable with 540 Degree Rotating End](https://www.adafruit.com/product/6278)
Some days we're feeling extra fancy here at the 'fruit warehouse, and we have a big soft spot for colorful&nbsp;cables that make our projects look like Transformers. Like, peep [this fully reversible pink/purple Blinka-inspired cable](https://www.adafruit.com/product/4111)....

Out of Stock
[Buy Now](https://www.adafruit.com/product/6278)
[Related Guides to the Product](https://learn.adafruit.com/products/6278/guides)
![Angled Shot of the Blue USB Type C to USB A Cable with 540 Degree Rotating End 1m.](https://cdn-shop.adafruit.com/640x480/6278-07.jpg)

## Hardware&nbsp;

The following hardware fasteners are required to assemble this project.

- 4x M3 x 16mm long machine screws
- 8x M3 x 6mm long machine screws
- 6x M2.5 x 6mm long machine screws
- 2x M3 hex nuts

Featured
### Black Nylon Machine Screw and Stand-off Set – M2.5 Thread

[Black Nylon Machine Screw and Stand-off Set – M2.5 Thread](https://www.adafruit.com/product/3299)
Totaling 380 pieces, this **M2.5 Screw Set** &nbsp;is a must-have for your workstation.&nbsp;You'll have enough screws, nuts, and hex standoffs to fuel your maker tendencies&nbsp;for days on end! M2.5 size screws fit almost all of the Adafruit breakout/dev board mounting holes...

In Stock
[Buy Now](https://www.adafruit.com/product/3299)
[Related Guides to the Product](https://learn.adafruit.com/products/3299/guides)
![Black Nylon Screw and Stand-off Set with M2.5 Threads, kit box](https://cdn-shop.adafruit.com/640x480/3299-00.jpg)

Featured
### Black Nylon Machine Screw and Stand-off Set – M3 Thread

[Black Nylon Machine Screw and Stand-off Set – M3 Thread](https://www.adafruit.com/product/4685)
Totaling **420 pieces** , this **M3 Screw Set** &nbsp;is a must-have for your workstation.&nbsp;You'll have enough screws, nuts, and hex standoffs to fuel your maker tendencies&nbsp;for days on end! M3 size screws fit a number of&nbsp;Adafruit breakout/dev board...

In Stock
[Buy Now](https://www.adafruit.com/product/4685)
[Related Guides to the Product](https://learn.adafruit.com/products/4685/guides)
![Opened box showing many nylon screws](https://cdn-shop.adafruit.com/640x480/4685-01.jpg)

# No-Code Indoor Grow Monitor with PPFD and VPD Measurements

## CAD Files

## 3D Printed Parts

Individual 3MF files for 3D printing are oriented and ready to print on FDM machines using PLA filament. Original design source may be downloaded using the links below.&nbsp;

![](https://cdn-learn.adafruit.com/assets/assets/000/139/850/medium640/sensors_build-plate-parts.jpg?1758647631)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/997/medium640/sensors_3d-parts.jpg?1758821594)

[Download 3MF.zip](https://cdn-learn.adafruit.com/assets/assets/000/139/854/original/3MF.zip?1758652999)
[Download CAD Source Files](https://cdn-learn.adafruit.com/assets/assets/000/139/855/original/CAD.zip?1758653040)
## CAD Assembly

The various sensors are secured to a mounting plate. The QT Py is fitted inside a holder that is secured to an additional mount that is vertically attached to the sensor mounting plate. The mounting assembly is secured to the main enclosure. The bottom and top covers are secured to the main enclosure with proper orientation for exposing the USB port and sensors.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/848/medium640thumb/sensors_cad-explode.jpg?1758646976)

## Build Volume

The parts require a 3D printer with a minimum build volume of:

- 75mm (X) x 75mm (Y) x 74mm (Z)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/849/medium640/sensors_build-volume.jpg?1758647360)

## Design Source Files

The project assembly was designed in Fusion 360. Once opened in Fusion 360, It can be exported in different formats like STEP, STL and more.

Electronic components like Adafruit's boards, displays, connectors and more can be downloaded from the&nbsp;[Adafruit CAD parts GitHub Repo](https://github.com/adafruit/Adafruit_CAD_Parts/).

![](https://cdn-learn.adafruit.com/assets/assets/000/139/856/medium640/sensors_5426_QT_Py_ESP32-S3.jpg?1758653128)

# No-Code Indoor Grow Monitor with PPFD and VPD Measurements

## Wiring

## Wiring

The diagram below provides a visual reference for wiring the project's components.&nbsp;

This project uses&nbsp;[STEMMA QT](https://learn.adafruit.com/introducing-adafruit-stemma-qt) cables and connectors to provide a no-soldering solution for wiring. The breakouts all connect to each other, and to the QT Py board, using STEMMA QT cables.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/179/medium800/sensors_growsensor_bb.png?1756306103 )

# No-Code Indoor Grow Monitor with PPFD and VPD Measurements

## WipperSnapper Setup

Warning: 

## What is WipperSnapper

WipperSnapper is a firmware designed to turn any WiFi-capable board into an Internet-of-Things device without programming a single line of code. WipperSnapper connects to [Adafruit IO](https://io.adafruit.com/), a web&nbsp;platform designed ([by Adafruit!](https://www.adafruit.com/about)) to&nbsp;_display_,&nbsp;_respond_, and&nbsp;_interact_&nbsp;with your project's data.

Simply load the WipperSnapper firmware onto your board, add credentials, and plug it into power. Your board will automatically register itself with your Adafruit IO account.

From there, you can add&nbsp;_components_&nbsp;to your board such as buttons, switches, potentiometers, sensors, and more! Components are&nbsp;_dynamically&nbsp;_added to hardware, so you can&nbsp;immediately start interacting, logging, and streaming the data your projects produce without writing code.

## Sign up for Adafruit.io

You will need an Adafruit IO account to use WipperSnapper on your board. If you do not already have one, head over to [io.adafruit.com](https://io.adafruit.com/) to create a&nbsp;_free_ account.

## Add a New Device to Adafruit IO

Log into your [Adafruit IO](https://io.adafruit.com/) account. Click the _New Device_ button at the top of the page.

![](https://cdn-learn.adafruit.com/assets/assets/000/112/548/medium800/wippersnapper_setup__board_selector__web__new_device_1.png?1655919766)

After clicking New Device, you should be on the _board selector_ page. This page displays every board that is compatible with the WipperSnapper firmware.

![](https://cdn-learn.adafruit.com/assets/assets/000/112/550/medium800/wippersnapper_setup__board_selector__web__selector_maion.png?1655920178)

In the board selector page's search bar, search for the _QT Py_ _ESP32-S2.&nbsp;_Once you've located the board you'd like to install WipperSnapper on,_&nbsp;_click the&nbsp;_Choose Board_&nbsp;button to bring you to the self-guided installation wizard.

![](https://cdn-learn.adafruit.com/assets/assets/000/112/955/medium800/adafruit_products_qtpys2_board.png?1657225317)

Follow the step-by-step instructions on the page to install Wippersnapper on your device and connect it to Adafruit IO.

![](https://cdn-learn.adafruit.com/assets/assets/000/112/956/medium800/adafruit_products_qtpys2_wizard.png?1657225347)

If the installation was successful, a popover should appear displaying that your board has successfully been detected by Adafruit IO.

Give your board a name and click "Continue to Device Page".

![](https://cdn-learn.adafruit.com/assets/assets/000/112/957/medium800/adafruit_products_qtpys2_new_device.png?1657225472)

You should be brought to your board's device page.

![](https://cdn-learn.adafruit.com/assets/assets/000/112/958/medium800/adafruit_products_qtpys2_device_pg.png?1657225767)

## Feedback

Adafruit.io WipperSnapper is in **beta** and you can help improve it!

If you have&nbsp; suggestions or general feedback about the installation process - visit [https://io.adafruit.com/support](https://io.adafruit.com/support), click _"Contact Adafruit IO Support"_ and select _"I have feedback or suggestions for the WipperSnapper Beta"._

## Troubleshooting

If you encountered an issue during installation, please try the steps below first.

If you're still unable to resolve the issue, or if your issue is not listed below, get in touch with us directly at [https://io.adafruit.com/support](https://io.adafruit.com/support "https://io.adafruit.com/support"). Make sure to click&nbsp; _"Contact Adafruit IO Support"_ and select "_There is an issue with WipperSnapper. Something is broken!"_

### 

First, make sure that you selected the correct board on the board selector.

Next, please make sure that you entered your WiFi credentials properly, there are no spaces/special characters in either your network name (SSID) or password, and that you are connected to a 2.4GHz wireless network.

If you're still unable to connect your board to WiFi, please [make a new post on the WipperSnapper technical support forum with the error you're experiencing, the LED colors which are blinking, and the board you're using.](https://forums.adafruit.com/viewforum.php?f=66)

### 

Try hard-resetting your board by unplugging it from USB power and plugging it back in.

If the error is still occurring, please&nbsp;[make a new post on the WipperSnapper technical support forum with information about what you're experiencing, the LED colors which are blinking (if applicable), and the board you're using.](https://forums.adafruit.com/viewforum.php?f=66)

## "Uninstalling" WipperSnapper&nbsp;

WipperSnapper firmware is an application that is loaded onto your board. There is nothing to "uninstall". However, you may want to "move" your board from running WipperSnapper to running Arduino or CircuitPython. You also may need to restore your board to the state it was shipped to you from the Adafruit factory.&nbsp;

### Moving from WipperSnapper to CircuitPython

Follow the steps on the [Installing CircuitPython page](https://learn.adafruit.com/welcome-to-circuitpython/installing-circuitpython) to install CircuitPython on your board running WipperSnapper.

- If you are unable to double-tap the RST button to enter the UF2 bootloader, follow the _"Factory Resetting a WipperSnapper Board"_ instructions below.

Uploading this sketch will overwrite WipperSnapper. If you want to re-install WipperSnapper, follow the instructions at the top of this page.

### Moving from WipperSnapper to Arduino

If you want to use your board with Arduino, you will use the Arduino IDE to load&nbsp;_any_ sketch onto your board.

First, follow the page below to set up your Arduino IDE environment for use with your board.

[Setup Arduino IDE](https://learn.adafruit.com/adafruit-qt-py-esp32-s2/arduino-ide-setup)
Then, follow the page below to upload the "Arduino Blink" sketch to your board.

[Upload Arduino Blink Sketch](https://learn.adafruit.com/adafruit-qt-py-esp32-s2/arduino-neopixel-blink)
Uploading this sketch will overwrite WipperSnapper. If you want to re-install WipperSnapper, follow the instructions at the top of this page.

### Factory Resetting a WipperSnapper Board

Sometimes, hardware gets into a state that requires it to be "restored" to the original state it shipped in. If you'd like to get your board back to its original factory state, follow the guide below.

[Factory Reset](https://learn.adafruit.com/adafruit-qt-py-esp32-s2/factory-reset)
# No-Code Indoor Grow Monitor with PPFD and VPD Measurements

## Set up an Adafruit IO Device

Before we set up Actions to calculate the VPD and send data to our email, we'll need to attach and configure the QT Py's sensors components.

We'll do this by navigating to the Devices page ([https://io.adafruit.com/devices)](https://io.adafruit.com/devices)) and clicking the QT Py ESP32-S3.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/185/medium800/sensors_SCR-20250827-ktgw.png?1756310121)

You will be redirected to the Device Page for your QT Py. From here, you will add and configure the sensors that connect to your QT Py.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/186/medium800/sensors_SCR-20250827-kujj.png?1756310229)

## Add the SCD40 Component

To add the&nbsp; **SCD40 Sensor** to your QT Py, click the **&nbsp;"+"&nbsp;** symbol on the Device Page to bring up the component picker.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/187/medium800/sensors_SCR-20250827-kush.png?1756310289)

- On the Component Picker, Search for the SCD40 and select it.
- Configure the SCD40 to send CO2, temperature and relative humidity readings back to Adafruit IO.&nbsp;
  - You can configure how often to send this by clicking the Send Data dropdown.

- **Click** &nbsp;Create Component.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/188/medium640/sensors_SCR-20250827-kvds.png?1756310396)

![](https://cdn-learn.adafruit.com/assets/assets/000/140/164/medium640/temperature___humidity_SCR-20251003-jqci.png?1759501910)

The SCD40 component should appear on your device page.&nbsp;

![](https://cdn-learn.adafruit.com/assets/assets/000/140/167/medium800/temperature___humidity_SCR-20251003-jqqm.png?1759501982)

## Add the VEML7700 Component

To add the&nbsp; **VEML7700 Sensor&nbsp;** to your QT Py, click the **&nbsp;"+"&nbsp;** symbol on the Device Page&nbsp;to bring up the component picker.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/168/medium800/temperature___humidity_SCR-20251003-jqwm.png?1759502016)

- On the Component Picker, Search for the VEML7700 and select it.
- Configure the VEML7700 to send Lux readings back to Adafruit IO.&nbsp;
  - You can configure how often to send this by clicking the Send Data dropdown.

- **Click** &nbsp;Create Component.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/192/medium640/sensors_SCR-20250827-kyua.png?1756310984)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/193/medium640/sensors_SCR-20250827-kyxg.png?1756311010)

The VEML7700 component should appear on your device page.&nbsp;

![](https://cdn-learn.adafruit.com/assets/assets/000/140/169/medium800/temperature___humidity_SCR-20251003-jrdf.png?1759502062)

## Add the MLX90632 Component

To add the **MLX90632**** &nbsp;Sensor&nbsp; **to your QT Py, click the** &nbsp;"+"&nbsp;**symbol on the Device Page&nbsp;to bring up the component picker.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/238/medium800/sensors_SCR-20250828-nwve.png?1756410193)

- On the Component Picker, Search for the MLX90632 and select it.
- Configure the MLX90632 to send Measured Object Temp (either degrees Celsius or degrees Fahrenheit) readings back to Adafruit IO.&nbsp;
  - You can configure how often to send this by clicking the Send Data dropdown.

- **Click** &nbsp;Create Component.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/239/medium640/sensors_SCR-20250828-nxhj.png?1756410569)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/240/medium640/sensors_SCR-20250828-nyyk.png?1756410594)

Before moving on, verify that the the MLX90632 sensor appears and the device page looks like the following:

![](https://cdn-learn.adafruit.com/assets/assets/000/140/170/medium800/temperature___humidity_SCR-20251003-jrnq.png?1759502130)

# No-Code Indoor Grow Monitor with PPFD and VPD Measurements

## Set Up Adafruit IO Actions

This guide uses multiple Adafruit IO Actions for:

- Calculating the Photosynthetic Photon Flux Density (PPFD) from the VEML7700 sensor.
- Calculating the Vapor Pressure Deficit (VPD) from multiple sensors.
- Sending a SMS Alert when any measurement (we'll use VPD as an example) goes out of bounds

[If you do not know what Adafruit IO Actions are - check out this guide here \>\>\>&nbsp;](https://learn.adafruit.com/how-to-use-blockly-for-actions-on-adafruit-io)

## Create an Action to Calculate VPD

The Vapor Pressure Deficit (VPD) is [the measure of the drying power of air](http://cronklab.wikidot.com/calculation-of-vapour-pressure-deficit). VPD can help a plant grower adjust their watering schedule and even mitigate against crop diseases.&nbsp;It is a measurement that is incredibly important to plant physiology and growth.

First create a new feed to store the resulting PPFD value. Navigate to your [Feeds page](https://io.adafruit.com/feeds) and click New Feed.

First, let's create a new feed to store the resulting VPD value.

- Navigate to your&nbsp;[Feeds page](https://io.adafruit.com/feeds)
- Click New Feed
- Name the new feed _VPD_
- Click Create

![](https://cdn-learn.adafruit.com/assets/assets/000/139/247/medium640/sensors_SCR-20250827-lerp.png?1756412408)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/248/medium640/sensors_SCR-20250828-okch.png?1756412449)

After clicking create, you will be brought to the Actions Editor.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/249/medium800/sensors_SCR-20250828-okqx.png?1756412531)

The simplest trigger -&nbsp;[any data](https://io.adafruit.com/actions-docs/blocks/triggers/when_data.html)&nbsp;- runs your Action every single time ANY new data arrives at a feed, regardless of what the value is.

Open the Block Toolbox by clicking on the Triggers

Select the any data block and drag it into your root block, placing it underneath the _Triggers_ section.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/253/medium640/sensors_SCR-20250827-lxok.png?1756412603)

Change the feed within the Any Data Block to the SCD40's temperature sensor.&nbsp;

Whenever the SCD40's temperature sensor gets a new reading, this Action will execute the blocks underneath the _Actions_ heading.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/254/medium800/sensors_SCR-20250828-ommg.png?1756412841)

Next, let's talk math!&nbsp;

The VPD is the difference between the vapor pressure of the leaf and the vapor pressure of the air,&nbsp;

`VPD = VPleaf - VPair`

### Calculate Leaf VPD

To get the vapor pressure of the leaf, [use the following formula](https://vpdchart.com/grow-guide/vpd.html#how-to-calculate-vpd):

`VPleaf = 610.7 * 107.5*leaf_temp/(237.3+leaf_temp) / 1000`

While this calculation looks may appear _scary_, Actions has enough math blocks to get us through this equation without programming!&nbsp; By breaking down these formulas using the&nbsp;[order of operations](https://en.wikipedia.org/wiki/Order_of_operations), you're able to create an Action that can combine multiple data sources from different sensors.

First, calculate the value inside the parenthesis: `237.3+leaf_temp`

First, **create a new variable** since we'll reference it later in Blocks.

**To create a new variable** ,

- Click the Variables button on the Toolbox
- Click _Create New Variable_
- Name the variable something you can remember, like _leaf-parens._
- You should now see two blocks for the variable within Variables in your toolbox.
- Select the Set Variable block and connect it to the root block's Actions section.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/258/medium640/sensors_SCR-20250828-oqsj.png?1756413595)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/259/medium640/sensors_SCR-20250828-oqwf.png?1756413624)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/260/medium640/sensors_SCR-20250828-orll.png?1756413694)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/285/medium640/sensors_SCR-20250829-kctx.png?1756498590)

Next, use this block to calculate the leaf temperature.

- Open the Toolbox and select the [Arithmetic Block](https://io.adafruit.com/actions-docs/blocks/math/arithmetic.html).
- On the diagram, connect the Arithmetic Block to the Set Variable block.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/284/medium640/sensors_SCR-20250829-kcvy.png?1756498662)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/286/medium640/sensors_SCR-20250829-kcxt.png?1756498693)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/287/medium640/sensors_SCR-20250829-kczw.png?1756498735)

Change the left-hand side of the Arithmetic Block's equation to 237.3

- Open the Toolbox and select the [Get Feed Value](https://io.adafruit.com/actions-docs/blocks/feeds/get_value.html#block-get-feed-value) block.
- On the diagram, connect the Get Feed Value Block to the right-hand side of the Arithmetic Block.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/288/medium640/sensors_SCR-20250829-kdcw.png?1756499528)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/289/medium640/sensors_SCR-20250829-kden.png?1756499546)

On the Get Feed Value Block, modify the feed to match the MLX90632 sensor's _Measured Object Temperature_ value.&nbsp;

Your diagram should match the following screenshot.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/291/medium800/sensors_SCR-20250829-kdin.png?1756499667)

Create a new variable named _leaf-numerator:_

- Click the Variables button on the Toolbox
- Click&nbsp;_Create New Variable_
- Name the variable _leaf-numerator_
- Drag and drop the Set Variable Block underneath the previous block.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/292/medium640/sensors_SCR-20250829-kzgd.png?1756826736)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/293/medium640/sensors_SCR-20250829-kzny.png?1756826796)

To obtain the value of the leaf numerator:

- Drag and drop the Arithmetic Block into the Set Variable Block.
- Update the number on the left-hand side of the Arithmetic Block to `7.5`.
- Change the Arithmetic Block's operation to multiply.
- Connect the Get Feed block for the MLX90632 to the right-hand side of the Arithmetic Block.

Your diagram should look like the screenshot below.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/294/medium800/sensors_SCR-20250829-kzpo.png?1756826833)

Create a new variable named&nbsp;_leaf-exponent:_

- Click the Variables button on the Toolbox
- Click&nbsp;_Create New Variable_
- Name the variable&nbsp;_leaf-exponent_
- Drag and drop the Set Variable Block underneath the previous block.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/295/medium640/sensors_SCR-20250829-kzgd.png?1756827244)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/296/medium640/sensors_SCR-20250829-kzwg.png?1756827251)

To obtain the value of the leaf exponent:

- Drag and drop the Arithmetic Block into the Set Variable Block.
- Drag and drop the Get Variable Block (toolbox-\>variables) for the `leaf-numerator` variable to the left-hand side of the Arithmetic Block.
- Change the Arithmetic Block's operation to division.
- Connect the Variable block for the `leaf-parens` variable to the right-hand side of the Arithmetic Block

Your diagram should look like the screenshot below.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/297/medium800/sensors_SCR-20250829-lagi.png?1756827274)

Create a new variable named&nbsp;_leaf-10&nbsp;_to hold the value of the exponentiation.

- Click the Variables button on the Toolbox
- Click&nbsp;_Create New Variable_
- Name the variable&nbsp;_leaf-10_
- Drag and drop the Set Variable Block underneath the previous block.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/300/medium640/sensors_SCR-20250829-kzgd.png?1756827592)

To obtain the value of the 10^n operation:

- Drag and drop the Arithmetic Block into the Set Variable Block.
- Set the number on the left-hand side of the Arithmetic Block to&nbsp;10.
- Change the Arithmetic Block's operation to exponentiation (`^`).
- Connect the Variable block for the&nbsp;`leaf-exponent`&nbsp;variable to the right-hand side of the Arithmetic Block

Your diagram should look like the screenshot below.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/301/medium800/sensors_SCR-20250829-lbhn.png?1756827649)

Create a new variable named&nbsp;_leaf-vpd:_

- Click the Variables button on the Toolbox
- Click&nbsp;_Create New Variable_
- Name the variable&nbsp;_leaf-vpd_
- Drag and drop the Set Variable Block underneath the previous block.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/298/medium640/sensors_SCR-20250829-kzgd.png?1756827420)

Finally, to obtain the value of the Leaf VPD:

- Drag and drop the Arithmetic Block into the Set Variable Block.
- Set the number on the left-hand side of the Arithmetic Block to `0.6107`.
- Change the Arithmetic Block's operation to multiplication.
- Connect the Variable block for the `leaf-10` variable to the right-hand side of the Arithmetic Block

Your diagram should look like the screenshot below.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/299/medium800/sensors_SCR-20250829-lbhn.png?1756827446)

The final diagram for calculating Leaf VPD should look like the screenshot below.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/302/medium800/sensors_SCR-20250829-lbwu.png?1756827751)

### Calculate Air VPD

Next, to calculate the VPD for the air around the plant. [This equation can be modeled as](https://vpdchart.com/grow-guide/vpd.html#how-to-calculate-vpd):

`VPair = 610.7 * 107.5*Tair/(237.3+Tair)/1000 * RH/100`

where:

`VPair`&nbsp;- vapor pressure of the air in kPa  
`Tair` - air temperature in Celsius  
`RH` - air relative humidity

Following the Order of Operations, break this equation down into steps on the diagram.

Create a new variable named&nbsp;_air-parens:_

- Click the Variables button on the Toolbox
- Click&nbsp;_Create New Variable_
- Name the variable _air-parens_
- Drag and drop the Set Variable Block underneath the previous block.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/303/medium640/sensors_SCR-20250828-oqsj.png?1756829713)

To obtain the value for `air-parens`:

- Drag and drop the Arithmetic Block into the Set Variable Block.
- Set the number on the left-hand side of the Arithmetic Block to `237.3`.
- Change the Arithmetic Block's operation to addition.
- Connect the Get Feed Block&nbsp;to the right-hand side of the Arithmetic Block.
  - Set the feed to the SCD40 Temperature.

Your diagram should look like the screenshot below.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/304/medium800/sensors_SCR-20250829-mhmi.png?1756829767)

Create a new variable named&nbsp;_air-numerator:_

- Click the Variables button on the Toolbox
- Click&nbsp;_Create New Variable_
- Name the variable _air-numerator_
- Drag and drop the Set Variable Block underneath the previous block.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/305/medium640/sensors_SCR-20250828-oqsj.png?1756829886)

To obtain the value for `air-numerator`:

- Drag and drop the Arithmetic Block into the Set Variable Block.
- Set the number on the left-hand side of the Arithmetic Block to `237.3`.
- Change the Arithmetic Block's operation to addition.
- Connect the Get Feed Block&nbsp;to the right-hand side of the Arithmetic Block.
  - Set the feed to the SCD40 Temperature.

Your diagram should look like the screenshot below.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/306/medium800/sensors_SCR-20250829-mhkv.png?1756830743)

Create a new variable named&nbsp;_air-exponent:_

- Click the Variables button on the Toolbox
- Click&nbsp;_Create New Variable_
- Name the variable&nbsp;_air-exponent_
- Drag and drop the Set Variable Block underneath the previous block.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/307/medium640/sensors_SCR-20250828-oqsj.png?1756830906)

To obtain the value for `air-exponent`:

- Drag and drop the Arithmetic Block into the Set Variable Block.
- Add a Get Variable block to the left-hand side of the Arithmetic Block.
  - Select the `air-numerator` value.

- Change the Arithmetic Block's operation to division.
- Add a Get Variable block to the left-hand side of the Arithmetic Block.
  - Select the `air-parens` value.

Your diagram should look like the screenshot below.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/308/medium800/sensors_SCR-20250829-mhud.png?1756830922)

Create a new variable named&nbsp;_air-10:_

- Click the Variables button on the Toolbox
- Click&nbsp;_Create New Variable_
- Name the variable&nbsp;_air-10_
- Drag and drop the Set Variable Block underneath the previous block.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/309/medium640/sensors_SCR-20250828-oqsj.png?1756831010)

To obtain the value for&nbsp;`air-10`:

- Drag and drop the Arithmetic Block into the Set Variable Block.
- Set the value on the right-hand side of the Arithmetic Block to `10`.
- Change the Arithmetic Block's operation to exponentiation (`^`).
- Add a Get Variable block to the left-hand side of the Arithmetic Block.
  - Select the&nbsp;`air-exponent`&nbsp;value.

Your diagram should look like the screenshot below.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/310/medium800/sensors_SCR-20250829-mhxv.png?1756831246)

Create a new variable named _VPair__:_

- Click the Variables button on the Toolbox
- Click&nbsp;_Create New Variable_
- Name the variable&nbsp;_VPair_
- Drag and drop the Set Variable Block underneath the previous block.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/311/medium640/sensors_SCR-20250828-oqsj.png?1756831707)

To obtain the value for&nbsp;`VPair`:

- Drag and drop the Arithmetic Block into the Set Variable Block.
- Set the value on the left-hand side of the Arithmetic Block to `0.006107`.
- Change the Arithmetic Block's operation to multiplication (`x`).
- Add a Get Variable block to the right-hand side of the Arithmetic Block.
  - Select the&nbsp;`air-10`&nbsp;value.

Your diagram should look like the screenshot below.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/312/medium800/sensors_SCR-20250902-lnxd.png?1756831896)

- Drag and drop another Set Variable Block to the diagram, placing it underneath the previous block.
- Configure the Set Variable block to the `VPair` variable.
- Drag and drop the Arithmetic Block into the Set Variable Block.
- Set the value on the left-hand side of the Arithmetic Block to the `VPair` variable.
- Change the Arithmetic Block's operation to multiplication (`x`).
- Add a Get Feed Block to the right-hand side of the Arithmetic Block.
  - Select the _QT PY S3's SCD40 Humidity Sensor_ value

Your diagram should look like the screenshot below.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/313/medium800/sensors_SCR-20250902-lolo.png?1756831992)

Finally, to calculate the VPD. The total VPD is the difference between the leaf VPD and the air VPD.

- On the toolbox, select the&nbsp;[Set Feed Value Block](https://io.adafruit.com/actions-docs/blocks/feeds/set_value.html#block-set-feed-value) and connect it to your diagram.
- Drag and drop the Arithmetic Block into the Set Feed Value Block.
- Set the value on the left-hand side of the Arithmetic Block to&nbsp;the&nbsp;`leaf-VPD`&nbsp;variable.
- Change the Arithmetic Block's operation to subtraction (-).
- Set the value on the right-hand side of the Arithmetic Block to the `VPair` variable./

![](https://cdn-learn.adafruit.com/assets/assets/000/139/318/medium800/sensors_SCR-20250902-ltmq.png?1756832871)

Double-check that your diagram looks like the following diagram before proceeding.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/319/medium800/sensors_SCR-20250829-ogxf.png?1756833048)

Click the Enable button to Enable, Save, and Run the action.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/320/medium800/sensors_SCR-20250827-lyyy.png?1756833138)

After running the action, the VPD Feed should show the calculated VPD value.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/321/medium800/sensors_SCR-20250902-lvvg.png?1756833260)

### Create an Action to Calculate PPFD

The next first measurement is Photon Flux Density, or PPFD. While PPFD is best measured using a PAR meter, it can be approximated using the Lux value read by the VEML7700 sensor.

The PPFD measurement is **produced by multiplying your lux measurement with a conversion factor**. The conversion factor varies depending on the light source.

For example, if the light source is sunlight, the conversion factor [(according to this website)](https://www.apogeeinstruments.com/conversion-ppfd-to-lux/) is 0.0185. So, multiply the VEML7700 sensor's lux measurement by 0.0185 to obtain a resulting PPFD value.

WipperSnapper doesn't allow you to do math directly on the Device Page so quickly assemble an Action to do this conversion and store it on a new feed called PPFD.

First, create a new feed to store the resulting PPFD value.

- Navigate to your&nbsp;[Feeds page](https://io.adafruit.com/feeds) 
- Click New Feed
- Name the new feed PPFD
- Click Create

![](https://cdn-learn.adafruit.com/assets/assets/000/139/195/medium640/sensors_SCR-20250827-lerp.png?1756311989)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/196/medium640/sensors_SCR-20250827-leuz.png?1756312001)

Next, navigate to [your Actions page](https://io.adafruit.com/actions).

- Click _+ New Action_
- Name the new feed,&nbsp;_Calculate PPFD_
- Click _Create_

&nbsp;

![](https://cdn-learn.adafruit.com/assets/assets/000/139/197/medium640/sensors_SCR-20250827-lfjq.png?1756312167)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/198/medium640/sensors_SCR-20250827-lfnd.png?1756312194)

After clicking create, you will be brought to the Actions Editor.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/199/medium800/sensors_SCR-20250827-lfrh.png?1756320379)

The simplest trigger - [any data](https://io.adafruit.com/actions-docs/blocks/triggers/when_data.html) - runs your Action every single time ANY new data arrives at a feed, regardless of what the value is.

Open the Block Toolbox by clicking on the Triggers

Select the any data block and drag it into your root block.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/200/medium640/sensors_SCR-20250827-lxok.png?1756321731)

After connecting the any block to the trigger section of the root block, change the feed to your VEML7700 light sensor.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/202/medium800/sensors_SCR-20250827-lxvr.png?1756322157)

The [Set Feed Value Block](https://io.adafruit.com/actions-docs/blocks/feeds/set_value.html) publishes a data point to a Feed. You'll want to publish the calculated PPFD value to the PPFD feed.

- On the toolbox, click Feeds
- Click the Set Feed Value Block
- Connect the Set Feed Value Block to the Actions block.

&nbsp;

![](https://cdn-learn.adafruit.com/assets/assets/000/139/206/medium640/sensors_SCR-20250827-nqbw.png?1756322731)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/207/medium640/sensors_SCR-20250827-nqju.png?1756322832)

The [arithmetic block](https://io.adafruit.com/actions-docs/blocks/math/arithmetic.html) can perform mathematical calculations using sensor data, feed values, or any numbers. You will use it to calculate the PPFD value.

- On the Toolbox, click Math
- Click the arithmetic block
- Connect the arithmetic block to the right-hand side of the Set Feed Value Block.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/203/medium640/sensors_SCR-20250827-lyal.png?1756322275)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/208/medium640/sensors_SCR-20250827-nrmv.png?1756322919)

The [Get Feed Value block](https://io.adafruit.com/actions-docs/blocks/feeds/get_value.html) obtains the last value of a feed or component. You will use to to get the lux measurement from the VEML7700.

- On the toolbox, click _Feeds_
- Select the _Get Feed Value_ Block
- Connect the _Get Feed Value_ block to the left-hand side of the _arithmetic_ block.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/209/medium640/sensors_SCR-20250827-ohdz.png?1756325563)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/211/medium640/sensors_SCR-20250827-ogad.png?1756325600)

On the arithmetic block, change the operation to multiplication. Then enter `0.0185` (the conversion factor) on the right-hand side of the arithmetic block.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/213/medium800/sensors_SCR-20250827-oimc.png?1756325822)

Pause here and verify your diagram looks like the following image:

![](https://cdn-learn.adafruit.com/assets/assets/000/139/214/medium800/sensors_SCR-20250827-ojcu.png?1756325867)

Above the diagram, click _Save and Run_.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/215/medium800/sensors_SCR-20250827-ojgx.png?1756325896)

Enable the Action and run it.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/216/medium800/sensors_SCR-20250827-lyyy.png?1756325933)

Check that the run report shows a successful run, indicated by **Validation: Succeeded**.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/217/medium800/sensors_SCR-20250827-ojpo.png?1756325958)

If validation succeeded, the Action's output is saved on the PPFD feed.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/218/medium800/sensors_SCR-20250827-oket.png?1756326057)

# No-Code Indoor Grow Monitor with PPFD and VPD Measurements

## Build an Adafruit IO Dashboard

Adafruit IO Dashboards start out as a blank webpage. From this page, you can add blocks to create an dynamic (no more staring at static charting dashboards!) interactive webpage to interact with (or view) this grow monitor electronics project. You can also share this dashboard with friends, classmates, students, or colleagues.

For more info about Adafruit IO Dashboards, check out the guide below.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/165/medium640/temperature___humidity_dashboard-screen.jpg?1759501952)

### Adafruit IO Basics: Dashboards - Overview

[Adafruit IO Basics: Dashboards](https://learn.adafruit.com/adafruit-io-basics-dashboards)
[Overview](https://learn.adafruit.com/adafruit-io-basics-dashboards/overview)
## Create a new Dashboard

When you log in to your&nbsp;[io.adafruit.com](https://io.adafruit.com/)&nbsp;account, you will be directed to your account overview page. Click the&nbsp; **Dashboards** &nbsp;link in the header to navigate to the "dashboards" page.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/326/medium800/sensors_adafruit_io_IO_-_Overview.png?1756837908)

Your list of dashboards will only have the&nbsp;_Welcome Dashboard_&nbsp;when it is first loaded. You can start the dashboard creation process by clicking the&nbsp; **New Dashboard** &nbsp;button.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/327/medium800/sensors_adafruit_io_Cursor_and_IO_-_Dashboards_New_dash.png?1756837921)

Enter the name and description of your new dashboard, then, click the&nbsp; **Create** button once you are finished.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/330/medium800/sensors_SCR-20250902-mxtx.png?1756837985)

Once the new dashboard has been created, click on the name of your new dashboard to visit its page.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/333/medium800/sensors_SCR-20250902-mygl.png?1756838050)

You should now see your new, blank, dashboard.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/334/medium800/sensors_SCR-20250902-mymk.png?1756838084)

## Add Gauge Block for VPD

Next, add a block to your dashboard. Blocks are widgets that you can add to your dashboard.

The block you want to use to quickly display VPD is the Gauge Block. The gauge block allows you to quickly view the current value of a numeric feed, like the calculated VPD feed. The gauge will update automatically whenever a new value is pushed to the feed.

&nbsp;

To add a new block to your Dashboard,&nbsp; **click the New Block button on the top right of the dashboard page**.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/335/medium800/sensors_SCR-20250902-mzqz.png?1756838300)

From the New Block pop-up, select the Gauge Block

On the pop-up modal, select the Gauge Block. Then, click Next Step.

On the Connect a Feed page, search for "VPD" and select the VPD feed. Click Next Step.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/338/medium640/sensors_SCR-20250902-mzyn.png?1756838452)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/339/medium640/sensors_SCR-20250902-nakn.png?1756838477)

Next, you'll need to configure the gauge block.

- Set the Block Title to _VPD_

The VPD can range from 0-2kPa.&nbsp;

- Set the Gauge Min. Value to 0
- Set the Gauge Max Value to 2
- Set the Gauge Label to _kPA_

The minimum alert level is when the VPD falls under 0.4kPa and the maximum alert level is if the VPD goes over 1.7kPa. These are configurable values, you can set them according to your horticultural requirements.

- Set the Low Warning Value to 0.4kPa
- Set the High Warning Value to 1.7kPa

Finally, let's give the gauge a graphic.

- Click "Show Icon" and search for the&nbsp;_leaf&nbsp;_

Click Create Block

![](https://cdn-learn.adafruit.com/assets/assets/000/139/340/medium640/sensors_SCR-20250902-nbyp.png?1756838717)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/341/medium640/sensors_SCR-20250902-ncdy.png?1756838736)

Your dashboard should look like the following screenshot.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/342/medium800/sensors_SCR-20250902-ndxh.png?1756838997)

## Add a Gauge Block for PPFD

Repeat the steps above to add a gauge to display the PPFD value. You can use the Edit Layout Button to move the blocks around.

Your dashboard should look similar to the screenshot below.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/348/medium800/sensors_SCR-20250902-nfoo.png?1756839299)

## Add a Line Chart Block

The line graph block allows you to visualize numeric data over time.&nbsp;The line chart is used to graph one or more feeds.&nbsp;You can set the time range in hours that the chart will load, and set the labels for each axis of the chart. The chart will update dynamically whenever new values are pushed to the feed.

You will use it to track the temperature and humidity over time.

Click New Block

Select the Line Chart Block

Under the QT Py, select the following feeds:

- MLX 90632 Measured Object Temperature
- SCD40: Temperature Sensor
- SCD40: Humidity Sensor

Configure the block's settings and click Create Block.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/351/medium640/sensors_SCR-20250902-ngld.png?1756839918)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/352/medium640/sensors_SCR-20250902-ngrr.png?1756839937)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/353/medium640/sensors_SCR-20250902-ngww.png?1756839950)

Your dashboard should look similar to the screenshot below. Keep in mind that you can edit the dashboard at any time.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/361/medium800/sensors_SCR-20250902-npge.png?1756840934)

# No-Code Indoor Grow Monitor with PPFD and VPD Measurements

## Assembly

## Connect Sensors

Use the short (50mm length) STEMMA QT cables to connect the various sensors together.

Use the longer (100mm length) STEMMA QT cable to connect the QT Py ESP32-S3.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/954/medium640/connect-sensors.jpg?1758808082)

## Install QT Py

Orient the QT Py's USB-C Port with the mounting tabs on 3D printed holder.

Insert the QT Py into the holder at an angle so one side of the PCB are fitted under the corner tabs.

Then, slightly flex the holder to allow the other side of the PCB to fit under the corner tabs.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/955/medium640/sensors_qtpy-holder.jpg?1758808102)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/956/medium640/sensors_qtpy-holder-installing.jpg?1758808122)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/957/medium640/sensors_qtpy-holder-installed.jpg?1758808135)

## Installed QT Py

Check the PCB is fitted under all four corners on the 3D printed holder.&nbsp;

Take a moment to ensure the QT Py is in the correct orientation and the STEMMA QT cable is connected.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/980/medium640/sensors_qtpy-holder-fitted.jpg?1758810624)

## Secure QT PY Holder

Place the QT PY holder over two mounting holes on the QT Py mounting plate (either side, holes are symmetrical).

Insert and fasten two M3 x 6mm long screws. Secure the parts together using M3 hex nuts.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/958/medium640/sensors_qtpy-holder-mplate-screws.jpg?1758808152)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/960/medium640/sensors_qtpy-holder-mplate-fasten.jpg?1758808183)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/961/medium640/sensors_qtpy-holder-mplate-secure.jpg?1758808193)

## Sensor Mount

Get the 3D printed sensor mount, sensors and hardware screws ready to assemble.

- 6x M2.5 x 6mm long machine screws

![](https://cdn-learn.adafruit.com/assets/assets/000/139/962/medium640/sensors-mount-screws.jpg?1758808212)

## Secure SCD40

Place the SCD40 sensor onto the standoffs on the sensor mount. Reference the photo for the correct orientation

Insert and fasten two M2.5 x 6mm long machine screws to secure the SCD40 to the sensor mount.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/963/medium640/sensors_scd40-placement.jpg?1758808228)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/964/medium640/sensors_scd40-secure.jpg?1758808241)

## Secure MLX90632

Place the MLX90632 sensor onto the standoffs on the sensor mount. Reference the photo for the correct orientation.

Inert and fasten two M2.5 x 6mm long machine screws to secure the MLX90632 to the sensor mount.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/968/medium640/sensors_mlx-placement.jpg?1758808304)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/969/medium640/sensors_mlx-secure.jpg?1758808322)

## Secure VEML7700

Place the VEML7700 sensor onto the standoffs on the sensor mount. Reference the photo for the correct orientation.

Inert and fasten two M2.5 x 6mm long machine screws to secure the VEML7700 to the sensor mount.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/970/medium640/sensors_veml-placement.jpg?1758808347)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/971/medium640/sensors_veml-secured.jpg?1758808357)

## Secured PCBs

Take a moment to ensure the various PCBs have been properly secured to their 3D printed mounts.

Use the following hardware to secure the QT Py mounting plate to the sensor mount.

- 2x M3 x 6mm long machine screws

![](https://cdn-learn.adafruit.com/assets/assets/000/139/972/medium640/sensors_pcb-plate-screws.jpg?1758808373)

## Attach Mounting Plate

Place the QT Py mounting plate to the mounting tab on the sensor mount with the two mounting holes lined up.

Double check the orientation of the parts are correct following the assembly photo.

Insert and fasten two M3 x 6mm long machine screws to secure the parts together.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/973/medium640/sensors_pcb-sensor-mount-join.jpg?1758808392)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/974/medium640/sensors_pcb-sensor-mount-secure.jpg?1758808410)

## Connect QT Py to Sensors

Plug in the STEMMA QT cable from the QT Py to the available port on the SCD40 sensor.

Double check the placement of all the sensors and QT Py are in the correct orientation.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/975/medium640/sensors_qtpy-scd40-connect.jpg?1758808445)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/976/medium640/sensors_pcb-sensor-mount-assembled.jpg?1758808487)

## Install Sensors to Case

Orient the 3D printed case with the sensor mount assembly.

Insert the sensor mount assembly into the case with the four mounting holes lined up.

Double check the orientation of the parts are correct.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/977/medium640/sensors_pcbs-case-preinstall.jpg?1758808529)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/978/medium640/sensors_pcbs-case-installing.jpg?1758808694)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/979/medium640/sensors_pcbs-case-place.jpg?1758808716)

## Install Bottom Cover

Use the following hardware to secure the bottom cover to the case.

- 4x M3 x 16mm long machine screws

![](https://cdn-learn.adafruit.com/assets/assets/000/139/981/medium640/sensors_case-bottom-screws.jpg?1758814697)

## Secure Bottom Cover

Orient the bottom cover with the various sensors so the cutouts are lined up with the components.

Insert and fasten the four M3 x 16mm long machine screws to secure the bottom cover to the sensor mount and case.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/982/medium640/sensors_case-bottom-installed.jpg?1758815080)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/983/medium640/sensors_case-bottom-fasten.jpg?1758815182)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/984/medium640/sensors_case-bottom-secured.jpg?1758815208)

## Install Top Cover

Use the following hardware to secure the top cover to the case.

- 4x M3 x 6mm long machine screws

![](https://cdn-learn.adafruit.com/assets/assets/000/139/985/medium640/sensors_case-top-screws.jpg?1758815438)

## Secure Top Cover

Orient the top cover with the QT Py's USB-C port and place it onto the case with the four mounting holes lined up.

Insert and fasten the four M3 x 6mm long machine screws to secure the top cover to the case.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/987/medium640/sensors_case-top-installing.jpg?1758815503)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/989/medium640/sensors_case-top-fasten.jpg?1758815524)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/991/medium640/sensors_case-top-secured.jpg?1758815751)

## Install Hook

Insert a hook or elastic cord to the attachment hole on the top cover.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/992/medium640/sensors_hook-install.jpg?1758820507)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/993/medium640/sensors_hook-installed.jpg?1758820517)

## USB Power

Connect the USB-C cable to the QT Py. Then, connect the USB-C cable to a 5V power supply.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/994/medium640/sensors_usb-power.jpg?1758820553)

## Hanging Grow Monitor

Depending on your setup, you'll want to decide how to suspend your grow monitor over your plant. Ideally, the sensors should be position above your plant.

![](https://cdn-learn.adafruit.com/assets/assets/000/139/995/medium640/sensors_hanging-upshot.jpg?1758820589)

![](https://cdn-learn.adafruit.com/assets/assets/000/139/996/medium800/sensors_hanging.jpg?1758820610 )

# No-Code Indoor Grow Monitor with PPFD and VPD Measurements

## Usage

Plug in the Grow Monitor to a USB C cable and power supply. The QT Py ESP32-S3 will receive power and automatically begin logging and sending data to Adafruit IO.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/046/medium800/sensors_usb-power.jpg?1759238692)

Over time, you'll see data from your sensor begin to populate your Adafruit IO Feeds and appear on your Adafruit IO Dashboard.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/047/medium640/sensors_hero-IO-dash.jpg?1759238722)

![](https://cdn-learn.adafruit.com/assets/assets/000/140/171/medium800/temperature___humidity_dashboard-screen.jpg?1759502251)

## Going Further

If you want to extend this project to add an email/SMS when the VPD or PPFD levels reach a certain value, you can follow our [Adafruit IO Actions Learning System Guide](https://learn.adafruit.com/how-to-use-blockly-for-actions-on-adafruit-io/example-actions) which has an example of this usage.

If you want to learn more about IO Actions and the available blocks, visit the IO Actions Documentation: [https://io.adafruit.com/actions-docs](https://io.adafruit.com/actions-docs/).


## Guide Products

### Adafruit QT Py S3 with 2MB PSRAM WiFi Dev Board with STEMMA QT

[Adafruit QT Py S3 with 2MB PSRAM WiFi Dev Board with STEMMA QT](https://www.adafruit.com/product/5700)
The ESP32-S3 has arrived in QT Py format - and what a great way to get started with this powerful new chip from Espressif! With dual 240 MHz cores, WiFi and BLE support, and native USB, this QT Py is great for powering your IoT projects. Now we even have this powerhouse of a board with built...

In Stock
[Buy Now](https://www.adafruit.com/product/5700)
[Related Guides to the Product](https://learn.adafruit.com/products/5700/guides)
### Adafruit MLX90632 FIR Remote Thermal Temperature Sensor

[Adafruit MLX90632 FIR Remote Thermal Temperature Sensor](https://www.adafruit.com/product/6403)
Remote infrared sensors are unique in their ability to measure something they are pointed at, but not touching, and we've been looking for a replacement for the [now-discontiued TMP007 for a few years](https://www.adafruit.com/product/2023). The&nbsp; **Adafruit MLX90632...**

In Stock
[Buy Now](https://www.adafruit.com/product/6403)
[Related Guides to the Product](https://learn.adafruit.com/products/6403/guides)
### Adafruit VEML7700 Lux Sensor - I2C Light Sensor

[Adafruit VEML7700 Lux Sensor - I2C Light Sensor](https://www.adafruit.com/product/4162)
Vishay has a lot of light sensors out there, and this is a nice simple lux sensor that's easy to add to any microcontroller. Most light sensors just give you a number for brighter/darker ambient lighting. The VEML7700 makes your life easier by calculating the lux, which is an SI unit for...

In Stock
[Buy Now](https://www.adafruit.com/product/4162)
[Related Guides to the Product](https://learn.adafruit.com/products/4162/guides)
### Adafruit SCD-40 - True CO2, Temperature and Humidity Sensor

[Adafruit SCD-40 - True CO2, Temperature and Humidity Sensor](https://www.adafruit.com/product/5187)
Take a deep breath in...now slowly breathe out. Mmm isn't it wonderful? All that air around us, which we bring into our lungs, extracts oxygen from and then breathes out carbon dioxide. CO2 is essential for life on this planet we call Earth - we and plants&nbsp;take turns using and...

In Stock
[Buy Now](https://www.adafruit.com/product/5187)
[Related Guides to the Product](https://learn.adafruit.com/products/5187/guides)
### STEMMA QT / Qwiic JST SH 4-Pin Cable - 50mm Long

[STEMMA QT / Qwiic JST SH 4-Pin Cable - 50mm Long](https://www.adafruit.com/product/4399)
This 4-wire cable is&nbsp;50mm / 1.9" long and fitted with JST SH female 4-pin connectors on both ends. Compared with the chunkier JST PH these are 1mm pitch instead of 2mm, but still have a nice latching feel, while being easy to insert and remove.

<a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/4399)
[Related Guides to the Product](https://learn.adafruit.com/products/4399/guides)
### STEMMA QT / Qwiic JST SH 4-pin Cable - 100mm Long

[STEMMA QT / Qwiic JST SH 4-pin Cable - 100mm Long](https://www.adafruit.com/product/4210)
This 4-wire cable is a little over 100mm / 4" long and fitted with JST-SH female 4-pin connectors on both ends. Compared with the chunkier JST-PH these are 1mm pitch instead of 2mm, but still have a nice latching feel, while being easy to insert and remove.

<a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/4210)
[Related Guides to the Product](https://learn.adafruit.com/products/4210/guides)
### Blue USB Type C to USB A Cable with 540 Degree Rotating End

[Blue USB Type C to USB A Cable with 540 Degree Rotating End](https://www.adafruit.com/product/6278)
Some days we're feeling extra fancy here at the 'fruit warehouse, and we have a big soft spot for colorful&nbsp;cables that make our projects look like Transformers. Like, peep [this fully reversible pink/purple Blinka-inspired cable](https://www.adafruit.com/product/4111)....

Out of Stock
[Buy Now](https://www.adafruit.com/product/6278)
[Related Guides to the Product](https://learn.adafruit.com/products/6278/guides)
### Black Nylon Machine Screw and Stand-off Set – M2.5 Thread

[Black Nylon Machine Screw and Stand-off Set – M2.5 Thread](https://www.adafruit.com/product/3299)
Totaling 380 pieces, this **M2.5 Screw Set** &nbsp;is a must-have for your workstation.&nbsp;You'll have enough screws, nuts, and hex standoffs to fuel your maker tendencies&nbsp;for days on end! M2.5 size screws fit almost all of the Adafruit breakout/dev board mounting holes...

In Stock
[Buy Now](https://www.adafruit.com/product/3299)
[Related Guides to the Product](https://learn.adafruit.com/products/3299/guides)

## Related Guides

- [Adafruit VEML7700 Ambient Light Sensor](https://learn.adafruit.com/adafruit-veml7700.md)
- [Adafruit SCD-40 and SCD-41](https://learn.adafruit.com/adafruit-scd-40-and-scd-41.md)
- [Adafruit QT Py ESP32-S3](https://learn.adafruit.com/adafruit-qt-py-esp32-s3.md)
- [Adafruit MLX90632 FIR Remote Thermal Temperature Sensor](https://learn.adafruit.com/adafruit-mlx90632-fir-remote-thermal-temperature-sensor.md)
- [Holiday Tree with Feather RP2040 Scorpio](https://learn.adafruit.com/holiday-tree-with-scorpio.md)
- [LEGO Set Lighting](https://learn.adafruit.com/lego-set-lighting.md)
- [BLE Light Switch with Feather nRF52840 and Crickit](https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840.md)
- [Getting Started with Microsoft Azure and CircuitPython](https://learn.adafruit.com/getting-started-with-microsoft-azure-and-circuitpython.md)
- [Monster Matrix with WLED](https://learn.adafruit.com/monster-matrix-with-wled.md)
- [LED Matrix FIFA World Cup Scoreboard](https://learn.adafruit.com/led-matrix-fifa-world-cup-scoreboard.md)
- [16-Step Drum Sequencer](https://learn.adafruit.com/16-step-drum-sequencer.md)
- [MatrixPortal CircuitPython Animated Message Board](https://learn.adafruit.com/matrixportal-circuitpython-animated-message-board.md)
- ["Mother of all Demos" USB Keyset](https://learn.adafruit.com/usb-keyset.md)
- [Animatronic Cosplay Wings](https://learn.adafruit.com/animatronic-cosplay-wings.md)
- [Sailor Moon Star Locket](https://learn.adafruit.com/sailor-moon-star-locket.md)
- [Adafruit Fruit Jam](https://learn.adafruit.com/adafruit-fruit-jam.md)
- [MagTag Case](https://learn.adafruit.com/magtag-case.md)
- [Guitar Synth with CircuitPython SynthIO](https://learn.adafruit.com/guitar-synth-with-circuitpython-synthio.md)
- [Adafruit RP2040 CAN Bus Feather](https://learn.adafruit.com/adafruit-rp2040-can-bus-feather.md)
