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
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
- Raspberry PI: I used an original Model B from 2012
- Thermocouple Type-K Glass Braid Insulated – $9.95
- Thermocouple Amplifier MAX31855 – $14.95
- Female/Male 'Extension' Jumper Wires – $3.95
- 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
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.
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
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.") return
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
- Add a physical display
- Save a cook with notes and view cooks in UI