Beaglebone Black – IoT com ThingSpeak

thingspeak

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.

Figura 1 – ThingSpeak e IoT.

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.

Figura 2 – Beaglebone Black e o sensor de temperatura LM35.

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”.
Figura 3 – Criando canal no ThingSpeak.com.
  • 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.

Figura 4 – Montagem da Beaglebone Black com o sensor de temperatura LM35.

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:

Figura 5 – Resultado na Beaglebone Black.

Resultado no ThingSpeak:

Figura 6 – Resultado no ThingSpeak.

Referências

[1] https://thingspeak.com/

[2] https://github.com/iobridge/ThingSpeak

[3] https://rubyonrails.org/

[4] https://thingspeak.com/channels/public

[5] https://embarcados.com.br/beaglebone-black-gravando-uma-nova-imagem/

[6] https://embarcados.com.br/beaglebone-black-internet-pela-usb/

[7] https://github.com/igorTavares/bbb_thingspeak_temperature

[8] https://www.ti.com/lit/ds/symlink/lm35.pdf

[9] https://embarcados.com.br/beaglebone-black-conversor-ad-sensor-ultrassonico

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
10 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Leonardo L
Leonardo L
03/10/2015 13:05

Voce teria como colocar esse scritp para ler o Sensor de Temperatura DTH22?
OBrigado

Igor Borges
Igor Borges
Reply to  Leonardo L
04/10/2015 10:44

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!

pcpx
pcpx
15/03/2015 11:45

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

Igor Borges
Igor Borges
Reply to  pcpx
15/03/2015 12:28

Você tem que executar como root. Tente rodar o comando “sudo su” antes!
Valeu!

pcpx
pcpx
Reply to  Igor Borges
15/03/2015 19:52

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

Igor Borges
Igor Borges
Reply to  pcpx
16/03/2015 08:16

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/”

neuber jose sousa
neuber jose sousa
14/02/2015 12:47

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?

Igor Borges
Igor Borges
Reply to  neuber jose sousa
14/02/2015 20:03

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

neuber jose sousa
neuber jose sousa
12/02/2015 08:50

Como usar isso no android app ?

Igor Borges
Igor Borges
Reply to  neuber jose sousa
14/02/2015 10:25

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”?

Home » Hardware » Placas de desenvolvimento » Beaglebone Black – IoT com ThingSpeak

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: