O IoT feito simples: Monitorando a temperatura desde qualquer lugar

6 06-03:00 janeiro 06-03:00 2017 — 40 Comentários

É incrível como hoje em dia podemos montar rapidamente um projeto de IoT utilizando-se apenas de um “chip” de uns poucos dólares e um aplicativo carregado em seu smartphone.

Neste tutorial também aprenderemos sobre um sensor digital de temperatura confiável e muito fácil de usar, o DS18B20.

Como mostrado no diagrama de bloco acima, os dados coletados pelo sensor serão enviados à Internet com a ajuda de um NodeMCU ESP8266-E e monitorados em um celular ou tablet utilizando-se o aplicativo Blynk.

1: Lista de Material

  • Resistor 4.7K Ohms

2: DS18B20 Sensor Digital de Temperatura

Usaremos neste tutorial, uma versão à prova de agua do sensor DS18B20. Esta configuração é  muito útil para se medir temperaturas de maneira remota em condições de umidade, por exemplo em coleta de dados de solo. O sensor é isolado e pode ser usado em até 125oC (Adafrut não recomenda usá-lo acima dos 100oC devido a a capa de PVC  utilizada em seu cabo).

O DS18B20 é um sensor do tipo digital, o que o torna util para uso mesmo em longas distâncias! Estes sensores digitais de temperatura  “1-Wire” são bastante precisos (± 0,5 ° C em grande parte da faixa) e podem fornecer até 12 bits de precisão a partir do conversor digital-analógico integrado. Eles funcionam muito bem com micro-controladores como o NodeMCU ou Arduino, utilizando-se de apenas um único pino digital. Você poderá até mesmo conectar-lo a vários outros sensores no mesmo pino, pois cada um dos sensores possui um único ID de 64 bits gravado de fábrica para diferenciá-los.

O sensor funciona de 3.0 a 5.0V, o que significa que ele pode ser alimentado diretamente a partir de um dos pinos de 3.3V do NodeMCU.

O Sensor possui 3 fios:

  • Preto: GND
  • Vermelho: VCC
  • Amarelo: 1-Wire Data

No link ao lado, voce encontrará a especificação completa: DS18B20 Datasheet

3: Conectando o sensor ao NodeMCU

Conecte os 3 fios do sensor NodeMCU como mostrado no diagrama abaixo:

  • Vermelho ==> 3.3V
  • Preto ==> GND
  • Amarelo ==> D4

Insira o NodeMCU, de forma que seus pinos correspondam ao diagrama elétrico acima. Observe que o chip pressionará o cabo do sensor, ajudando a manter os contatos do sensor no lugar.

introduza um resistor de 4.7K ohms entre VCC (3.3V) e Data (D4)

4: Instalando as bibliotecas apropriadas

Para o uso apropriado e de maneira simplificada do DS18B20, será necessária a instalação de 2 novas bibliotecas:

Instale ambas bibliotecas em seu diretório de Libraries do IDE

Observe que a biblioteca OneWire DEVE ser a versão modificada para ser usada com o ESP8266, caso contrário você receberá um erro durante a compilação. Você encontrará a última versão no link acima ou fazendo o download do arquivo zip abaixo:

5: Testando o sensor

Carregue o código em seu NodeMCU e monitore a temperature utilizando-se do  Serial Monitor IDE.

6: Utilizando o Blynk

  • Defina um nome (em meu caso: “Temperature Sensor”)
  • Selecione “NodeMCU” (ESP8266+WiFi) como HW Model
  • Copie o AUTH TOKEN a ser utilizado em seu programa (voce poderá enviar-lo diretamente a seu email).
Inclua um “Gauge” Widget

Defina:

  • Virtual pin a ser utilizado com o sensor: V10
  • A faixa de temperatura: -10 to 100 oC
  • A frequência para leitura dos dados: 1 sec
Includes a “History Graph” Widget,

definir V10 como virtual pin

Press “Play” (The triangle at right up corner)

Naturalmente, o Blynk  irá dizer-lhe que o NodeMCU está fora de linha. É hora de carregar o código completo no IDE do Arduino:

/**************************************************************
 * IoT Temperature Monitor with Blynk
 * Blynk library is licensed under MIT license
 * This example code is in public domain.
 * 
 * Developed by Marcelo Rovai - 05 January 2017
 **************************************************************/

/* ESP & Blynk */
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
char auth[] = "YOUR AUTH CODE HERE";

/* WiFi credentials */
char ssid[] = "YOUR SSID";
char pass[] = "YOUR PASSWORD";

/* TIMER */
#include <SimpleTimer.h>
SimpleTimer timer;

/* DS18B20 Temperature Sensor */
#include <OneWire.h>
#include<DallasTemperature.h> 
#define ONE_WIRE_BUS 2 // DS18B20 on arduino pin2 corresponds to D4 on physical board
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);
float temp;

void setup() 
{
 Serial.begin(115200);
 Blynk.begin(auth, ssid, pass);
 DS18B20.begin();
 timer.setInterval(1000L, getSendData);
}

void loop() 
{
 timer.run(); // Initiates SimpleTimer
 Blynk.run();
}

/***************************************************
 * Send Sensor data to Blynk
 **************************************************/
void getSendData()
{
 DS18B20.requestTemperatures(); 
 temp = DS18B20.getTempCByIndex(0);
 Serial.println(temp);
 Blynk.virtualWrite(10, temp); //virtual pin V10
}

Assim que o código for carregado e estiver em execução, verifique a aplicação BLYNK. Esta deverá também estar em execução.

Abaixo do código completo do Arduino para o seu projeto:

F05G780IXKPYLO4.ino

7: Conclusão

Como sempre, espero que este projecto possa ajudar outras pessoas a encontrarem o seu caminho no emocionante mundo da electrónica e do IoT!

“Saludos desde el sur del mundo!”

Não deixe de visitar e seguir minha página: MJRoBot.org no Facebook

Obrigado

Marcelo

40 Respostas para O IoT feito simples: Monitorando a temperatura desde qualquer lugar

  1. 

    Muito obrigado por compartilhar seus conhecimentos! Não utilizei todo o código, mas a parte das conexões e a parte do teste do sensor usando o código “Simple” foi o suficiente para eu conseguir resolver sozinho aqui!

    Curtir

  2. 

    Bom dia,
    Gostaria de alterar este sensor que utilizou para um sensor de nível de caixa d’água tipo boia horizontal, pode me ajudar com o código?

    Desde já agradeço.

    Curtir

  3. 

    Olá, o link .ino esta com prolemas… Estou querendo usar no ESP32 e tenho o seguinte erro abaixo, poderia me auxiliar:

    Arduino: 1.8.12 (Windows 7), Placa:”ESP32 Dev Module, Disabled, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), 240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 115200, None”

    In file included from C:\Users\Thalis Mazzarino\Documents\Arduino\DS18B20_Sensor_Digital_de_Temperatura_BLYNK\DS18B20_Sensor_Digital_de_Temperatura_BLYNK.ino:27:0:

    C:\Users\Thalis Mazzarino\Documents\Arduino\libraries\OneWire/OneWire.h:108:2: error: #error “Please define I/O register types here”

    #error “Please define I/O register types here”

    ^

    Foram encontradas múltiplas bibliotecas para “WiFi.h”
    Usado: C:\Users\Thalis Mazzarino\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\WiFi
    Não usado: C:\Program Files (x86)\Arduino\libraries\WiFi
    exit status 1
    Erro compilando para a placa ESP32 Dev Module

    Curtir

  4. 

    Olá Marcelo, como faço para registrar temperatura máxima e mínima com o blynk
    Obrigado.

    Curtir

  5. 

    Boa noite Marcelo, estou usando a placa do ESP32, gostaria de saber o que preciso alterar no código? ele a principio da erro em:
    #include
    e
    #include
    e
    #include

    Obrigado!

    Curtir

  6. 

    Boa noite, sou um estudante e estou desenvolvendo meu TCC com esse mecanismo. Contudo, minha interface no IDE Arduino está apresentando esse erro:

    In file included from C:\Users\Windows\Documents\Arduino\libraries\Arduino-Temperature-Control-Library-master\examples\Simple\Simple.pde:2:0:

    C:\Users\Windows\Documents\Arduino\libraries\OneWire/OneWire.h:119:2: error: #error “Please define I/O register types here”

    #error “Please define I/O register types here”

    ^

    exit status 1
    Erro compilando para a placa ESP32 Dev Module

    Poderia me ajudar por favor? Meu e-mail é kelvenbr@gmail.com

    Curtir

  7. 

    ficou chato pedir uma explicação como “anónimo” mas foi só por esquecimento. Meu nome é Ramiro

    Curtir

  8. 

    Que modificações devo fazer neste projeto para, em vez de ler e enviar um valor de temperatura, enviar só o estado de um sinal, se 0 ou se 1, que na prática pode corresponder por exemplo ao estado de um portão, se aberto, se fechado.
    Obrigado desde já pela resposta

    Curtir

  9. 

    Hello Marcelo,
    I am trying to use your excellent example with an ESP32 instead of ESP8266.
    It appears that Onewire.h requires some definition for ESP32.
    Can you please help me?
    Mille Grazie

    Curtir

  10. 

    Bisa noite, Marcelo!
    Tem alguma função que faz com que o nodeMCU se conecte ao Wi-Fi utilizando um usuário e senha?
    Ex.: Algumas redes Wifi são “abertas”, porém para ter acesso a internet é preciso ter um nome de usuário e senha.

    Desde já, Agradecido!

    Curtir

  11. 

    boa noite, para conseguir fazer a medição correta preciso comentar essa linha:
    //#include ,Se não o arduino dá uma infinidade de erros , segue o erro.
    Já tentei incluir varias bibliotecas, e seguir os mais diversos tutoriais e sempre da o mesmo erro:

    libraries\DallasTemperature\OneWire.cpp.o (symbol from plugin): In function `OneWire::write(unsigned char, unsigned char)’:

    (.text+0x0): multiple definition of `OneWire::write(unsigned char, unsigned char)’

    libraries\OneWire\OneWire.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\DallasTemperature\OneWire.cpp.o (symbol from plugin): In function `OneWire::write(unsigned char, unsigned char)’:

    (.text+0x0): multiple definition of `OneWire::write_bytes(unsigned char const*, unsigned int, bool)’

    libraries\OneWire\OneWire.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\DallasTemperature\OneWire.cpp.o (symbol from plugin): In function `OneWire::write(unsigned char, unsigned char)’:

    (.text+0x0): multiple definition of `OneWire::reset()’

    libraries\OneWire\OneWire.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\DallasTemperature\OneWire.cpp.o (symbol from plugin): In function `OneWire::write(unsigned char, unsigned char)’:

    (.text+0x0): multiple definition of `OneWire::write_bit(unsigned char)’

    libraries\OneWire\OneWire.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\DallasTemperature\OneWire.cpp.o (symbol from plugin): In function `OneWire::write(unsigned char, unsigned char)’:

    (.text+0x0): multiple definition of `OneWire::read_bit()’

    libraries\OneWire\OneWire.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\DallasTemperature\OneWire.cpp.o (symbol from plugin): In function `OneWire::write(unsigned char, unsigned char)’:

    (.text+0x0): multiple definition of `OneWire::read()’

    libraries\OneWire\OneWire.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\DallasTemperature\OneWire.cpp.o (symbol from plugin): In function `OneWire::write(unsigned char, unsigned char)’:

    (.text+0x0): multiple definition of `OneWire::read_bytes(unsigned char*, unsigned int)’

    libraries\OneWire\OneWire.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\DallasTemperature\OneWire.cpp.o (symbol from plugin): In function `OneWire::write(unsigned char, unsigned char)’:

    (.text+0x0): multiple definition of `OneWire::select(unsigned char const*)’

    libraries\OneWire\OneWire.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\DallasTemperature\OneWire.cpp.o (symbol from plugin): In function `OneWire::write(unsigned char, unsigned char)’:

    (.text+0x0): multiple definition of `OneWire::skip()’

    libraries\OneWire\OneWire.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\DallasTemperature\OneWire.cpp.o (symbol from plugin): In function `OneWire::write(unsigned char, unsigned char)’:

    (.text+0x0): multiple definition of `OneWire::depower()’

    Foram encontradas múltiplas bibliotecas para “OneWire.h”
    libraries\OneWire\OneWire.cpp.o (symbol from plugin):(.text+0x0): first defined here

    Usado: C:\Users\Jonatã\Documents\Arduino\libraries\OneWire
    libraries\DallasTemperature\OneWire.cpp.o (symbol from plugin): In function `OneWire::write(unsigned char, unsigned char)’:

    Não usado: C:\Users\Jonatã\Documents\Arduino\libraries\DallasTemperature
    (.text+0x0): multiple definition of `OneWire::reset_search()’

    libraries\OneWire\OneWire.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\DallasTemperature\OneWire.cpp.o (symbol from plugin): In function `OneWire::write(unsigned char, unsigned char)’:

    (.text+0x0): multiple definition of `OneWire::OneWire(unsigned char)’

    libraries\OneWire\OneWire.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\DallasTemperature\OneWire.cpp.o (symbol from plugin): In function `OneWire::write(unsigned char, unsigned char)’:

    (.text+0x0): multiple definition of `OneWire::OneWire(unsigned char)’

    libraries\OneWire\OneWire.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\DallasTemperature\OneWire.cpp.o (symbol from plugin): In function `OneWire::write(unsigned char, unsigned char)’:

    (.text+0x0): multiple definition of `OneWire::target_search(unsigned char)’

    libraries\OneWire\OneWire.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\DallasTemperature\OneWire.cpp.o (symbol from plugin): In function `OneWire::write(unsigned char, unsigned char)’:

    (.text+0x0): multiple definition of `OneWire::search(unsigned char*, bool)’

    libraries\OneWire\OneWire.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\DallasTemperature\OneWire.cpp.o (symbol from plugin): In function `OneWire::write(unsigned char, unsigned char)’:

    (.text+0x0): multiple definition of `OneWire::crc8(unsigned char const*, unsigned char)’

    libraries\OneWire\OneWire.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\DallasTemperature\OneWire.cpp.o (symbol from plugin): In function `OneWire::write(unsigned char, unsigned char)’:

    (.text+0x0): multiple definition of `OneWire::crc16(unsigned char const*, unsigned int, unsigned int)’

    libraries\OneWire\OneWire.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\DallasTemperature\OneWire.cpp.o (symbol from plugin): In function `OneWire::write(unsigned char, unsigned char)’:

    (.text+0x0): multiple definition of `OneWire::check_crc16(unsigned char const*, unsigned int, unsigned char const*, unsigned int)’

    libraries\OneWire\OneWire.cpp.o (symbol from plugin):(.text+0x0): first defined here

    collect2.exe: error: ld returned 1 exit status

    exit status 1
    Erro compilando para a placa Arduino/Genuino Uno

    Curtir

  12. 

    Olá Alguém poderia me ajudar? essa aula é oque preciso para terminar meu projeto na escola, porém esta ocorrendo um erro na copilação: >#include

    Curtir

  13. 

    Bom dia, Marcelo!
    Só uma dúvida, Posso trocar esse sensor de temperatura por um termo par do tipo K com um modulo leitor de temperatura MAX 6675, mostrado no link abaixo? Obrigado!

    https://produto.mercadolivre.com.br/MLB-804805490-modulo-leitor-temperatura-max6675-termopar-tipo-k-arduino-_JM

    Curtir

  14. 

    Bom dia!
    No lugar do Blynk posso utilizar o virtuino?

    Curtir

  15. 

    boa tarde Marcelo, só uma duvida, o ESP8266-01, possui apenas duas saídas digitais (GPIO 0 e 2) , essas saídas fazem leitura analógica? pois vi alguns tutoriais na net e o pessoal usa este ESP com sensor de temperatura/humidade e fazer a leitura normalmente.

    Curtir

    • 

      Ola. Nao. Estes pinos são para I/o digitais. Você pode utilizar um sensor digital de temperatura, por exemplo um DHT 11 ou 22. Eles têm 3 pinos, VCC, GND é um pino de saída de dados que fornece dados de temperatura e umidade. Este pino de dados deve ser ligado a um dos GPIOs do ESP-01.

      Curtir

  16. 

    #include What’s this library? Where can I download it?

    Thanks!!

    Curtir

  17. 

    Olá Marcelo, estou com dois problemas: O primeiro deles é que ao rodar o “Dallas Temperature” – Simple a temperatura registrada é de -127 C. O segundo problema é que ao carregar o código no IDE do Arduino da um erro: “Error compiling for board NodeMCU 1.0 (ESP-12EModule)”, mas a placa que eu estou usando é essa!
    Muito obrigada,
    Luisa.

    Curtir

    • 

      Hi Marcelo, I am having troubles. First of all, when I run “dallas Temperature” – Simple the temperature register is -127 C. The second problem is that when I run the code on Arduino’s IDE this is the message that I get: “Error compiling for board NodeMCU 1.0 (ESP-12EModule)”, but my board is the NodeMCU 1.0 (ESP-12EModule)!
      Thank you,
      Luisa.

      Curtir

  18. 

    Hola,
    can you help me please? how to connect three ds18b20?
    obrigado

    Curtir

Trackbacks e Pingbacks:

  1. O IoT feito simples: Monitorando múltiplos sensores - Internet das coisas - IOT - julho 23, 2019

    […] O IoT feito simples: Monitorando a temperatura desde qualquer lugar […]

    Curtir

  2. O IoT feito simples: Monitorando. – Tadeu System - março 27, 2019

    […] 6 06-03:00 janeiro 06-03:00 2017 — 32 Comentários […]

    Curtir

  3. O IoT feito simples: Monitorando múltiplos sensores « - setembro 10, 2017

    […] Alguns meses atrás, publiquei aqui um tutorial sobre o monitoramento de temperatura usando o DS18B20, um sensor digital que se comunica através de um barramento de um único fio (bus do tipo “1-wire”), sendo os dados enviados pela à internet com a ajuda de um módulo NodeMCU e o aplicativo Blynk:O IoT feito simples: Monitorando a temperatura desde qualquer lugar […]

    Curtir

Deixe um comentário