IoT Projects, ESP8266, Makers

Temperature Control with Ubidots MQTT and NodeMcu

onewire_nodeMcu.jpg

This guide details how to make a temperature control with Ubidots and a simple NodeMCU to send email or SMS alerts when your “variable” (in this case, the temperature) gets too hot, too cold, or reaches a certain design rule.

We are going to use a pre-wired and waterproof version of the DS18B20 sensor (OneWire temperature sensor). It’s handy when you need to measure something far away, or in wet conditions. The OneWire temperature sensor has different versions; one of them has a resistor integrated and others don’t, so make sure the version you’re using is correct before starting with the project. For the control, we are going to use a NodeMcu using a digital pin.

Requirements

Setup

  1. First, we should choose a version. If your sensor has the resistor integrated, just connect it to the NodeMcu like this:
DS18B20 NodeMCU
BLACK WIRE GND
RED WIRE Vin
YELLOW WIRE D3

If not, you have to power the DATA pin through the resistance of 4.7kΩ, and the Vin and GND pins should be connected to each other and the ground.

IMG_20161214_145917.jpg

  1. Go to the Arduino IDE, click on Files -> Preferences, and enter the following URL into the “Additional Board Manager URLs” field. You can add multiple URLs, separating them with commas.

http://arduino.esp8266.com/stable/package_esp8266com_index.json

  1. Open “Boards Manager” from Tools -> Board menu and install esp8266 platform (and don’t forget to select your NodeMCU 1.0 board from the Tools > Board menu after installation).

  2. Download the UbidotsESPMQTT library, OneWire Library, and DallasTemperature Library using these hyperlinks.

  3. Now, click on Sketch -> Include Library -> Add .ZIP Library.

  4. Select the .ZIP files of Ubidots ESPMQTT, OneWire, and DallasTemperature and then “Accept” or “Choose” for all the libraries. If you can’t add the libraries, try manually: unzip the downloaded rar/zip and copy the folder from the library to the path C:UsersubidotsDocumentsArduinolibraries.

  5. Close the Arduino IDE and open it again.

Code

Once everything is connected correctly, we will go to the IDE and write the following code:

/****************************************
 * Include Libraries
 ****************************************/
#include "UbidotsESPMQTT.h"
#include <OneWire.h>
#include <DallasTemperature.h>
/****************************************
 * Define Constants
 ****************************************/
#define TOKEN "....." // Your Ubidots TOKEN
#define WIFINAME "....." //Your SSID
#define WIFIPASS "....." // Your Wifi Pass
#define MQTTCLIENTNAME "....." // Your MQTT Client Name, it must be unique so we recommend to choose a random ASCCI name
#define Pin D3

float temp;
OneWire ourWire(Pin);
DallasTemperature sensors(&ourWire);

Ubidots client(TOKEN, MQTTCLIENTNAME);
/****************************************
 * Auxiliar Functions
 ****************************************/
void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i=0;i<length;i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();
}
/****************************************
 * Main Functions
 ****************************************/
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  client.wifiConnection(WIFINAME, WIFIPASS);
  sensors.begin();
  client.begin(callback);
  }
void loop() {
  // put your main code here, to run repeatedly:
  if(!client.connected()){
      client.reconnect();
      }
  
  sensors.requestTemperatures();       //Prepare the sensor for reading
  
  temp = sensors.getTempCByIndex(0);
  
  Serial.print(sensors.getTempCByIndex(0)); //Read and print the temperature in Celsius
  client.add("temperature", temp); //Insert your variable Labels and the value to be sent
  delay(1000);
  Serial.println("Grados Centigrados");
  client.ubidotsPublish("control");
  
  client.loop();
  }

Results

Now, open your Ubidots account and go to Source. You will see a new DataSource named "control". click on it.

Temp_control_DSNodeMcu.jpg

Here, you will see the temperature value:

Temp_control_NodeMcu.jpg

Creating an Alert

Also, you can create an Event that notifies you when the temperature is irregular. Go to Events, click on Add Event, and select your Data Source an Variable.

The Events can notify you via email, sms, Telegram, or WebHook. You can also set a variable:

Temp_control_EventNodeMcu.jpg

When your event is ready you should see these windows:

Temp_control_EventNodeMcu2.jpg

In this example, if temperature value is >= 28,Ubidots will send you an email as previously configured, as such:

TempControl_Event.jpg

It’s very simple! With just few cables you can observe the temperature behavior of your home, whether you’re inside or outside. You can even trigger alerts via email/SMS in case of fire.

Now you try!

… not signed with Ubidots up yet? No worries, you can right here in under 30 seconds.

Author image

About María Hernández

Maria is a maker at heart. With a background in Electrical Engineering, she is constantly learning, sharing, and experimenting with the latest IoT technologies out there. IoT Ambassador @ Ubidots.