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.











