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.