Com o fenómeno do IoT, Internet of Things, a aumentar a cada dia que passa é importante saber como colocar os valores que obtemos dos sensores que ligamos ao Arduino numa base de dados online.
Hoje vamos explorar algumas maneiras de fazer isto recorrendo a uma ligação direta ao servidor, e ainda ver como interligar o Arduino ao Raspberry Pi.
Para isso vamos utilizar um Raspberry Pi a correr um servidor Apache e uma base de dados MySQL. O objectivo é transmitir os dados do Arduino para o Raspberry e este depois fazer a comunicação com a base de dados.
Para criar um servidor Apache e uma base de dados MySQL no Raspberry Pi podem seguir Este Tutorial AQUI.
No lado do Arduino vamos ler o valor da temperatura ambiente através de um DHT11. O código utilizado é o seguinte:
#include //Carrega a biblioteca DHT dht11 DHT11; void setup(){ DHT11.attach(2); Serial.begin(9600); } void loop(){ int chk = DHT11.read(); Serial.println(DHT11.temperature, DEC); delay(2000); }
A biblioteca necessária pode ser encontrada Aqui.
As ligações no Arduino são as seguintes:
LIGAÇÃO DIRECTA:
Neste caso vamos ligar o Arduino ao Raspberry Pi através de USB, sendo que o Arduino envia os valores para o Serial e o Raspberry Pi, usando um script Python, lê o Serial e posteriormente coloca os valores na base de dados.
O script de Python necessário é o seguinte:
#!/usr/bin/python # -*- coding: utf-8 -*- import os import MySQLdb as mdb import serial import time import datetime # Function for storing readings into MySQL def insertDB(value, hourSend, hourStored): try: con = mdb.connect('localhost', 'root', 'itgloria', 'Tese'); cursor = con.cursor() sql = "INSERT INTO Testes(`id`,`value`,`hourSend`,`hourStored`) \ VALUES (NULL, '%s', '%s', '%s')" % \ (value, hourSend, hourStored) cursor.execute(sql) con.commit() con.close() except mdb.Error, e: con.rollback() print "Error %d: %s" % (e.args[0],e.args[1]) sys.exit(1) ser = serial.Serial('/dev/ttyACM0', 9600) # obter porta USB do Arduino try: while 1: got_value = ser.readline() # ler Serial do Arduino print "Value: " print got_value got_hourSend = 'null' ts = time.time() got_hourStored = datetime.datetime. fromtimestamp(ts).strftime('% Y-%m-%d$ insertDB(got_value, got_hourSend, got_hourStored) # inserir dados na BD except KeyboardInterrupt: pass
Como é possível verificar o valor é lido pelo Raspberry e depois colocado na base de dados, indicando também a hora a que foi lido pelo mesmo.
Existe ainda um campo para a hora a que foi enviado, que pode ser obtido usando um RTC no Arduino.
Este caso é pouco usual, devido às limitações existentes principalmente no que toca ao tamanho do cabo. Ou seja, esta limitado ao Arduino estar muito perto do servidor.
No futuro vamos abordar outras alternativas, tais como Bluetooth, Radio Frequência, Ethernet e WiFi de modo ultrapassar as desvantagens das ligações directas.
por André Glória
—————
Todos os produtos utilizados neste artigo podem ser encontrados na Loja de Eletrónica e Robótica – ElectroFun.
Gostaram deste artigo ? Deixem o vosso comentário no formulário a baixo.
Não se esqueçam de fazer like na nossa Página no Facebook.
Podem ainda colocar as vossas dúvidas no nosso Forum da Comunidade Arduino em Portugal ou no nosso Grupo no Facebook Arduino Portugal – Qual o teu projeto?