Desenvolvimento

4 ago, 2017

Sensor DS18B20 com ESP8266 e tago.io

Publicidade

Um dos exemplos mais utilizados em apresentações de Internet das Coisas é o sensor de temperatura, utilizando a nuvem, é claro. Normalmente, nesse exemplo, é dado um cenário em que a temperatura de uma sala, máquina ou quarto precisa ser monitorada, seja para o controle do ar condicionado ou mesmo para monitorar o funcionamento correto de um equipamento.

Para recriar esse exemplo, vamos focar na coleta dos dados de um sensor pelo ESP8266 e o envio para uma plataforma na nuvem, que neste caso, vamos utilizar a plataforma da tago.io, mas poderá ser qualquer outra plataforma.

Sobre a tago.io

A tago é uma startup localizada nos Estados Unidos que desenvolve uma plataforma para a coleta de dados de dispositivos conectados.

Para maiores informações a respeito da Tago, acesse: tago.io

A Tago foi uma das nossas primeiras parceiras!

O hardware

O hardware utilizado será um ESP8266, placa nodeM e o sensor de temperatura é o DS18B20 da Maxim Integrated.

O sensor DS18B20, é um sensor de temperatura de 1-Wire (apenas um fio da dados bidirecional), que mede temperaturas entre -55 até 125°C, com uma precisão de 0,5% entre -10 e 85°C e resolução de 12bits.

Não vou entrar em muitos detalhes do sensor, já que foi muito bem abordado no blog do Djames Suhanko.

O sensor tem três terminais, ou fios, dependendo da versão, componente PTH ou o sensor à prova d’água. Para fazer a ligação, precisamos de apenas um pino digital do ESP, o que ajuda muito a economizar GPIO.

Se tiver mais que um sensor, pode ser usado o mesmo pino, já que o sensor é endereçável e permite mais de um sensor no mesmo barramento/pino. Para ligar o sensor, vamos seguir o esquema abaixo:

  • Vermelho: VCC (3 a 5.5V)
  • Preto: GND
  • Laranja: Dados

Para o pino de dados, é necessário um resistor de pullup de 4.7k (entre o VCC e Dados).

A plataforma

A plataforma Tago não é 100% gratuita ou open-source, mas dispõe de um plano gratuito com limitações. Neste plano, é possível criar até 5 dispositivos, 25 mil registros na base de dados, 100 mil requisições por mês e ainda a criação de até 5 dashboards (painéis de visualização dos dados) entre outras funções.

Frente as outras opções de plataformas gratuitas, o grande diferencial da Tago é que em um projeto maior, o plano gratuito pode ser convertido no plano pago, aumentando as capacidades da plataforma e as possibilidades do projeto.

No geral, para projetos maker, a Tago é uma excelente opção, com muitas funcionalidades interessantes.

Integração

Para iniciar, vamos criar uma conta na tago.io, e cadastrar o nosso primeiro device lá. Para isso, após o cadastro, faça o login e clique em “Device” e depois no sinal de mais (+) no canto superior direito para adicionar um novo dispositivo. Preencha as informações e salve.

Após o dispositivo adicionado, acesse novamente o dispositivo no menu “Devices” e selecione a aba “Tokens”. Esse token será usado para o ESP enviar os dados para ele, no “bucket” (base de dados) correto.

Copie o token/apiKey no código abaixo, compile e grave no ESP.

Código

#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h> //https://github.com/tzapu/WiFiManager
#include <OneWire.h>
#include <DallasTemperature.h>
 
#define SENSOR_PIN D4
 
WiFiManager wifiManager;
WiFiClient client;
OneWire oneWire(SENSOR_PIN);
DallasTemperature sensors(&oneWire);
 
float temp = 0.0;
 
String apiKey = "COPIE_O_TOKEN_AQUI"; //o token vai aqui
const char* server = "api.tago.io";
 
 
void setup() {
  Serial.begin(115200);
  sensors.begin();
  wifiManager.autoConnect("SensorTemperatura");
  
}
 
void envia_dados(void){
 
  sensors.requestTemperatures();
  temp = sensors.getTempCByIndex(0);
  Serial.println(temp);  
 
  //Inicia um client TCP para o envio dos dados
  if (client.connect(server,80)) {
 
    Serial.print("CONNECTED AT TAGO\n");
 
    String postStr = "";
 
    String postData = "variable=temp&value="+String(temp)+"\n";
 
    postStr = "POST /data HTTP/1.1\n";
    postStr += "Host: api.tago.io\n";
    postStr += "Device-Token: "+apiKey+"\n";
    postStr += "_ssl: false\n";
    postStr += "Content-Type: application/x-www-form-urlencoded\n";
    postStr += "Content-Length: "+String(postData.length())+"\n";
    postStr += "\n";
    postStr += postData;
 
    client.print(postStr);
    //Serial.print("%d", postStr);
 
    unsigned long timeout = millis();
    while (client.available() == 0) {
      if (millis() - timeout > 5000) {
        Serial.println(">>> Client Timeout !");
        client.stop();
        return;
      }
    }
 
    while(client.available()){
      String line = client.readStringUntil('\r');
      Serial.print(line);
    }
 
  }
  client.stop();
 
}
 
// the loop function runs over and over again forever
void loop() {
    envia_dados();
    delay(30000);
}

Feito isso, os dados serão enviados para a Tago e armazenados no sistema. Dá para criar um dashboard agora com os dados que estão sendo enviados, com gráficos, gauges, tabelas, entre outros widgets disponibilizados na plataforma.

Conclusão

A plataforma da Tago é uma alternativa bem interessante para quem está procurando uma solução que possa atender a demandas comerciais num futuro próximo, já que com planos pagos, existe um suporte que pode ser a diferença em projetos mais complexos.