A BeagleBone Black é um nome muito importante no mundo maker, sobretudo no quesito de projetos IoT. Porém, nem sempre tudo está no “caminho feliz”. Imagine-se numa situação onde é preciso fazer um projeto para registrar determinados dados (para posterior análise). Seria relativamente simples se utilizar uma plataforma como o ThingSpeak, por exemplo, certo? Mas e se o local onde o projeto for aplicado não possuir acesso à Internet (uma fazenda, por exemplo), como se faz? É isto que esse post irá mostrar, montando um datalogger com BeagleBone Black com a gravação dos dados em um pendrive.
O que é um datalogger?
Um datalogger é um dispositivo eletrônico capaz de registrar, ao longo do tempo, dados diversos (normalmente, originados de leituras de sensores). O estímulo (“trigger”) para o registro de um dado neste tipo de equipamento pode ser de dois tipos:
- Por periodicidade e amostragem: de tempos em tempos os dados são registrados, sendo assim uma aquisição à taxa de amostragem fixa (X amostras / segundo)
- Por evento: mediante o atendimento de alguma condição (nivel de sinal de um sensor, por exemplo), N dados são registrados. Aqui, como não há uma periodicidade, não se tem uma taxa de amostragem constante ao longo do registro de sinal.
Em suma, um datalogger é capaz de ler sensores e registrar os valores de leitura para posterior análise.
Onde os dados serão armazenados?
No projeto deste post, conforme já explicitado anteriormente, não se fará uso de Internet. Neste caso, como o volume de dados pode ser grande (você pode precisar registrar dados por períodos indo de poucos minutos até semanas dependendo da aplicação), iremos utilizar como memória de armazenamento dos registros um pendrive comum.
A BeagleBone Black conta com uma entrada USB Host, o que permite utilizar um pendrive na mesma sem nenhum adaptador adicional, como na imagem mostrada no início deste post.
Procedimento para uso do pendrive na BeagleBone Black
A título de conhecimento, o procedimento para utilização de um pendrive na BeagleBone Black pode ser visto a seguir:
- Acessar a BeagleBone Black via SSH. Se não sabe como fazer isto, confira este tutorial.
- Insira um pendrive na porta USB da placa
- No terminal (acesso via SSH), digite o seguinte comando:
fdisk -l
Este comando mostrará os discos / memórias de armazenamento presentes (no caso, a memória flash da placa e o pendrive). Observe a execução deste comando em uma BeagleBone Black nossa:
Conforme observado na figura, o pendrive está se mostrando como um sistema de arquivos no dispositivo sda1 (/dev/sda1).
- Digite o seguinte comando:
mkdir /media/usb
Este comando irá criar o local onde o pendrive será montado no Linux.
- Faça a montagem do pendrive / memória de armazenamento. No Linux, a montagem é a inclusão de um sistema de arquivos qualquer (no caso, um pendrive) na árvore de sistema de arquivos do Linux. Em outras palavras, permitirá usar o pendrive como uma memória de armazenamento qualquer. Para fazer isto, digite o seguinte comando:
mount /dev/sda1 /media/usb
Onde /media/usb se refere ao diretório criado no passo 4.
- A partir deste momento, o pendrive pode ser acessado normalmente. Para acessá-lo e listar todos os arquivos gravados na pasta raíz, por exemplo, digite os seguintes comandos:
cd /media/usb ls
Atenção: se desejar parar de usar o pendrive e/ou remover o pendrive da placa, SEMPRE faça a desmontagem, caso contrário corre-se um sério risco de danos à memória flash do pendrive. Isto é equivalente a quando usamos o “Remover dispositivo com segurança” no Windows. Para efetuar a desmontagem, utilize o seguinte comando:
umount /media/usb
Projeto Datalogger com BeagleBone Black
O projeto deste post é um datalogger de temperatura e umidade relativa do ar. Ambos os dados serão lidos a cada 10 segundos e registrados no pendrive na forma de um arquivo csv (o que permitirá, após a aquisição de dados, diretamente analisá-los em um programa como o Excel). O sensor utilizado é o DHT22.
O circuito esquemático do datalogger com BeagleBone Black pode ser visto a seguir. A alimentação pode ser feita tanto pela USB quanto pela entrada de fonte DC 5V.
Bibliotecas necessárias
Para este projeto, será necessário instalar a biblioteca (para Python) para comunicar com o sensor DHT22. O procedimento de instalação e link para o repositório GitHub da biblioteca é exibido neste site.
Código-fonte
O código-fonte do projeto pode ser visto a seguir.
IMPORTANTE: observe que o programa automaticamente monta e desmonta o pendrive. Portanto, para este projeto, não é preciso fazer a montagem e desmontagem manualmente.
#Projeto: Datalogger com BeagleBone Black - Temperatura e umidade. # Salva os dados em um pendrive, na forma de um arquivo CSV. #Autor: Pedro Bertoleti #Data: Dezembro/2016 import os import time from datetime import datetime import Adafruit_DHT #Variaveis globais ArqLog="/media/usb/Registros.csv" #caminho do arquivo de log no pendrive sensor = Adafruit_DHT.DHT22 #seleciona o tipo de sensor (no caso, DHT22) pin='P8_11' #pino da BeagleBone Black onde esta ligado o terminal de dados do DHT22 #Funcao: monta pendrive #Parametros: nenhum #Retorno: nenhum def MontaPendrive(): print("[PENDRIVE] Montando pendrive...") os.system("mount /dev/sda1 /media/usb") print("[OK] Pendrive montado") #Funcao: desmonta pendrive #Parametros: nenhum #Retorno: nenhum def DesmontaPendrive(): print("[PENDRIVE] Desmontando pendrive...") os.system("umount /media/usb") print("[OK] Pendrive desmontado") #------------------ #Programa principal #------------------ os.system("clear") #monta pendrive MontaPendrive() #escreve cabecalho no arquivo StrCabecalho="Data/Hora,Temperatura(.C),Umidade" file = open(ArqLog,"w") file.write(StrCabecalho) file.write('n') file.close() while(True): try: #le a umidade e temperatura umidade, temperatura = Adafruit_DHT.read_retry(sensor, pin) #converte as leituras em string StrUmidade = str(umidade) StrTemperatura = str(temperatura) #compoe string contendo as duas informacoes StrDados = str(datetime.now())+","+StrTemperatura+","+StrUmidade #grava as informacoes no arquivo de log (em modalidade append) file = open(ArqLog,"a") file.write(StrDados) file.write('n') file.close() #mostra na tela o dado registrado: print "[REGISTRO] Temperatura: "+StrTemperatura+"*C ; Umidade: "+StrUmidade print 'n' time.sleep(1) except KeyboardInterrupt: file.close() DesmontaPendrive() print("Aplicacao encerrada.") exit(1)
Salve o arquivo como DataLogger.py .
Resultado da execução do programa
Vamos agora testar o datalogger com BeagleBone Black. Primeiramente, insira o pendrive na BeagleBone Black. Em seguida, para executar o programa, digite o seguinte comando:
python DataLogger.py
A execução será iniciada. Primeiramente, será feita a montagem do pendrive. Em seguida, as leituras do sensor e gravações no arquivo csv. Finalmente, ao se pressionar Ctrl+C, o programa é encerrado. O resultado da execução na tela do terminal Linux é mostrado na figura abaixo:
Feito isso, remova o pendrive da BeagleBone Black e insira-o no computador. Você verá um arquivo CSV no pendrive chamado Registros.csv, conforme mostra a imagem a seguir:
A partir daqui, basta utilizar o arquivo CSV como quiser (inclusive no prórpio Excel)!
Se você desejar, pode utilizar algum visualizador de arquivos CSV online. Como sugestão, recomendo o Online CSV Viewer. Nele, configure o separador como vírgula (comma), conforme mostra a imagem a seguir:
Gostou do post Datalogger com BeagleBone Black? Deixe seu comentário logo abaixo.
preciso de um datalogger para medir corrente AC até 100 A em painel de casa e registrar até 1000 eventos. registrando em pendrive, com tc aberto, pode ver ?
[email protected]
Onde eu salvo o código fonte?
Ótima Aula!
Nilson, muito obrigado!!
Gustavo, boa tarde.
Apesar desta situação que você falou se tratar de um projeto totalmente diferente do aqui apresentado, sim, é possível.
Atenciosamente,
Pedro Bertoleti
E se, ao invés de gravar em um pendrive, eu salvar o arquivo e posteriormente enviar via bluetooth. Daria certo?