BBQ Thermostat

A board-controlled temp probe and fan to maintain temperature during a long smoke or BBQ

Similar projects worth following
I'd like to make my own version of something like the CyberQ ( There are many commercial products out there that will act as a thermostat for a smoker or BBQ, but if they have a web component it's dependent on the "cloud" and proprietary apps. So I want to make my own so that I control all the data.

Phase 1: BBQ Temp

Phase 2: Fan

Phase 3: Also measure food temp

Phase 4: 3D Printed case or something to make it look nice.

New Version (Circuit Python)

Using Unexpected Maker's FeatherS2, Adafruit's DC Stepper Motor, a 12V Blower, and Sparkfun's MCP9600 breakout board, 

I am designing a BBQ Smoker Thermostat for my Weber Smokey Mountain.

It will use MQTT to communicate the temperatures back to Home Assistant and InfluxDB. The latter is used by Grafana to create a graph.

Original Version (Arduino)
Using an Arduino MKR WIFI 1010, Arduino MKR THERM Shield, and a computer case fan, I am designing a BBQ Smoker Thermostat for my Weber Smokey Mountain.

It uses MQTT to communicate the temperatures back to Home Assistant and InfluxDB. The latter is used by Grafana to create a graph.

Currently Version 1 with Arduino is completed and working, see: First Live Test

Code Repositories

smoker thermo reading from Weber Smokey Mountain.jpg

reading from the Weber Smokey Mountain

JPEG Image - 4.61 MB - 12/16/2019 at 00:36


smoker thermo live test.png

screenshot of Grafana graph of smoker temps

Portable Network Graphics (PNG) - 33.71 kB - 12/16/2019 at 00:34


JPEG Image - 2.95 MB - 09/14/2019 at 20:16


  • Finally, some progress!

    eric07/02/2022 at 18:54 0 comments

    On a whim the other day I stumbled upon the Adafruit page for the MCP9601. In there they mentioned trying to change the frequency of the I2C to 20k if not using SAMD. So I did and I was able to get the thermometer to work. Then I was baffled for a while on why I couldn't get the temperature to work if I put the motor board on. Turns out there was an I2C address conflict. I added a drop of solder to fix that and, viola! It would all work! I might publish a video some time in the future. 

    Now that this is working, I can FINALLY start to make this work for me. 

    Initial next steps:

    1. Get Wifi connecting
    2. Send temperature via MQTT
    3. Send Motor status via MQTT
    4. Figure out how to attach the fan to the smoker
    5. Develop a fan-speed to temperature algorithm
    6. Test algorithm without food
    7. Test algorithm with food

    So excited!

  • Looks like it'll be Arduino Code, not CircuitPython

    eric06/18/2021 at 21:22 0 comments

    After my hardware switch to Unexpected Maker's Feather S2, Sparkfun's MCP6900, and Adafruit motor board (I need to update my BOM) - I waited throughout the Circuit Python 6.x series to see if they would fix the fact that the Sparkfun wouldn't work with the Feather S2. Eventually Lady Ada said it wouldn't be a blocker.

    This week UM himself told me it was an ESP32-S2 with Circuit Python issue. Someone else on his Discord said it had something to do with Circuit Python turning off the pullups on the pins. So, since I know it works with Arduino, I'll go with that and maybe start making some progress on the meat of this project.

    Realistically, I'll probably start the work in mid-to-late July.

  • Hardware Change

    eric02/21/2021 at 20:17 0 comments

    I couldn't get the motor to work from just using first principles - ie BJTs, etc. So I decided to go with a motor board. After a lot of looking around, I went with a Unexpected Maker Feather ESP32-S2 and Adafruit Motor Featherwing. As a plus this lets me code in Python. I tested the motor today and it works. The only bummer is that, as part of moving over, I ended up going with a Sparkfun Qwiic thermometer add-on board and it's not working well with the Adafruit Circuit Python firmware for the ESP32-S2. Once that's done I'll be able to really move forward on this.

  • Project's Not Dead

    eric07/16/2020 at 01:01 0 comments

    Today spent a bunch of time trying to drive the fan with my BJT. Turns out it looks like I had a couple connections to the NPN flipped so I couldn't make the progress I'd like, but I'm hoping by the end of this week to have some progress to report.

  • First Live Test

    eric12/16/2019 at 00:53 0 comments

    Today I was smoking a turkey so I figured it was a good time to do a live test of my project. There was good news and bad news. I think it's illustrated quite well by the following graph:

    On the good news front:

    • While I didn't do a minute-by-minute comparison (because I was busy making some side dishes), the temperatures it measured seemed to be fairly accurate and reasonable.
    • The temperature was able to travel via MQTT to the InfluxDB and Grafana Docker containers.

    On the bad news front:

    • I kind of already knew this from experience with my cell phone, but WiFi reception is garbage on the BBQ patio. The 45° line from 15:45ish to 16:28ish is because the device wasn't reporting back. I went out with my laptop to see what was happening and it wasn't able to connect to the wifi. I lifted it up in the air (connected to my laptop) and it was able to connect. Then I rigged it to an extension cord in the tree (rather than near the ground as in the opening picture) and I guess it was able to do a bunch of data connections. But I wasn't done smoking at 1700, yet that's when I have the final data point.

    So it seems like I've at least got a WiFi problem to solve. But when I've left it going in the computer room in the past I've seemed to have seen it conk out sooner than I'd prefer for a smoker application. (Conk out as in refuse to continue sending data or losing the connection to the SSID, not turn off or something.

    I've added in a timestamp to the MQTT to influx Python script so that I can truly see when the final message came through. While testing at my desk I may also need to temporarily lift the restriction I made for not sending bogus temps in order to know for sure whether it's lost the WiFi or whether it's just not finding legit values to send.

    So I'm pretty encouraged, even if things aren't right where I want them to be yet.

  • Calibration

    eric09/14/2019 at 16:53 0 comments

    Today I did a calibration test with the thermocouple and on the boiling test it came 3° C short. Strangely on the cold water test (couldn't quite get the water to 0° C), it was over 2° C. I would have expected it to be 3° C short all along the range. However, coming up 2-3° C short was consistent with the room temp it tends to read compared to the reference temp. ALSO, for a BBQ thermostat, a 2-3° C different from actual temperature doesn't matter. Usually we're talking about being OK if your smoker or BBQ temps are between 225°F and 260°F for a low and slow cook. So I plan to edit my Arduino code to compensate.

    One thing I am curious about how to solve is the random spike or dip in temperature. I don't want that to affect the fan until the next time a reading is taken. I wonder if I should just expect only a certain delta in temperature within a minute and throw out anything over that range. I'll have to continue to think about it.

  • Making great progress

    eric08/25/2019 at 20:40 0 comments

    After being stuck forever because I didn't realize the noise on the 5V line was causing me trouble, things seem to be going much more quickly now. I've now got the code setup to send data to my MQTT broker. I can see it in Home Assistant and in Python's Eclipse Paho client. Next step is calibration (I think I need roughly a +2C adjustment) and then a test from out in the smoker. At that point I'll know that everything up to the point of controlling the fan works.

  • Some code!

    eric08/22/2019 at 23:37 0 comments

    You can now go to to see the code for the project. First step was to get THERM and WiFi code together and make sure it compiles. Next up is to get MQTT code compiling.

  • When debugging it's never what you think it is

    eric08/22/2019 at 00:39 0 comments

    In the previous project log I mentioned that I was getting nonsense values from the thermocouple. I tried everything to figure out what was wrong. I even bought a different thermocouple ( Still the same issue. I posted to reddit and the Arduino forums. What I learned on the Arduino forums is that there's another library I can use for the therm chip (separate from the official Arduino one) that makes it easy to see what errors one is getting. But still no success. I was getting really bummed - I was still in one of the easiest parts of the development phase.

    I tried different USB cables and got some slightly different, but inconsistent results. Maybe it was the USB ports on my computer? So I installed Arduino IDE on my laptop, got the code on there, and .... it was exactly the same. I had read that full E/M environment could mess with the sensor. So I unplugged my laptop and took it to my bedroom. There..... it worked! REALLY? Was it the wifi router in the office?

    So I came back into the office. It was still working! I plugged in my laptop and things went screwy again. I took this to the net and it seems the consensus is that the voltage is very noisy on the 5V line and that screws with the tiny measurements being made on the thermocouple. So it looks like I'll be doing debugging on a battery-powered laptop. Also, I may have to make sure the final project runs on battery power rather than AC power. We'll see.

  • The Real Making Begins

    eric08/09/2019 at 01:05 0 comments

    All the parts have arrived. Unfortunately, when I plug in the thermocouple, while I get a correct reference temp of 24.19 °C, I get a nonsensical 1073741760.00 °C as the thermocouple reading. Now, it arrived with a damaged-looking sheath, so maybe the cable is messed up. But maybe not? And this is why I gave this post the title I did. I've done a lot of software debugging in the past, but this is the first time doing hardware debugging. I'm GUESSING that since the reference temperature coming in makes sense for the temp I have the house A/C set for, that the connections between the MKR THERM shield and the MKR WiFi 1010 are fine. I'm also assuming that means the Arduino_MKRTHERM.h that I'm importing is fine.

    Of course, it's possible that something is wrong with the inputs on the THERM shield, but unless it's a wiring error on the board, I don't think so because I get the same readings whether I use the screw mounts or the k-couple inputs (although that requires some futzing around since I don't have a k-connector on this wire). 

    Adafruit was great about an RMA for the wire since (again) it came with what looked like a damaged sheath, but I'm left not yet knowing at this point where the problem lies and how much of an issue this is for my project.

    Of course, there's always the possibility of shelling out for some Thermoworks k-couples - then I'd be a lot more certain if the issue persisted that it wasn't with the cable.

    That's where hardware debugging is a lot more expensive than software debugging.

    But that's why this is where the real making begins....

View all 11 project logs

Enjoy this project?



kris.boyle wrote 10/06/2020 at 10:47 point

Very nice project! I started down this path and then I found the HeaterMeter mentioned above and built the kit about 2 years ago. It has worked like a champ ever since. 

There isn't direct MQTT support (being worked on) but the device provides JSON query/response as well as streaming to avoid polling. No cloud/vendor dependencies at all.

  Are you sure? yes | no

eric wrote 10/07/2020 at 00:13 point

Very cool. If this fails, I'll definitely check that out

  Are you sure? yes | no

Steverino wrote 05/18/2020 at 16:50 point

Very neat. There's also another great open source project like this called HeaterMeter

  Are you sure? yes | no

eric wrote 07/16/2020 at 00:54 point

Neat! He/she is very far ahead of me.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates