Raspberry PI project for measuring BBQ temperatures and stuff
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



So heap on the wood and kindle the fire. Cook the meat well, mixing in the spices; and let the bones be charred. – Ezekiel 24:10

This is my attempt at making my Raspberry PI a BBQ companion. With a thermocouple, my Raspberry PI, and my Amazon Echo I created something that I've always wanted.

Me: "Alexa, ask my grill the temperature."

Alexa: 245 degrees


I want to give credit to Rafael Troncoso for the initial hardware and software setup. His video on youtube was what initially inspired me to get started.

Note to the wary and the critical: I am not a hardware professional. I have soldered maybe twice in my life. I managed to get these parts soldered together because I remembered some things by father tought me. Perhaps they aren't true. Perhaps I am doing it wrong. Nevertheless, I had fun and got the outcome I wanted. The longevity of the solution is still to be determined 😉

Hardware Requirements

  1. Raspberry PI: I used an original Model B from 2012
  2. Thermocouple Type-K Glass Braid Insulated – $9.95
  3. Thermocouple Amplifier MAX31855 – $14.95
  4. Female/Male 'Extension' Jumper Wires – $3.95
  5. Tiny breadboard – $4.00

Raspberry Pi Setup

I'm going to assume you're using Raspian. If you're using something else then YMMV. Either SSH or use a keyboard/monitor connected to the PI. In a terminal window perform the following.

sudo raspi-config
# choose advanced options > SPI > enable. 
sudo reboot
# after reboot
# install dependencies
sudo apt install build-essential python-dev python-pip python-smbus git
sudo pip install RPi.GPIO
# Install adafruit libs
mkdir -p ~/tmp
cd ~/tmp
git clone https://github.com/adafruit/Adafruit_Python_MAX31855.git
cd Adafruit_Python_MAX31855
sudo python setup.py install
# this will install the Adafruit python libs

Hardware Instructions

The wiring schematics can be found at adafruit.com. I used the hardware SPI model pasted below for ease.

I was under the assumption that I could connect the pieces without solder and get a reading, but I was sadly mistaken. I was able to hold the amplifier in a certain position and get a reading, but it was in and out. I was having trouble getting a good connection without solder. If you don't know how to solder then I suggest you do some searching on YouTube. It's really simple.

  • Solder the thermocouple onto the short end of the headers (the six pins)
  • Solder the 2 pin terminal block onto the top of the thermocouple with the open holes facing away from the board
  • Tighten the terminal block screws all the way and then loosen them a bit for the wires to fit in
  • Insert the K-type thermocouple (the braided wire) to the terminal block with the yellow on the left and the red on the right. 

Installing Ezekiel

Connect to the PI again and perform the following.

mkdir -p /var/www
sudo chown -r $(WHOAMI) /var/www
cd /var/www
git clone https://github.com/blockloop/ezekiel.git
cd ezekiel
pip install -r requirements.txt
python probe_reader/test.py
# you sould see the following output if the probe reads properly
#  Probe: 72
#  External: 81

If you don't see real temperatures then you may have a problem with connections. Check your solder, the thermocouple wire connections, make sure the screws on the terminal are tight, etc.

# copy the systemd files to where they can be seen by systemd
sudo cp lib/systemd/system/* /lib/systemd/system/
# make them executable
sudo chmod +x /lib/systemd/system/ezekiel*
# reload the systemd daemon so that it detects the files
sudo systemctl daemon-reload
# enable and start the services
sudo systemctl enable /lib/systemd/system/ezekiel_updatedb.service
sudo systemctl enable /lib/systemd/system/ezekiel_updatedb.timer
sudo systemctl start ezekiel_updatedb.timer
sudo systemctl enable /lib/systemd/system/ezekiel_http.service
sudo systemctl start ezekiel_http

At this point everything should be running. You can check the status of each of the services to make sure.

sudo systemctl status ezekiel_updatedb
sudo systemctl status ezekiel_http

You should see Active: active (running) for the http service and the updatedb service might show dead because it only runs once every 3 seconds. Now check that the http service is working properly by running the following

curl -Ss http://localhost:3000/

You should see HTML printed to the screen.

You can try to load http://raspberrypi:3000/ on another computer which is on the same network. It works in most setups but some routers don't create DNS records for hostnames so you might have to get the IP address from the Raspberry PI with ip addr show | grep -i "inet " | grep -v 127 and try http://<ip address>:3000.

Important the probe will not persist temperatures under 100°F so you might not get any readings on the website immediately. This is a personal preference because I don't want the probe logging infinitely while it's not in use. If you want to change this for testing or some other reason you can edit or delete the lines in probe_reader/update_db.py where it says

    if probetemp_f < 100:
        print("< 100F. Not inserting.")

If you remove the block of code then note that the /var/www/ezekiel/temperatures.db file might outgrow the disk because it is persisting a record every 3 seconds. If you make any changes to the python files you will need to restart the service which pertains to that file.

sudo systemctl restart ezekiel_http.service
# or
sudo systemctl restart ezekiel_updatedb.service

Setting Up Alexa / Amazon Echo


Future Goals

  1. Add a physical display
  2. Save a cook with notes and view cooks in UI