Im looking to make a wood burner temperature monitoring setup. I haven't dabbled in the wireless side of arduino so im looking for recommendations. I will have 1 arduino and temp sensor for the wood burner and i would like a monitor upstairs and one in the kitchen to tell me the surface temp of the stove so I can tell when to add more wood or if its running too hot. so the question is what to use? bluetooth, wifi, or anything else?
As you probably already have WiFi in the house, you could use that. Use a Wemos mini as the Arduino. You can monitor the stove from your phone or tablet anywhere in the house. The Wemos can make a simple web page which you can view on any browser.
If you want a dedicated signal for when you are too busy to monitor using your phone, another Wemos mini, connected to a buzzer or light, can act as an alarm.
What kind of temperature sensor will you use to monitor the stove? Most types would be destroyed by such heat. Thermocouple sensors can go up to very high temps. IR temp sensors are another option. They don't contact the stove, they monitor the IR light given off by any hot object.
if I did wifi it would have to be a stand alone system, im using a verizon hotspot for the house wifi and can only have 15 devices... very irritating with home automation! as for the temp senso i have a Adafruit Industries 1m PT100 Platinum RTD 3 Wire Sensor and rtd shield.
I wouldn't rely on bluetooth to communicate between floors. If wifi is problematic, consider radios: LoRa, x-bee or just plain old cheap 915MHz models.
You do not need to have any other Wifi, the Wemos can be the access point.
That does limit all connections as local and you cannot access from the Web.
Seems like, if you are not in the house, it would not matter anyway.
I would think that all your micros could feed data to one device that would be connected to the WEB.
The ESP8266 can talk to other units with ESPNOW, but I have not been able to get one to work with both ESPNOW and also on the web at the same time.
It would seem that defining what you already have and what you want would be a good step.
As for temperature sensing, a thermocouple in the exhaust or laying on the stove is an option.
yes i just need to know the surface temp of the wood stove so i can get a general idea of what its doing, ive accidentally left the air port too far open and it gets raging hot...oops! and it would also be nice to know when to add wood in the evening without going down stairs to check on it. but this is mainly to keep it from over heating. so I should be able to us 1 ESP8266 to feed 2 other ESP8266 with displays or an led? just want to confirm before i go buy them. thanks again for the help guys im still pretty new to all of this. ive mostly played with neopixles and havent played with any wireless stuff until now.
Adafruit Industries. rtd shield.
Did you really mean to say shield? That would limit your options to Uno/Mega. But I don't see an rtd shield on Adafruit's web shop, so perhaps you don't really understand what a shield is? Is it simply a rectangular PCB?
Using a Wemos as an Access Point ("hot spot") does not have a great range, because it's antenna is only small. If the house walls are thick masonry, the idea might not work well. Is the signal from your current router strong in all the places you want to put the displays? Does your current router have external antenna? You could try placing a smartphone, with its hotspot enabled, in the position the temp sensor PCB would be, then see if you can connect to that using another smartphone, in the places where you want the displays. If that works, there's a good chance using the Wemos as an AP would also work. If in doubt, it might be worth getting a Wemos Mini Pro, because you have the option of an external antenna with the Pro.
PaulRB:
Did you really mean to say shield? That would limit your options to Uno/Mega. But I don't see an rtd shield on Adafruit's web shop, so perhaps you don't really understand what a shield is? Is it simply a rectangular PCB?Using a Wemos as an Access Point ("hot spot") does not have a great range, because it's antenna is only small. If the house walls are thick masonry, the idea might not work well. Is the signal from your current router strong in all the places you want to put the displays? Does your current router have external antenna? You could try placing a smartphone, with its hotspot enabled, in the position the temp sensor PCB would be, then see if you can connect to that using another smartphone, in the places where you want the displays. If that works, there's a good chance using the Wemos as an AP would also work. If in doubt, it might be worth getting a Wemos Mini Pro, because you have the option of an external antenna with the Pro.
sorry you are correct its not a shield its a breakout board, I was typing faster than I was thinking. Adafruit PT100 RTD Temperature Sensor Amplifier - MAX31865
as for the walls yes I have plaster walls so the external antenna might be a better option
Plaster walls are not too much of a problem. My house has some internal walls that were originally the external wall, 0.5m of Yorkshire sandstone. WiFi don't go thru that! Try that test I suggested.
Thinking about it, if you're not going to connect anything else except the displays to the sensor, there are no real advantages to WiFi. In fact, WiFi's high frequency means it penetrates walls poorly. A 433MHz signal will penetrate further, and using less power.
So I think I'm going to change my recommendation. Instead of Wemos, just use 3.3V Arduino Pro Minis and the lowest cost 433MHz transmitter & receivers. You may be able to run the circuits on battery power (although led displays will drain batteries fast).
everything will be mains powered. heck I may just end up with 3 led lights B,G,R that covers everything i need and a buzzer for an over temp alarm if it goes above red. I will try the trick when i get home and see if it will reach. if nothing else ill still end up getting a few to play with. Ive got many projects i can use them on
[code]
#include <Adafruit_MAX31865.h>
// LoRa 9x_TX
// -*- mode: C++ -*-
// Example sketch showing how to create a simple messaging client (transmitter)
// with the RH_RF95 class. RH_RF95 class does not provide for addressing or
// reliability, so you should only use RH_RF95 if you do not need the higher
// level messaging abilities.
// It is designed to work with the other example LoRa9x_RX
#include <SPI.h>
#include <RH_RF95.h>
#define RFM95_CS 10
#define RFM95_RST 9
#define RFM95_INT 2
// Change to 434.0 or other frequency, must match RX's freq!
#define RF95_FREQ 433.0
// Singleton instance of the radio driver
RH_RF95 rf95(RFM95_CS, RFM95_INT);
// Use software SPI: CS, DI, DO, CLK
Adafruit_MAX31865 max = Adafruit_MAX31865(3, 5, 4, 6);
// use hardware SPI, just pass in the CS pin
//Adafruit_MAX31865 max = Adafruit_MAX31865(10);
// The value of the Rref resistor. Use 430.0 for PT100 and 4300.0 for PT1000
#define RREF 430.0
// The 'nominal' 0-degrees-C resistance of the sensor
// 100.0 for PT100, 1000.0 for PT1000
void setup()
{
Serial.begin(115200);
Serial.println("Adafruit MAX31865 PT100 Sensor Test!");
max.begin(MAX31865_3WIRE);
pinMode(RFM95_RST, OUTPUT);
digitalWrite(RFM95_RST, HIGH);
while (!Serial);
Serial.begin(115200);
delay(100);
Serial.println("Arduino LoRa TX Test!");
// manual reset
digitalWrite(RFM95_RST, LOW);
delay(10);
digitalWrite(RFM95_RST, HIGH);
delay(10);
while (!rf95.init()) {
Serial.println("LoRa radio init failed");
while (1);
}
Serial.println("LoRa radio init OK!");
// Defaults after init are 434.0MHz, modulation GFSK_Rb250Fd250, +13dbM
if (!rf95.setFrequency(RF95_FREQ)) {
Serial.println("setFrequency failed");
while (1);
}
Serial.print("Set Freq to: "); Serial.println(RF95_FREQ);
// Defaults after init are 434.0MHz, 13dBm, Bw = 125 kHz, Cr = 4/5, Sf = 128chips/symbol, CRC on
// The default transmitter power is 13dBm, using PA_BOOST.
// If you are using RFM95/96/97/98 modules which uses the PA_BOOST transmitter pin, then
// you can set transmitter powers from 5 to 23 dBm:
rf95.setTxPower(23, false);
}
int16_t packetnum = 0; // packet counter, we increment per
void loop()
{
//Serial.println("Sending to rf95_server");
// Send a message to rf95_server
char radiopacket[20] = "[color=red]WOOD BURNER TEMP HERE[/color] ";
//itoa(packetnum++, radiopacket+13, 10);
Serial.print("Sending "); Serial.println(radiopacket);
radiopacket[19] = 0;
//Serial.println("Sending..."); delay(10);
rf95.send((uint8_t *)radiopacket, 20);
//Serial.println("Waiting for packet to complete..."); delay(10);
rf95.waitPacketSent();
// Now wait for a reply
uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
uint8_t len = sizeof(buf);
//Serial.println("Waiting for reply..."); delay(10);
if (rf95.waitAvailableTimeout(1000))
{
// Should be a reply message for us now
if (rf95.recv(buf, &len))
{
Serial.print("Got reply: ");
Serial.println((char*)buf);
//Serial.print("RSSI: ");
//Serial.println(rf95.lastRssi(), DEC);
}
else
{
Serial.println("Receive failed");
}
}
else
{
Serial.println("No reply, is there a listener around?");
}
delay(1000);
uint16_t rtd = max.readRTD();
int C = (max.temperature(RNOMINAL, RREF));
int F = (32.0 + 1.8 * C);
//int C = (max.temperature(RNOMINAL, RREF))
//Serial.println("C = "); Serial.println(max.temperature(RNOMINAL, RREF));
Serial.print("Woodburner temp = ");
Serial.println(F = 32.0 + 1.8 * C);
delay(150);
}
[/code]
ok so ive made some progress but im struggling to figure out how to get it to send the temperature in the message. Im sure its something simple but im struggling.. tips tricks? Not asking for handouts by any means just something to get me started in the right direction. Thanks in advance
Thanks for using code tags. But we need more to help you now. Things seem to have moved on significantly since your last post. We need a schematic (hand-drawn is ok) and links to the components you have chosen. Please read the forum guide in the "please read" sticky post, especially point #11.
Im working with an uno. I'm able to get the wirelss to talk to each other and i'm able to read the temperature but im hung up with making the two mesh and output the temperature to the wireless. Ive come to realize that what should work in my head never does in arduino IE:
char radiopacket[20] = "woodburner temp (F = 32.0 + 1.8 * C) ";
with that being said here's my hangup. My next question is would it be smarter to have the "server radio" do the math and just send a DO 1 or 0 or output the actual temp and let the "client" crunch the number and decide when to turn on a DO? I would like to learn how to do both to be completely honest. I think that would be a valuable bit of knowledge. I looked into examples using char or unit6 and to be completely honest I cant wrap my head around them. It just hasnt clicked yet, I can work on flight simulators all day with no problems but this stuff boggles my peanut sometimes.
char radiopacket[20] = "hello ";
//itoa(packetnum++, radiopacket+13, 10);
Serial.print("Sending "); Serial.println(radiopacket);
radiopacket[19] = 0;
uint16_t rtd = max.readRTD();
int C = (max.temperature(RNOMINAL, RREF));
int F = (32.0 + 1.8 * C);
//int C = (max.temperature(RNOMINAL, RREF))
//Serial.println("C = "); Serial.println(max.temperature(RNOMINAL, RREF));
Serial.print("Woodburner temp = ");
Serial.println(F = 32.0 + 1.8 * C);
tatersalad:
with that being said here's my hangup. My next question is would it be smarter to have the "server radio" do the math and just send a DO 1 or 0 or output the actual temp and let the "client" crunch the number and decide when to turn on a DO?
Both approaches are common.
You may take a message bus view where the sender is basically saying "I'll broadcast the temperature and anyone interested can do with it what they will". It lets you add new receivers later and extra functionality without any need to change the sender. Look at MQTT for an example of this loosely coupled viewpoint.
Or you can have a master slave arrangement where the sender tells the slaves what to do. You might use it when you want to be sure that the slave got the message and put a protocol in place to verify that they did. New slaves need changes to the master though.
Ive googled my eyes out and cant find and example that I can morph into my code. Either im using the wrong search terms or im a window licker but I cant find anything suitable and I have no idea where to start with the code to write it myself. I would like this to just broadcast the temp, I dont need a hand shake or to over complicate it. Im just turning on a rgb led to give me an idea how hot the wood stove is.
Don't try to do everything at once. Break the problem down into simpler tasks. Tackle them one by one. Search for example code to help you with each simpler task. Get each one tested and working before you begin integrating them, again, one-by-one, testing at each stage. This is not a beginner's technique, the pros do it that way too.
Maybe start by getting the Uno to read the temp sensor and display the results to serial monitor. There's probably an example sketch in the AdaFruit library that does that. Next, attach the RGB led to the Uno and get the lights working based on the temp reading. Post your code here at each stage and we can check it for errors you might not have spotted.
I've got every bit of my code working for the the wood burner on a single arduino. Also have it working with the wireless code morphed in but I cant figure out how to transmit the temperature to another arduino. I have posted my code for the temp and wireless earlier in the post.
Please post what you have now.
tatersalad:
if I did wifi it would have to be a stand alone system, im using a verizon hotspot for the house wifi and can only have 15 devices... very irritating with home automation! as for the temp senso i have a Adafruit Industries 1m PT100 Platinum RTD 3 Wire Sensor and rtd shield.
Why don't you put a router on your hotspot? Then you can have 255 WiFi addresses.
My approach would be different. Put the temperature sensors on Wemos D1 Mini's and communicate to a central point over WiFi using MQTT. In my home the "central point" is a Raspberry Pi running Node Red and Mosquitto MQTT broker.
