[{"element_type":"text","content":"\n  \n  \n  \n        \u003cp\u003eIf you've wanted to display sensor readings on your device running WipperSnapper, you're in luck! The Adafruit IO development team has been cooking up a new feature that fits perfectly with\u0026nbsp;\u003ca href=\"https://blog.adafruit.com/2025/05/30/more-action-blocks-and-the-new-playground-link-whats-new-with-adafruit-io-and-the-adafruit-learning-system/\"\u003ethe new Block-based Actions system on Adafruit IO\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe process for setting up a display on a development board running WipperSnapper is simple, there is no coding or soldering - you just click!\u0026nbsp;\u003c/p\u003e\n\u003cp\u003eTo demonstrate this, let's walk through the process together by building a sensor node to monitor a greenhouse.\u003c/p\u003e\n      \n\n\n","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch2\u003eParts\u003c/h2\u003e\n\u003cp\u003e\u003cspan\u003eWipperSnapper Firmware supports a wide variety of different boards from Adafruit and others\u003c/span\u003e. For this greenhouse monitor, we'll be using the Adafruit Feather ESP32-S2 since it has a \u003cstrong\u003eLiPoly battery monitor\u003c/strong\u003e\u003cspan\u003e (LC709203 chip), native USB, and 4 MB flash + 2 MB of PSRAM.\u003c/span\u003e\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"product","content":"https://www.adafruit.com/product/5000","metadata":{}},{"element_type":"text","content":"\n  \n  \n        \u003cp\u003eThe Bosh BME688 is \u003cem\u003eperfect\u003c/em\u003e for this greenhouse monitoring project as it provides \u003cstrong\u003etemperature\u003c/strong\u003e\u003cspan\u003e,\u0026nbsp;\u003c/span\u003e\u003cstrong\u003ehumidity\u003c/strong\u003e\u003cspan\u003e,\u0026nbsp;\u003c/span\u003e\u003cstrong\u003ebarometric pressure,\u003c/strong\u003e\u003cspan\u003e\u0026nbsp;and\u0026nbsp;\u003c/span\u003e\u003cstrong\u003eVOC gas\u003c/strong\u003e\u003cspan\u003e sensing capabilities in a sub-$20 package.\u003c/span\u003e\u003c/p\u003e\n\u003cp\u003e\u003cspan\u003eIf you want to use a different sensor, WipperSnapper firmware supports 104 different types of components.\u0026nbsp;\u003c/span\u003e\u003c/p\u003e\n      \n\n","metadata":{}},{"element_type":"product","content":"https://www.adafruit.com/product/5046","metadata":{}},{"element_type":"text","content":"\n  \n  \n        \u003cp\u003eI selected the \"Monochrome 1.3\" 128x64 OLED graphic display\" for this project because\u003cspan\u003e the display makes its own light, no backlight is required. This reduces the power required to run the OLED.\u003c/span\u003e\u003c/p\u003e\n\u003cp\u003e\u003cspan\u003eAt the time of release, WipperSnapper supports the following display components:\u003c/span\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eOLED Displays with I2C:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://www.adafruit.com/product/938\"\u003e\u003cspan\u003eMonochrome 1.3\" 128x64 OLED graphic display - STEMMA QT / Qwiic\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.adafruit.com/product/4440\"\u003e\u003cspan class=\"\"\u003eMonochrome 0.91\" 128x32 I2C OLED Display - STEMMA QT / Qwiic\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003ca href=\"https://www.adafruit.com/product/326\"\u003e\u003cspan class=\"\"\u003eMonochrome 0.96\" 128x64 OLED Graphic Display - STEMMA QT\u003c/span\u003e\u003cspan\u003e\u0026nbsp;\u003c/span\u003e\u003cspan class=\"product_id\"\u003ePID: 326\u003c/span\u003e\u003c/a\u003e\u003cspan class=\"product_id\"\u003e\u003c/span\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cspan class=\"product_id\"\u003eLED Displays with I2C Backpacks:\u003c/span\u003e\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://www.adafruit.com/product/1911\"\u003e\u003cspan class=\"\"\u003eQuad Alphanumeric Display - Red 0.54\" Digits w/ I2C Backpack - STEMMA QT / Qwiic\u003c/span\u003e\u003cspan\u003e\u0026nbsp;\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.adafruit.com/product/5601\"\u003e\u003cspan class=\"product_id\"\u003e\u003cspan class=\"\"\u003eAssembled Adafruit 0.56\" 4-Digit 7-Segment Display - I2C Backpack - STEMMA QT\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003ca href=\"https://www.adafruit.com/product/292\"\u003e\u003cspan class=\"product_id\"\u003e\u003cspan class=\"\"\u003ei2c / SPI character LCD backpack - STEMMA QT / Qwiic\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan class=\"product_id\"\u003e\u003cspan class=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cspan class=\"product_id\"\u003e\u003cspan class=\"\"\u003eCharacter LCD Displays with I2C Backpacks:\u003c/span\u003e\u003c/span\u003e\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://www.adafruit.com/product/1447\"\u003e\u003cspan class=\"product_id\"\u003e\u003cspan class=\"\"\u003eAssembled Standard LCD 16x2\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.adafruit.com/product/399\"\u003e\u003cspan class=\"product_id\"\u003e\u003cspan class=\"\"\u003eRGB backlight negative LCD 16x2\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.adafruit.com/product/198\"\u003e\u003cspan class=\"product_id\"\u003e\u003cspan class=\"\"\u003eStandard LCD 20x4\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.adafruit.com/product/398\"\u003e\u003cspan class=\"product_id\"\u003e\u003cspan class=\"\"\u003eRGB backlight positive LCD 16x2\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n      \n\n","metadata":{}},{"element_type":"product","content":"https://www.adafruit.com/product/938","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eYou may also want a Lithium Ion Battery Pack if you are running this in an outdoor greenhouse with no electrical hookups.\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"product","content":"https://www.adafruit.com/product/354","metadata":{"name":"Lithium Ion Battery Pack - 3.7V 4400mAh","url":"https://www.adafruit.com/product/354","description":"Lithium Ion Battery Pack - 3.7V 4400mAh","quantity":"1","featured":false}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch2\u003eAssembly\u003c/h2\u003e\n\u003cp\u003eUsing \u003ca href=\"https://www.adafruit.com/product/4399\"\u003etwo STEMMA QT to STEMMA QT\u003c/a\u003e cables, make the following connections:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eConnect the \u003cstrong\u003eBME688's Stemma QT port\u003c/strong\u003e to the \u003cstrong\u003eFeather ESP32-S2's STEMMA QT Port\u003c/strong\u003e\n\u003c/li\u003e\n\u003cli\u003eConnect the \u003cstrong\u003eMonochrome 128x64 OLED's STEMMA QT port\u003c/strong\u003e to the \u003cstrong\u003eBME688's Stemma QT Port\u003c/strong\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch2\u003eInstall WipperSnapper and Connect to Adafruit IO\u003c/h2\u003e\n\u003cp\u003eFor the ESP32-S2 Feather, \u003ca href=\"https://learn.adafruit.com/adafruit-esp32-s2-feather/wippersnapper-setup\"\u003efollow along with this Learn Guide for instructions to install WipperSnapper firmware\u003c/a\u003e.\u0026nbsp;Once you've got your board connected to Adafruit IO, continue with this page.\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"text","content":"\n  \n        \u003ch2\u003eAdd the Display on Adafruit IO\u003c/h2\u003e\n\u003cp\u003eTo add the \u003cstrong\u003eMonochrome 128x64 OLED\u0026nbsp;\u003c/strong\u003eto your Adafruit ESP32-S2 Feather, navigate to the device page. \u003cstrong\u003eClick the \"+\" \u003c/strong\u003eto bring up the component picker.\u003c/p\u003e\n      \n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/848/original/SCR-20250609-maur.png?1749492758","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eOn the Component Picker, Search for the 128x64 OLED and \u003cstrong\u003eselect the 128x64 OLED (Default) component\u003c/strong\u003e. This component uses the default font size. If you want a larger font size, you can select the 128x64 OLED (Large Font).\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/849/original/SCR-20250609-mbex.png?1749492768","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003e\u003cstrong\u003eClick\u003c/strong\u003e Create Component.\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/850/original/SCR-20250609-mbhe.png?1749492778","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eThe 128x64 OLED component should appear on your device page. We are not going to manually update the display, we'll talk about that later in this note.\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/851/original/SCR-20250609-mbne.png?1749492790","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch2\u003eAdd the BME688 on Adafruit IO\u003c/h2\u003e\n\u003cp\u003eRepeat the workflow above to add the BME688 on your device.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eNote\u003c/strong\u003e: The BME688 can produce up to 6 data streams from its sensors and 6 corresponding Adafruit IO Feeds to store this data. As you add components, please keep in mind that Adafruit IO Free accounts are \u003cem\u003elimited to 10 feeds per account.\u003c/em\u003e\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/852/original/SCR-20250609-myer.png?1749494046","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch2\u003eAdd the Feather's Battery Sensor\u003c/h2\u003e\n\u003cp\u003eThe Feather ESP32-S2 has a built-in chip to monitor battery level, the LC709203F. If you want to monitor the Feather's battery level on the display, repeat the workflow to add a \u003cstrong\u003e\u003cem\u003eLC709203F\u003c/em\u003e\u003c/strong\u003e\u003cem\u003e\u0026nbsp;\u003c/em\u003ebattery sensor to the Feather.\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/853/original/SCR-20250609-mzrf.png?1749494327","metadata":{}},{"element_type":"text","content":"\n  \n        \u003ch2\u003eAdd a New Adafruit IO Action\u003c/h2\u003e\n\u003cp\u003e\u003cspan\u003eNext, we'll use Adafruit IO’s new (Blockly-based) Actions to show the values of the sensors on the OLED display.\u003c/span\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://learn.adafruit.com/how-to-use-blockly-for-actions-on-adafruit-io\"\u003e\u003cspan\u003eIf you do not know what Adafruit IO Actions are - check out this guide here \u0026gt;\u0026gt;\u0026gt;\u0026nbsp;\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eNavigate to the Actions page on Adafruit IO, create a new action, and give it a name (I named mine \u003cem\u003eGreenhouse Monitor\u003c/em\u003e).\u003c/p\u003e\n      \n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/854/original/SCR-20250609-onzu.png?1749501143","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eAt this point, your Actions diagram should look like the following.\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/856/original/SCR-20250609-osxw.png?1749502635","metadata":{}},{"element_type":"text","content":"\n        \u003cp\u003eLet's make this diagram's Actions field execute every time the temperature sensor reads new data.\u003c/p\u003e\n\u003cp\u003eTo do this, expand the Block Toolbox by clicking \u003cstrong\u003eTriggers\u003c/strong\u003e and\u0026nbsp;\u003cstrong\u003eselect \u003c/strong\u003ethe \u003cem\u003eWhen [feed] gets any data\u003c/em\u003e block.\u0026nbsp;\u003cstrong\u003eClick the dropdown to select\u003c/strong\u003e \u003cstrong\u003ethe\u003c/strong\u003e BME688's temperature sensor \u003cstrong\u003efeed\u003c/strong\u003e.\u003c/p\u003e\n      ","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/857/original/SCR-20250610-ixzo.png?1749562820","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eNext, we'll want to show sensor data on the OLED display. The display's \"content\" is represented as an\u0026nbsp;\u003ca href=\"https://learn.adafruit.com/adafruit-io-basics-feeds/overview\"\u003eAdafruit IO Feed\u003c/a\u003e. Writing to the display's feed changes whats shown on the display. The sensor's data is also stored in Adafruit IO feeds.\u003c/p\u003e\n\u003cp\u003eTherefore, to show the sensor data on the display, we'll need to write the feed values \u003cem\u003efrom\u003c/em\u003e the sensors \u003cem\u003eto\u003c/em\u003e the display's feed.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eOpen the toolbox\u003c/strong\u003e by clicking the Feeds category. \u003cstrong\u003eClick\u003c/strong\u003e the \u003cem\u003eSet Feed to ... \u003c/em\u003eblock and \u003cstrong\u003edrag it to your diagram's Triggers block\u003c/strong\u003e.\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/858/original/SCR-20250610-jkwc.png?1749565022","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eUpdate the feed in the Set Feed Block to match OLED's feed.\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/859/original/SCR-20250610-mtng.png?1749579644","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eAfter the \u003cem\u003eto:\u003c/em\u003e is a small block that takes in a string of text. This \u003cem\u003ebasic \u003c/em\u003eblock sets what is shown on the OLED. While this block is perfect for displaying a string like \u003cem\u003e\"hello world!\"\u003c/em\u003e, it lacks the ability to display values from a feed.\u003c/p\u003e\n\u003cp\u003eLet's replace this block with a more advanced block - the Template Block. This block uses the \u003ca href=\"https://shopify.github.io/liquid/\"\u003eLiquid Template Engine\u003c/a\u003e to render text. It's capable of loading dynamic content (such as your feed's values) into a text string.\u003c/p\u003e\n\u003cp\u003eTo add this block, expand the Block Toolbox by clicking\u003cspan\u003e\u0026nbsp;\u003c/span\u003e\u003cstrong\u003eText\u003c/strong\u003e\u003cspan\u003e\u0026nbsp;\u003c/span\u003eand\u0026nbsp;\u003cstrong\u003eselect\u003cspan\u003e\u0026nbsp;\u003c/span\u003e\u003c/strong\u003ethe Template Block with the \u003ccode\u003e{{\u003c/code\u003e label. Drag it to the right-hand side of the Set Feed Block to replace the existing text block.\u003c/p\u003e\n\u003cp\u003eYour diagram should look like the following:\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/860/original/SCR-20250610-mvnx.png?1749581206","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eThere are a few tricks for how to format data for a display with the Template Block:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBy default, a string displays from left to right, and wraps around the display until it hits the display's character limit.\u003c/li\u003e\n\u003cli\u003eYou can set which line to display text on by adding the \u003ccode\u003e\\n\u003c/code\u003e character to your string.\u003c/li\u003e\n\u003cli\u003eYou can use a \"template\" to reference values on a feed, like the values from the BME688's temperature sensor sensor.\n\u003cul\u003e\n\u003cli\u003eThe feed's key needs to be referenced for this, we'll talk about it in a bit.\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e\u003cspan\u003e{{ feeds[\"feather-esp32s244138148.ws-0x77-ambient-temp-fahrenheit\"].value }}\u003c/span\u003e\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003e\u003cspan\u003eVoltage: {{ feeds[\"feather-esp32s244138148.ws-0xb-voltage\"].value | round: 3 }} v\u003c/span\u003e\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch3\u003eDisplaying Feed Values on a Display Component\u003c/h3\u003e\n\u003cp\u003eThe template block (\u003ccode\u003e{{\u003c/code\u003e) can \u003cspan\u003ereference values on a feed, like the values from the BME688's temperature sensor sensor.\u003c/span\u003e\u003c/p\u003e\n\u003cp\u003e\u003cspan\u003eTo do this, we'll need the feed's \u003cstrong\u003ekey\u003c/strong\u003e. This can be found by navingating to the Feeds page on Adafruit IO and clicking on the name of the feed to display.\u003c/span\u003e\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/861/original/SCR-20250610-ntbx.png?1749584043","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eOn the feed page, click Feed Info\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/863/original/SCR-20250610-nvil.png?1749586564","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eClick \"Show detailed feed JSON record\" to reveal the feed key.\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/864/original/SCR-20250610-nvll.png?1749586648","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eThe feed key is underneath the key field in the JSON record. The feed key for my Feather's temperature sensor is:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003efeather-esp32s244138148.ws-0x77-ambient-temp-fahrenheit\u003c/code\u003e\u003c/pre\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/865/original/SCR-20250610-oiwk.png?1749586674","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eNow that we have the feed key, we can add it to the Template Block.\u003c/p\u003e\n\u003cp\u003eTo display the temperature on the display as \"TEMP: {feed value}\u003cspan\u003e°F\"\u003c/span\u003e, you'd add the following line to the template block:\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003e\u003cspan\u003eTEMP: {{ feeds[\"feather-esp32s244138148.ws-0x77-ambient-temp-fahrenheit\"].value }}°F\u003c/span\u003e\u003c/code\u003e\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/866/original/SCR-20250610-okkf.png?1749586887","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eOn the top of the diagram, click \"Save and Run\". Then click \"Enable, Save and Run\" to enable the action to run whenever the BME688 temperature sensor gets new data.\u003c/p\u003e\n\u003cp\u003eThe run report should show the text and include the last value sent by the sensor.\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/867/original/SCR-20250610-okzq.png?1749586998","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eSee how the temperature value has 16 precision points (numbers after the decimal)? While displaying the full value is accurate, it may not fit on the OLED.\u003c/p\u003e\n\u003cp\u003eTo round a feed value to a specific number of decimal places, use a \u003ca href=\"https://shopify.github.io/liquid/filters/round/\"\u003eround function\u003c/a\u003e in the template. The following line will round the temperature value to \u003cstrong\u003e2\u003c/strong\u003e decimal points:\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003e\u003cspan\u003eTEMP: {{ feeds[\"feather-esp32s244138148.ws-0x77-ambient-temp-fahrenheit\"].value | \u003cstrong\u003eround 2\u003c/strong\u003e}}°F\u003c/span\u003e\u003c/code\u003e\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eAfter the action runs, the string will look like the following:\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/868/original/SCR-20250610-ovip.png?1749588762","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eAnd you'll see the following output on the display:\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003e\u003cstrong\u003eTODO! Add picture of display\u003c/strong\u003e\u003c/p\u003e\n      \n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n        \u003cp\u003eNow that we have one of the BME688's value, let's also display a title for the project.\u003c/p\u003e\n\u003cp\u003eTo show strings on different lines of the display, use the newline (\u003ccode\u003e\\n\u003c/code\u003e) character.\u0026nbsp;\u003c/p\u003e\n\u003cp\u003eFor example, If I wanted the first line to read \u003cem\u003e\"GREENHOUSE MONITOR\"\u003c/em\u003e\u0026nbsp;and the second line to read \"\u003cem\u003eTEMP: 76F\u003c/em\u003e\", set the template block to:\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eGREENHOUSE MONITOR\\nTEMP: {{ feeds[\"feather-esp32s244138148.ws-0x77-ambient-temp-fahrenheit\"].value |\u0026nbsp;round 2}}°F\u003c/code\u003e\u003c/p\u003e\n      \n\n\n\n\n\n","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n        \u003cp\u003eOnce the Action runs, the display should show the two lines of text:\u003c/p\u003e\n      \n\n\n\n\n","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n        \u003cp\u003e\u003cstrong\u003eTODO: Add picture of display\u003c/strong\u003e\u003c/p\u003e\n      \n\n\n\n","metadata":{}}]