É 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:
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
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!
CurtirCurtir
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.
CurtirCurtir
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
CurtirCurtir
Olá Marcelo, como faço para registrar temperatura máxima e mínima com o blynk
Obrigado.
CurtirCurtir
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!
CurtirCurtir
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
CurtirCurtir
ficou chato pedir uma explicação como “anónimo” mas foi só por esquecimento. Meu nome é Ramiro
CurtirCurtir
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
CurtirCurtir
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
CurtirCurtir
found the answer. uninstall the onewire library that has been modified for 8266 and install the one as explained here: https://diyprojects.io/temperature-measurement-ds18b20-arduino-code-compatible-esp8266-esp32-publication-domoticz-http/#.WtdvBS8lRdA
CurtirCurtido por 1 pessoa
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!
CurtirCurtir
Oi Felipe. Sim e é bem comum. se voce da uma olhada em meus tutoriais envolvendo o NodeMCU, a maioria dos mesmos se conecta a rede local via user/senha.
CurtirCurtir
Primeiramente, muito obrigado!
No meu caso, a minha rede tem um SSID, porém para se conectar á ela, por exemplo, no celular, sou redirecionado para uma página para que eu coloque o nome de usuário e a senha na qual sou cadastrado. A minha dúvida é como explicitar isso no código. Visto que na maioria se tem apenas o campo para o SSID e a senha.
Muito obrigado, Marcelo!
CurtirCurtir
Ah! Imagino que voce esteja utilizando uma rede com protocolo de segurança do tipo SSL/TLS. Nestes casos, a biblioteca WiFiClient do NodeMCU não funciona. Acredito que exista uma biblioteca especial para estes casos (WiFiClientSecure), mas eu nunca trabalhei com ela. Por exemplo, de uma olhada neste post:
https://io.adafruit.com/blog/security/2016/07/05/adafruit-io-security-esp8266/
Um abraço
Marcelo
CurtirCurtir
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
CurtirCurtir
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
CurtirCurtir
Abner, qual é o erro?
CurtirCurtir
Cara já não é mais na copilação do projeto, e sim de circuito, se você podesse me repassar seu Gmail ou coisa parecida seria eu muito grato!
CurtirCurtir
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
CurtirCurtir
Ou Felipe. Poder, você pode. Mas será outro projeto (ou pelo menos a parte de leitura do sensor). Este módulo Max6675 funciona com outro protocolo de comunicação (SPI) de 3 fios. Mas existem bibliotecas simples para trabalhar com ele (Adafruit). A mesma biblioteca para o Arduino funciona com o NodeMCU. Eu nunca trabalhei com este sensor/módulo, mas não seria complicado adotar o projeto para usá-lo.
CurtirCurtir
Neste link você poderá encontrar sobre a biblioteca e exemplo de código:
https://learn.adafruit.com/adafruit-max31856-thermocouple-amplifier/wiring-and-test
CurtirCurtir
Muito obrigado, Marcelo
CurtirCurtir
Bom dia!
No lugar do Blynk posso utilizar o virtuino?
CurtirCurtir
Eu nunca usei essa App, mas vi que ela conversa com o NodeMCU, programado como WebServer. Logo não teria problema de você enviar os dados de temperatura para a App.
CurtirCurtir
Rapaz! Adorei a página, muito boa, muito didática e a equipe é muito atenciosa^. Vocês estão de parabéns!
Voltando ao assunto, o problema que encontrei no Blynk é que ele não tem a função de alarme, por exemplo, alarmar quando a temperatura ultrapassar 120 °C, ou estou enganado?
CurtirCurtir
Primeiro, muito obrigado! Adorei o elogio a “equipe”. Todos nós “eu”, agradecemos!!!! Heheheh. Aqui sou só eu mesmo que vou registrando o que vou aprendendo! 😉
O Blynk tem sim serviço de envio de mensagem ao celular quando um evento acontece. Você pode fazer isso direto do código. De uma olhada neste outro projeto:
CurtirCurtir
https://mjrobot.org/2016/12/03/iot-sensor-de-movimento-com-o-nodemcu-e-blynk/
CurtirCurtir
Olá, Felipe
Tudo bem?
Você conseguiu usar o Viruino?
CurtirCurtir
Olá, Felipe,
Tudo bem?
Você conseguiu usar o Virtuino nesse projeto ou outro?
Estou com dificuldades e gostaria de solicitar uma consultoria.
CurtirCurtir
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.
CurtirCurtir
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.
CurtirCurtir
#include What’s this library? Where can I download it?
Thanks!!
CurtirCurtir
* -> BlynkSimpleEsp8266.h
CurtirCurtir
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.
CurtirCurtir
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.
CurtirCurtir
Hola,
can you help me please? how to connect three ds18b20?
obrigado
CurtirCurtir
Hi Marco,
You must first read the internal address of each one one of your sensors and modify the main program.
Please follow bellow tutorial, there you will find both, the program to read the individual address and an example tom read them.
https://arduino-info.wikispaces.com/Brick-Temperature-DS18B20
Thanks
CurtirCurtir