Introdução
Já faz alguns anos que a famigerada Internet of Things (IoT) está entre os tópicos mais badalados da área. Não que antes não houvessem dispositivos embarcados que se conectassem à internet, mas de um tempo pra cá, impulsionado pelo estilo de vida cada vez mais conectado da população e pelo avanço de hardware, surgiu um movimento forte de pessoas e empresas trabalhando nesse assunto.
E com tanta gente pensando e desenvolvendo soluções para conectar seus dispositivos na internet, já surgiram na comunidade incontáveis abordagens e projetos diferentes para todo tipo de situação em que o seu dispositivo possa se encaixar.
Neste post vou falar um pouco de um desses projetos, o ThingSpeak, que nada mais é do que uma aplicação e API open source desenvolvidos com o framework Ruby on rails, e que podem ser utilizados para armazenar, enviar, organizar, processar e até exibir de forma gráfica os seus dados, que podem ser informações comuns, de localização, ou de status dos seus dispositivos.
A aplicação ThingSpeak com a qual as “coisas” irão se conectar por HTTP pode ser instalada em qualquer computador, dispositivo, ou até mesmo ser utilizada na nuvem por meio do thingspeak.com.
A ideia é que a plataforma funcione como um concentrador de dados e serviços, onde as informações de todos os seus dispositivos vão estar armazenadas e organizadas.
Na prática
Como de costume vou usar uma Beaglebone Black revisão C e sua última imagem oficial com Debian. Também vou utilizar o acesso à internet para o nosso exemplo e para clonar o projeto do GitHub.
Nosso código será desenvolvido em Python 2.7.3 e irá ler a temperatura ambiente com o sensor de temperatura LM35 utilizando o conversor A/D da Beaglebone Black conforme explicado no post anterior, e irá subir essa e outras informações do dispositivo para o thingspeak.com.
Criando o seu canal no ThingSpeak.com
- Acesse o site thingspeak.com;
- No canto superior esquerdo clique em cadastro, preencha com suas informações e crie sua conta;
- Entre com seu login no site, e clique na aba “Canais -> Meus canais”;
- No painel “Meus Canais” clique em “New Channel”.
- Coloque o nome que você quiser ao seu canal e aos campos de dados que você irá trabalhar, e clique em “Save Channel”.
- Em seguida clique na aba “Chaves”, e preste atenção na “Chave de Escrita”, você vai precisar dela para fazer upload dos dados coletados mais adiante;
- Por último clique na aba “Private View”, onde cada campo que você nomeou já tem o seu próprio gráfico construído, e está aguardando dados para serem desenhados.
O circuito
O circuito para ligar o sensor LM35 na Beaglebone Black é simples, e pode ser observado no esquema abaixo.
O script
Agora vamos desenvolver um código para a Beaglebone Black realizar a leitura do sensor de temperatura e envia-la para o thinsgspeak.com.
O código está no GitHub. Para clonar o projeto, habilitar o conversor A/D e rodar o script basta utilizar os comandos seguintes:
git clone https://github.com/igorTavares/bbb_thingspeak_temperature.git echo BB-ADC > /sys/devices/bone_capemgr.*/slots cd bbb_thingspeak_temperature python thingspeak_temperature.py
As explicações estão todas nos comentários do script, assim acho que fica mais fácil de visualizar o funcionamento do programa.
#!/usr/bin/env python
import httplib, urllib
import time
import subprocess
def get_temp():
# Faz a leitura do ultimo valor registrado pelo conversor A/D
output = subprocess.check_output("cat /sys/bus/iio/devices/iio:device0/in_voltage0_raw", shell=True)
# Regra de tres para calcular o valor do sinal em volts
voltage = (float(output)*1.8)/4096.0
print "Voltage = " + str(voltage)
# De acordo com o datasheet do LM35: 1C/10mV
temperature = (voltage*100)
print "Temperature = " + str(temperature)
return temperature
def upload(value):
#ATENCAO! Sua"Chave de Escrita" vai aqui!
params = urllib.urlencode({'field1': value,'key':'OBVJD8A6YW9TCN0I'})
headers = {"Content-typZZe": "application/x-www-form-urlencoded","Accept": "text/plain"}
# Conecta no servidor HTTP do thingspeak.com
conn = httplib.HTTPConnection("api.thingspeak.com:80")
try:
conn.request("POST", "/update", params, headers) # Tenta fazer uma requisicao
response = conn.getresponse() # Recebe e imprimi na tela a resposta
print response.status, response.reason
conn.close() # Fecha a conexao
except (httplib.HTTPException) as error:
print "Error at httplib module: %s" % error
except (IOError) as error:
print "Error at urllib module: %s" % error # Escreve no terminal caso ocorra falha
except:
print "connection failed"
print ""
if __name__ == "__main__":
while True:
temp = get_temp() # Faz a leitura da temperatura
upload(temp) # Faz upload da leitura
time.sleep(16) # Espera 16s
# OBS: Para o thingspeak.com o tempo minimo entre
# uma amostra e a seguinte deve ser de 15 segundos.
Resultado na Beaglebone Black:
Resultado no ThingSpeak:







Voce teria como colocar esse scritp para ler o Sensor de Temperatura DTH22?
OBrigado
Fala Leonardo! É possível sim!
E o serviço fica bem fácil com essa bibloteca open-source aqui:
https://github.com/adafruit/Adafruit_Python_DHT
Bem tranquilo!
Abraços!
Ola Igor,
Sou novo em Linux.
Segui os passos e ocorreu erro (Permission denied) quando tentei habiliitar ao conversor A/D. Como posso contornar esse problema?
debian@beaglebone:~/bbb_thingspeak_temperature$ echo BB-ADC > /sys/devices/bone_capemgr.*/slots
bash: /sys/devices/bone_capemgr.9/slots: Permission denied
Você tem que executar como root. Tente rodar o comando “sudo su” antes!
Valeu!
Blz Igor.
Deu certo usando o comando “Sudo su”, mas ocorreu outro erro. Estou usando Debian GNU/Linux 7 BeagleBoard.org Debian Image 2015-02-01. Como posso sair dessa
root@beaglebone:/# echo BB-ADC > /sys/devices/bone_capemgr.*/slots
bash: echo: write error: File exists
Esse “write error” provavelmente está acontecendo porque não deve ser a primeira vez que você está executando o comando, e o ADC já deve estar habilitado!
Rode o comando “cat /sys/devices/bone_capemgr.*/slots” e veja se o ADC já está habilitado.
Demonstrei seu funcionamento no artigo “https://embarcados.com.br/beaglebone-black-conversor-ad-sensor-ultrassonico/”
seria algo como a sua opção 2. Sou developer. Tenho uma bbb e quero usa o android (celular) como client pra receber dados das “coisas”. Com base no IoT
entende?
Entendi cara, legal demais, realmente seria bem bacana um app para visualizar, e quem sabe até processar os dados!
Não conheço nenhum que faz isso hoje interagindo com o ThingSpeak, só o CloudSensor, mas ele faz o contrário, ele transforma o celular em uma das “coisas”.
Não sou desenvolvedor Android, mas acho que deve ser tranquilo. Você só precisaria enviar um HTTP GET para o seu canal no ThingSpeak.com, ele vai retornar o feed inteiro dos dados que ele já recebeu, e dai você trabalha com eles como quiser.
Esse link explica legal o procedimento:
https://thingspeak.com/docs/channels#get_feed
Como usar isso no android app ?
Brother, não entendi sua pergunta… Você quer usar algum dispositivo Android para enviar dados para a nuvem ou que um app para visualizar o que seus dispositivos estão “upando”?