# Grill Thermometer Dashboard

## Overview

![](https://cdn-learn.adafruit.com/assets/assets/000/131/498/medium800/adafruit_io_grillthumb.jpg?1721773852)

Cook your meats and non-meats with ultimate instrumentation! The Grill Thermometer Dashboard lets you monitor common Bluetooth LE temperature probes over the internet -- thanks to the dual BLE/WiFi capabilities of the Feather ESP32-S3 board!

Keep an eye on the grill temperatures from the comfort of your air conditioned home on your computer -- or on your phone while you soak in the pool! Any internet capable device can be used to monitor your Adafruit IO web-based dashboard.

Simple CircuitPython code allows you to grab the temperatures reported over Bluetooth and pass them along to an Adafruit IO dashboard via MQTT on your WiFi network.

What time is it? Grilled foods time.

## Parts
### Adafruit ESP32-S3 Feather with STEMMA QT / Qwiic

[Adafruit ESP32-S3 Feather with STEMMA QT / Qwiic](https://www.adafruit.com/product/5323)
The ESP32-S3 has arrived in Feather 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 Feather is great for powering your IoT projects.

That's right - it's the new...

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

---

### or
### Adafruit ESP32-S3 Feather 8MB with w.FL Antenna

[Adafruit ESP32-S3 Feather 8MB with w.FL Antenna](https://www.adafruit.com/product/5885)
The ESP32-S3 has arrived in Feather 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,&nbsp;native USB,&nbsp;and with this version easy external antenna support thanks to an on-board **w.FL...**

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

### WiFi Antenna with w.FL / MHF3 / IPEX3 Connector

[WiFi Antenna with w.FL / MHF3 / IPEX3 Connector](https://www.adafruit.com/product/5445)
That's one slim cellular antenna! At about 220mm long from tip to tip and with a cable thickness of just 0.8mm, this 2.4GHz WiFi or BLE antenna is slim,&nbsp;compact, and sensitive, with a 4dBi gain.&nbsp;The antenna is the trace on the PCB that is at the end of the skinny coaxial cable....

In Stock
[Buy Now](https://www.adafruit.com/product/5445)
[Related Guides to the Product](https://learn.adafruit.com/products/5445/guides)
![Angled shot of red rectangular antenna with wFL connector.](https://cdn-shop.adafruit.com/640x480/5445-01.jpg)

---

### Lithium Ion Polymer Battery - 3.7v 1200mAh

[Lithium Ion Polymer Battery - 3.7v 1200mAh](https://www.adafruit.com/product/258)
Lithium-ion polymer (also known as 'lipo' or 'lipoly') batteries are thin, light, and powerful. The output ranges from 4.2V when completely charged to 3.7V. This battery has a capacity of 1200mAh for a total of about 4.5 Wh. If you need a larger battery, <a...></a...>

Out of Stock
[Buy Now](https://www.adafruit.com/product/258)
[Related Guides to the Product](https://learn.adafruit.com/products/258/guides)
![Lithium Ion Polymer Battery 3.7v 1200mAh with JST 2-PH connector](https://cdn-shop.adafruit.com/640x480/258-02.jpg)

### Breadboard-friendly SPDT Slide Switch

[Breadboard-friendly SPDT Slide Switch](https://www.adafruit.com/product/805)
These nice switches are perfect for use with breadboard and perfboard projects. They have 0.1" spacing and snap in nicely into a solderless breadboard. They're easy to switch no matter what size fingers you have, but not so easy that they'll get flipped by accident. Work great as...

In Stock
[Buy Now](https://www.adafruit.com/product/805)
[Related Guides to the Product](https://learn.adafruit.com/products/805/guides)
![Small, black, SPDT slide switch.](https://cdn-shop.adafruit.com/640x480/805-03.jpg)

### Bluetooth BBQ Thermometer

You'll need a Bluetooth BBQ thermometer such as the one seen [here](https://inkbird.com/collections/wireless-thermometers/products/bluetooth-bbq-thermometer-idt-34c-b) that uses the iBBQ BLE service -- most manufacturers don't advertise which service they use, but this is a very common one.

InkBird and EasyBBQ from PyleUSA are brands to look for.

![adafruit_io_ink.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/274/medium640/adafruit_io_ink.jpg?1721086554)

# Grill Thermometer Dashboard

## CircuitPython

[CircuitPython](https://github.com/adafruit/circuitpython) is a derivative of [MicroPython](https://micropython.org) designed to simplify experimentation and education on low-cost microcontrollers. It makes it easier than ever to get prototyping by requiring no upfront desktop software downloads. Simply copy and edit files on the **CIRCUITPY** drive to iterate.

## CircuitPython Quickstart

Follow this step-by-step to quickly get CircuitPython running on your board.

Warning: 

Below are links to CircuitPython for the **Feather ESP32-S3 8MB No PSRAM** and the **Feather ESP32-S3 4MB Flash 2MB PSRAM.** Be sure to choose the one that matches your board.

[Download the latest version of CircuitPython for the Feather ESP32-S3 8MB Flash No PSRAM via circuitpython.org](https://circuitpython.org/board/adafruit_feather_esp32s3_nopsram/)
[Download the latest version of CircuitPython for the Feather ESP32-S3 4MB Flash 2MB PSRAM via circuitpython.org](https://circuitpython.org/board/adafruit_feather_esp32s3_4mbflash_2mbpsram/)
 **Click the link above to download the latest CircuitPython UF2 file.**

Save it wherever is convenient for you.

![install_circuitpython_on_most_boards_CircuitPython_downloaded.jpg](https://cdn-learn.adafruit.com/assets/assets/000/102/129/medium640/install_circuitpython_on_most_boards_CircuitPython_downloaded.jpg?1620922559)

![](https://cdn-learn.adafruit.com/assets/assets/000/110/824/medium800/adafruit_products_FESP3_reset_neopixel.jpg?1649969747)

Plug your board into your computer, using a known-good data-sync cable, directly, or via an adapter if needed.

Double-click the **reset** button (highlighted in red above), and you will see the **RGB status LED(s)** turn green (highlighted in green above). If you see red, try another port, or if you're using an adapter or hub, try without the hub, or different adapter or hub.

For this board, tap reset and wait for the LED to turn purple, and as soon as it turns purple, tap reset again. The second tap needs to happen while the LED is still purple.

If you do not see the LED turning purple, you will need to reinstall the UF2 bootloader. See the&nbsp; **Factory Reset** &nbsp;page in this guide for details.

If double-clicking doesn't work the first time, try again. Sometimes it can take a few tries to get the rhythm right!

A lot of people end up using charge-only USB cables and it is very frustrating! **Make sure you have a USB cable you know is good for data sync.**

You will see a new disk drive appear called **FTHRS3BOOT**.

&nbsp;

&nbsp;

Drag the **adafruit\_circuitpython\_etc.uf2** file to **FTHRS3BOOT**.

![adafruit_products_FESP3_FTHRS3BOOT.png](https://cdn-learn.adafruit.com/assets/assets/000/110/825/medium640/adafruit_products_FESP3_FTHRS3BOOT.png?1649970050)

![adafruit_products_FESP3_drag_UF2.png](https://cdn-learn.adafruit.com/assets/assets/000/110/826/medium640/adafruit_products_FESP3_drag_UF2.png?1649970057)

The **BOOT** drive will disappear and a new disk drive called **CIRCUITPY** will appear.

That's it!

![install_circuitpython_on_most_boards_CIRCUITPY.jpg](https://cdn-learn.adafruit.com/assets/assets/000/102/130/medium640/install_circuitpython_on_most_boards_CIRCUITPY.jpg?1620923145)

# Grill Thermometer Dashboard

## Code the Grill Dashboard

## Text Editor

Adafruit recommends using the&nbsp; **Mu** &nbsp;editor for editing your CircuitPython code. You can get more info in&nbsp;[this guide](https://learn.adafruit.com/welcome-to-circuitpython/installing-mu-editor).

Alternatively, you can use any text editor that saves simple text files.

## Download the Project Bundle

Your project will use a specific set of CircuitPython libraries and the&nbsp; **code.py** &nbsp;file. To get everything you need, click on the&nbsp; **Download Project Bundle** &nbsp;link below, and uncompress the .zip file.

Drag the contents of the uncompressed bundle directory onto your board's&nbsp; **CIRCUITPY** &nbsp;drive, replacing any existing files or directories with the same names, and adding any new ones that are necessary.

![library](https://adafruit.github.io/Adafruit_Learning_System_Guides/Grill_Thermometer_Dashboard.png )

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/Grill_Thermometer_Dashboard/code.py

## How It Works

The code does two key things -- connect to a Bluetooth iBBQ device to receive data and connect to the Internet via WiFi to send data via MQTT to AIO feeds.

### Libraries

Import necessary libraries for WiFi connection, BLE communication, and MQTT for data transfer.

```auto
import os
import time
import adafruit_connection_manager
import wifi
import adafruit_minimqtt.adafruit_minimqtt as MQTT
import adafruit_ble
from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
from adafruit_ble_ibbq import IBBQService
```

### Environment Variables for Adafruit IO

Retrieve Adafruit IO username and key from environment variables from the **settings.toml** file.

```auto
aio_username = os.getenv("aio_username")
aio_key = os.getenv("aio_key")
```

### Connect to WiFi

Connect to WiFi using the SSID and password stored in **settings.toml** file.

```auto
print(f"Connecting to {os.getenv('CIRCUITPY_WIFI_SSID')}")
wifi.radio.connect(os.getenv("CIRCUITPY_WIFI_SSID"), os.getenv("CIRCUITPY_WIFI_PASSWORD"))
print(f"Connected to {os.getenv('CIRCUITPY_WIFI_SSID')}")
```

### Setup MQTT Feeds

Define functions to handle connection and disconnection events with the MQTT broker.

```auto
feeds = [aio_username + f"/feeds/bbq{i}" for i in range(1, 7)]
battery_feed = aio_username + "/feeds/bbq_battery"
```

### MQTT Callback Functions

Define functions to handle connection and disconnection events with the MQTT broker.

```auto
def connected(client, userdata, flags, rc):
    print("Connected to Adafruit IO")

def disconnected(client, userdata, rc):
    print("Disconnected from Adafruit IO")
```

### Create Socket Pool and SSL Context

Set up the socket pool and SSL context for secure MQTT communication.

```auto
pool = adafruit_connection_manager.get_radio_socketpool(wifi.radio)
ssl_context = adafruit_connection_manager.get_radio_ssl_context(wifi.radio)
connection_manager = adafruit_connection_manager.get_connection_manager(pool)
```

### Setup MQTT Client

Configure the MQTT client and connect it to the Adafruit IO broker.

```auto
mqtt_client = MQTT.MQTT(
    broker="io.adafruit.com",
    port=1883,
    username=aio_username,
    password=aio_key,
    socket_pool=pool,
    ssl_context=ssl_context,
)
mqtt_client.on_connect = connected
mqtt_client.on_disconnect = disconnected
print("Connecting to Adafruit IO...")
mqtt_client.connect()
```

### Initialize BLE Radio

Initialize the BLE radio for scanning and connecting to the BBQ thermometer.

```auto
ble = adafruit_ble.BLERadio()
```

### Helper Functions

There are three functions created here. One to convert Celsius to Fahrenheit, another to convert voltage to percentage, and one to check if a temperature probe is connected.

```auto
def c_to_f(temp_c):
    return (temp_c * 9/5) + 32

def volt_to_percent(voltage, max_voltage):
    return (voltage / max_voltage) * 100

def probe_check(temp):
    return temp if temp &lt;= 11000 else 0
```

### Main Loop

The main loop first scans for the BBQ thermometer, and then connects to it.

Next, it reads temperature and battery data, converts them to Farenheit and Voltage, respectively.

Then, it sends this data to Adafruit IO using MQTT, and repeats the process in a loop every five seconds.

```auto
while True:
    print("Scanning...")
    for adv in ble.start_scan(ProvideServicesAdvertisement, timeout=5):
        if IBBQService in adv.services:
            print("found an IBBq advertisement")
            ibbq_connection = ble.connect(adv)
            print("Connected")
            break
    ble.stop_scan()
    if ibbq_connection and ibbq_connection.connected:
        ibbq_service = ibbq_connection[IBBQService]
        ibbq_service.init()
        while ibbq_connection.connected:
            print("Temperatures:", ibbq_service.temperatures, "; Battery:", ibbq_service.battery_level)
            grill_vals = [probe_check(c_to_f(temp)) for temp in ibbq_service.temperatures]
            battery_val, battery_max = ibbq_service.battery_level
            battery_percentage = volt_to_percent(battery_val, 3.3)
            mqtt_client.loop(timeout=1)
            for feed, val in zip(feeds, grill_vals):
                print(f"Sending grill value: {val} to {feed}...")
                mqtt_client.publish(feed, val)
            mqtt_client.publish(battery_feed, battery_percentage)
            print("Sent")
            time.sleep(5)
```

On the next page follow the MQTT in CircuitPython guide to get your Adafruit IO account and feed set up.

# Grill Thermometer Dashboard

## Build the Grill Dashboard Feather Case

## Feather Prep

If you chose to use the external antenna version of the Feather ESP32-S3 carefully plug in the antenna connector now.

![adafruit_io_bbqbld-0343.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/342/medium640/adafruit_io_bbqbld-0343.jpg?1721423769)

![adafruit_io_bbqbld-0344.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/343/medium640/adafruit_io_bbqbld-0344.jpg?1721423820)

You can make a neat enclosure for your Grill Dashboard Feather, including optional battery and on/off switch.

This also gives you a neat mounting surface for the external antenna if you chose to use that version of the Feather board.

First, head to the **3D Printed Case for Adafruit Feather** [Learn Guide](https://learn.adafruit.com/3d-printed-case-for-adafruit-feather/overview).

Download the .zip file of the case models [here](http://www.thingiverse.com/thing:2209964).

Print these three models:

- **feather-case.stl**
- **feather-top.stl**
- **feather-bat-tab-switch.stl**

![adafruit_io_3d_printing_hero-cases-color-2.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/340/medium640/adafruit_io_3d_printing_hero-cases-color-2.jpg?1721338718)

![](https://cdn-learn.adafruit.com/assets/assets/000/131/341/medium800/adafruit_io_bbqbld-0341.jpg?1721423738)

## Enable Switch

Prep a short length of two conductor wire -- about 4" will do. You can shorten one wire about 1/2" for neater routing, although this step isn't strictly necessary.

Strip the insulation from the ends.

Solder the wires to the Feather **GND** and **En** (able) pins.

![adafruit_io_bbqbld-0345.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/344/medium640/adafruit_io_bbqbld-0345.jpg?1721423930)

![adafruit_io_bbqbld-0349.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/345/medium640/adafruit_io_bbqbld-0349.jpg?1721423986)

Feed the switch wires through the case top as shown. You can also plug in the battery to the Feather at this time.

![adafruit_io_bbqbld-0352.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/346/medium640/adafruit_io_bbqbld-0352.jpg?1721424017)

## Feather Fasteners

Use M2.5 screws and nuts to secure the Feather to the case as shown.

The non-plated holes at the right end of the Feather are technically M2, but you can screw metal screws directly into them without needing nuts if you don't want to scrounge up some M2 screws and nuts.

I mean, I literally had some right there in that assortment box and still didn't feel like bothering -- just don't snort up any fiberglass dust created by tapping the PCB with the oversized screws please.

![adafruit_io_bbqbld-0353.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/347/medium640/adafruit_io_bbqbld-0353.jpg?1721424184)

![adafruit_io_bbqbld-0355.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/348/medium640/adafruit_io_bbqbld-0355.jpg?1721424191)

![adafruit_io_bbqbld-0357.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/349/medium640/adafruit_io_bbqbld-0357.jpg?1721424200)

![adafruit_io_bbqbld-0360.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/350/medium640/adafruit_io_bbqbld-0360.jpg?1721424211)

![adafruit_io_bbqbld-0359.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/360/medium640/adafruit_io_bbqbld-0359.jpg?1721424263)

![adafruit_io_bbqbld-0359.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/359/medium640/adafruit_io_bbqbld-0359.jpg?1721424263)

![](https://cdn-learn.adafruit.com/assets/assets/000/131/356/medium800/adafruit_io_bbqbld-0359.jpg?1721424255)

## Switch Soldering

Tin the common and one side leg on the switch, do the same for the wires.

Add a bit of heat shrink tubing to the wires.

Solder the wires to the switch legs as shown -- polarity doesn't matter, since we're using the switch to ground the Enable pin.

Shrink the tubing with a heat gun, lighter, soldering iron barrel, scathing remark, or minor incantation.

![adafruit_io_bbqbld-0363.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/361/medium640/adafruit_io_bbqbld-0363.jpg?1721424537)

![adafruit_io_bbqbld-0364.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/362/medium640/adafruit_io_bbqbld-0364.jpg?1721424546)

## Switch Attachment

Use a small dab of CA glue to adhere the switch to the case.

![adafruit_io_bbqbld-0365.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/363/medium640/adafruit_io_bbqbld-0365.jpg?1721424634)

![adafruit_io_bbqbld-0366.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/364/medium640/adafruit_io_bbqbld-0366.jpg?1721424643)

![](https://cdn-learn.adafruit.com/assets/assets/000/131/366/medium800/adafruit_io_bbqbld-0367.jpg?1721424652)

## Battery Placement

Insert the battery in the bottom of the case, dressing the wires away from the edges to the middle case section can snap fit in place.

![adafruit_io_bbqbld-0369.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/370/medium640/adafruit_io_bbqbld-0369.jpg?1721424674)

![](https://cdn-learn.adafruit.com/assets/assets/000/131/380/medium800/adafruit_io_bbqbld-0370.jpg?1721425287)

## Antenna Mount

If you're using the external antenna version of the Feather ESP32-S3, remove the adhesive protective backing and stick it inside of the case lid as shown.

You can now close up the case.

![adafruit_io_bbqbld-0374.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/383/medium640/adafruit_io_bbqbld-0374.jpg?1721425318)

![adafruit_io_bbqbld-0376.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/384/medium640/adafruit_io_bbqbld-0376.jpg?1721425328)

![](https://cdn-learn.adafruit.com/assets/assets/000/131/387/medium800/adafruit_io_bbqbld-0377.jpg?1721425409)

## Feather Usage

Plug in USB C cable to code the Feather and charge the LiPoly battery.

Flip the switch to turn it on or off.

![adafruit_io_bbqbld-0381.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/393/medium640/adafruit_io_bbqbld-0381.jpg?1721425424)

![adafruit_io_bbqbld-0380.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/394/medium640/adafruit_io_bbqbld-0380.jpg?1721425475)

![](https://cdn-learn.adafruit.com/assets/assets/000/131/404/medium800/adafruit_io_bbqbld-0382.jpg?1721425496)

# Grill Thermometer Dashboard

## CircuitPython Setup

MQTT devices, like your CircuitPython board, connect to a broker with a client library.

We've written an awesome CircuitPython MQTT client library called **[Adafruit MiniMQTT](https://github.com/adafruit/Adafruit_CircuitPython_MiniMQTT).**

This library is based off previous work by pfalcon on&nbsp;[uMQTT](https://github.com/micropython/micropython-lib/blob/master/umqtt.simple/umqtt/simple.py)&nbsp;(and the&nbsp;[umqtt port to ESP32SPI by beachbc](https://github.com/beachbc/esp32spi_mqtt)). MiniMQTT's primary difference from MicroPython's uMQTT library is its use of calling conventions and method names _similar_ to The Eclipse Foundation's&nbsp;[Paho.Mqtt.Python](https://github.com/eclipse/paho.mqtt.python/).&nbsp;

## Install CircuitPython

Some CircuitPython compatible boards come with CircuitPython installed. Others are&nbsp;_CircuitPython-ready_, but need to have it installed. As well, you may want to update the version of CircuitPython already installed on your board. The steps are the same for installing and updating.&nbsp;

- To **install (or update) your CircuitPython board**, [follow this page and come back here when you've successfully installed (or updated) CircuitPython.](https://learn.adafruit.com/welcome-to-circuitpython/installing-circuitpython)

## CircuitPython Library Installation

To interface your AirLift breakout/board with and the internet - you'll need to install a few CircuitPython libraries on your board.

First make sure you are running the&nbsp;[latest version of Adafruit CircuitPython](https://github.com/adafruit/circuitpython/releases)&nbsp;for your board.

Next you'll need to install the necessary libraries&nbsp;to use the hardware--carefully follow the steps to find and install these libraries from&nbsp;[Adafruit's CircuitPython library bundle](https://github.com/adafruit/Adafruit_CircuitPython_Bundle)&nbsp;matching your version of CircuitPython.&nbsp;

CircuitPython hardware shows up on your computer operating system as a flash drive when connected via usb. The flash drive is called **CIRCUITPY** and contains a number of files. You will need to add additional files to enable the features of this project.

First, create a folder on the drive named lib if it is not already there.

Ensure your board's&nbsp; **lib** &nbsp;folder has the following files and folders **&nbsp;** copied over. The version of the files must be the same major version as your version of CircuitPython (i.e. 4.x for 4.x, 5.x for 5.x, etc.)

- **adafruit\_minimqtt**

# Grill Thermometer Dashboard

## Connecting to the Adafruit IO MQTT Broker

If you do not want to host your own MQTT broker, using [Adafruit IO](https://io.adafruit.com)'s MQTT broker is a great way to get started connecting your CircuitPython project to the internet. Best of all - _it's free to use!_

You're going to build an Adafruit IO Dashboard which can visualize incoming data from your CircuitPython board, and send data to it.

## Obtain Adafruit IO Username and Key

If you have not already, [sign up for an Adafruit IO account by clicking this link](http://io.adafruit.com/welcome).&nbsp;

Next, you're going to need your Adafruit IO username and secret API key.

**[Navigate to your profile](https://io.adafruit.com/)&nbsp;and click the View AIO Key button**&nbsp;to retrieve them. Write them down in a safe place, you'll need them later.

![](https://cdn-learn.adafruit.com/assets/assets/000/078/328/medium800thumb/circuitpython_sensors_weather_3d_printing_adafruit_io_username_and_password.jpg?1563469986)

## Create Adafruit IO Feeds

Adafruit IO uses a special type of MQTT Topic named a Feed to store data along with metadata (information about the data). You'll be publishing data to one feed, and subscribing to another.

 **Create two new Adafruit IO Feeds** named _onoff_ and _photocell_.

- **_photocell_&nbsp;** - This feed will store light data published&nbsp;_from_&nbsp;your device to Adafruit IO
- **onoff** &nbsp;- This feed will act as an on/off switch, publishing data&nbsp;_to_&nbsp;your device from Adafruit IO

**If you have not created an Adafruit IO Feed before** , [follow this page and come back once you've the created two feeds above](https://learn.adafruit.com/adafruit-io-basics-feeds/creating-a-feed).

![circuitpython_IO_-_Feeds.png](https://cdn-learn.adafruit.com/assets/assets/000/078/333/medium640/circuitpython_IO_-_Feeds.png?1563475058)

![circuitpython_IO_-_Feeds.png](https://cdn-learn.adafruit.com/assets/assets/000/078/334/medium640/circuitpython_IO_-_Feeds.png?1563475108)

## Create an Adafruit IO Dashboard

[**Adafruit IO Dashboards**](https://learn.adafruit.com/adafruit-io-basics-dashboards) are a way to interact with feeds. You can link&nbsp;_blocks_ on dashboards to your feeds. The blocks can either display information about the feed (such as the current temperature) or allow you to interact with a feed by setting it to different values.

**Start by creating a new dashboard**. Name it whatever you'd like!

- I **f you do not know how to create a dashboard** , [head over to this page and come back here when you've successfully created a dashboard.](https://learn.adafruit.com/adafruit-io-basics-dashboards/creating-a-dashboard)

## Create a Gauge Block

After creating a dashboard, **create a Gauge Block&nbsp;** to display the value of the Photocell feed.

- **Choose** the _photocell&nbsp;_feed
- **Change the block title**  **to** _Photocell_
- **Set the Gauge Minimum Value**  **to** _0_
- **Set the Gauge Maximum Value**  **to** _1024_

**If you do not know how to add blocks to a dashboard** , [head to over this page and come back when you've added a gauge block to your dashboard.](https://learn.adafruit.com/adafruit-io-basics-dashboards/adding-blocks)

![circuitpython_IO_-_CircuitPython_MQTT.png](https://cdn-learn.adafruit.com/assets/assets/000/078/346/medium640/circuitpython_IO_-_CircuitPython_MQTT.png?1563477402)

![circuitpython_photocell_feed.png](https://cdn-learn.adafruit.com/assets/assets/000/078/348/medium640/circuitpython_photocell_feed.png?1563477493)

![circuitpython_IO_-_CircuitPython_MQTT.png](https://cdn-learn.adafruit.com/assets/assets/000/078/349/medium640/circuitpython_IO_-_CircuitPython_MQTT.png?1563477731)

## Create a Toggle Switch Block

To send values to the _onoff&nbsp;_feed you created - create a toggle switch block.

- **Choose the** &nbsp;_onoff_ **feed**
- **Set the block title to** _On/Off_
- **Set the Button On Text to** _ON_
- **Set the Button Off Text to** _OFF_

![circuitpython_sw_blck.png](https://cdn-learn.adafruit.com/assets/assets/000/078/351/medium640/circuitpython_sw_blck.png?1563478360)

![circuitpython_choose_feed_onoff.png](https://cdn-learn.adafruit.com/assets/assets/000/078/353/medium640/circuitpython_choose_feed_onoff.png?1563479292)

![circuitpython_on_off_toggle_settings.png](https://cdn-learn.adafruit.com/assets/assets/000/078/354/medium640/circuitpython_on_off_toggle_settings.png?1563479374)

Your dashboard should look like the following:

![](https://cdn-learn.adafruit.com/assets/assets/000/078/355/medium800/circuitpython_dash_image.png?1563479523)

# Grill Thermometer Dashboard

## Make the Grill Dashboard

Following the detailed instructions [here](https://learn.adafruit.com/adafruit-io-basics-feeds), create one feed per temperature probe with the following settings (increment the name numbering to avoid naming conflicts).

## Create Temperature Feeds

Following the detailed instructions here, create one feed per temperature probe with the following settings (increment the name numbering to avoid naming conflicts).

![adafruit_io_feed1.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/406/medium640/adafruit_io_feed1.jpg?1721434673)

## Create Battery Feed

The iBBQ service can also report the battery level for the transmitter unit. Create a feed for this with the settings shown.

![adafruit_io_feed6.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/407/medium640/adafruit_io_feed6.jpg?1721434693)

![](https://cdn-learn.adafruit.com/assets/assets/000/131/405/medium800/adafruit_io_feeds.jpg?1721432803)

## Dashboard

Following the detailed instructions in this guide, create a new dashboard named **Grill Dashboard.**

![adafruit_io_dash01.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/408/medium640/adafruit_io_dash01.jpg?1721445081)

## Create Gauge Blocks

Create one gauge block per temperature feed as shown.

![adafruit_io_block1.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/410/medium640/adafruit_io_block1.jpg?1721445319)

## Connect Feeds

Connect the gauge blocks to their relative feeds.

![adafruit_io_dash2.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/409/medium640/adafruit_io_dash2.jpg?1721445253)

## Battery Gauge

You can also create a battery gauge as shown.

![adafruit_io_battery.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/499/medium640/adafruit_io_battery.jpg?1721775436)

![](https://cdn-learn.adafruit.com/assets/assets/000/131/500/medium800/adafruit_io_freshdash.jpg?1721775513)

## Use the Grill Thermometer Dashboard

To use the Grill Thermometer Dashboard:

- Turn on the Feather enable switch
- Turn on the iBBQ capable BLE transmitter
- Insert probes in your food
- Fire up the grill
- Keep an eye on the grill temperature from the comfort of your air conditioned home on your computer -- or maybe on your phone while you soak in the pool! Any internet capable device can be used to monitor your Adafruit IO web-based dashboard.

![](https://cdn-learn.adafruit.com/assets/assets/000/131/503/medium800/adafruit_io_grillthumb.jpg?1721775648)


## Featured Products

### Adafruit ESP32-S3 Feather with STEMMA QT / Qwiic

[Adafruit ESP32-S3 Feather with STEMMA QT / Qwiic](https://www.adafruit.com/product/5323)
The ESP32-S3 has arrived in Feather 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 Feather is great for powering your IoT projects.

That's right - it's the new...

In Stock
[Buy Now](https://www.adafruit.com/product/5323)
[Related Guides to the Product](https://learn.adafruit.com/products/5323/guides)
### Lithium Ion Polymer Battery - 3.7v 1200mAh

[Lithium Ion Polymer Battery - 3.7v 1200mAh](https://www.adafruit.com/product/258)
Lithium-ion polymer (also known as 'lipo' or 'lipoly') batteries are thin, light, and powerful. The output ranges from 4.2V when completely charged to 3.7V. This battery has a capacity of 1200mAh for a total of about 4.5 Wh. If you need a larger battery, <a...></a...>

Out of Stock
[Buy Now](https://www.adafruit.com/product/258)
[Related Guides to the Product](https://learn.adafruit.com/products/258/guides)
### Adafruit ESP32-S3 Feather 8MB with w.FL Antenna

[Adafruit ESP32-S3 Feather 8MB with w.FL Antenna](https://www.adafruit.com/product/5885)
The ESP32-S3 has arrived in Feather 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,&nbsp;native USB,&nbsp;and with this version easy external antenna support thanks to an on-board **w.FL...**

In Stock
[Buy Now](https://www.adafruit.com/product/5885)
[Related Guides to the Product](https://learn.adafruit.com/products/5885/guides)
### WiFi Antenna with w.FL / MHF3 / IPEX3 Connector

[WiFi Antenna with w.FL / MHF3 / IPEX3 Connector](https://www.adafruit.com/product/5445)
That's one slim cellular antenna! At about 220mm long from tip to tip and with a cable thickness of just 0.8mm, this 2.4GHz WiFi or BLE antenna is slim,&nbsp;compact, and sensitive, with a 4dBi gain.&nbsp;The antenna is the trace on the PCB that is at the end of the skinny coaxial cable....

In Stock
[Buy Now](https://www.adafruit.com/product/5445)
[Related Guides to the Product](https://learn.adafruit.com/products/5445/guides)
### Breadboard-friendly SPDT Slide Switch

[Breadboard-friendly SPDT Slide Switch](https://www.adafruit.com/product/805)
These nice switches are perfect for use with breadboard and perfboard projects. They have 0.1" spacing and snap in nicely into a solderless breadboard. They're easy to switch no matter what size fingers you have, but not so easy that they'll get flipped by accident. Work great as...

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

## Related Guides

- [Adafruit ESP32-S3 Feather](https://learn.adafruit.com/adafruit-esp32-s3-feather.md)
- [Tiny Pod - BLE Rotary Encoder for iWatch](https://learn.adafruit.com/ano-pod.md)
- [ESP32-S3 BLE iOS Media Controller](https://learn.adafruit.com/esp32-s3-ble-ios-media-controller.md)
- [Using the CircuitPython Extension for Visual Studio Code](https://learn.adafruit.com/using-the-circuitpython-extension-for-visual-studio-code.md)
- [Introducing Adafruit Feather](https://learn.adafruit.com/adafruit-feather.md)
- [How to Add a New Board to WipperSnapper](https://learn.adafruit.com/how-to-add-a-new-board-to-wippersnapper.md)
- [TFT Spirit Board](https://learn.adafruit.com/tft-spirit-board.md)
- [ESP32-S3 BLE RS-232 Controller](https://learn.adafruit.com/esp32-s3-ble-rs232-controller.md)
- [Networking in CircuitPython](https://learn.adafruit.com/networking-in-circuitpython.md)
- [Haiku Viewer for MagTag](https://learn.adafruit.com/haiku-viewer-for-magtag.md)
- [CircuitPython OctoPrint Controller and Monitor](https://learn.adafruit.com/circuitpython-octoprint-controller-and-monitor.md)
- [HalloWing Jump Scare Trap](https://learn.adafruit.com/hallowing-jump-scare-trap.md)
- [Adafruit IO](https://learn.adafruit.com/adafruit-io.md)
- [Adafruit pIRkey](https://learn.adafruit.com/adafruit-pirkey-python-programmable-infrared-usb-adapter.md)
- [Adafruit S-35710 Low-Power Wake Up Timer Breakout](https://learn.adafruit.com/adafruit-s-35710-low-power-wake-up-timer-breakout.md)
