Enunciado
Hacer un datalogger de los datos de temperatura leídos por un Arduino y grabarlos en una Raspberry Pi que tenga un servidor LAMP instalado. Se grabarán en una tabla de una BBDD MySQL los datos de temperatura que mande Arduino cada 5 segundos. También se grabarán en un servidor público cada 30 segundos, en este caso en www.aprendiendoarduino.com.
Este ejercicio consiste en programar un Arduino que manda datos a un servidor mediante request GET HTTP. Los datos que mandará Arduino son la temperatura leída por el sensor de temperatura cada 5 segundos y el número de arduino con el formato: “arduino=5&temperatura=21.8”. Estos datos son recogidos por un script php (el que es llamado por el HTTP request de Arduino) que se encarga de grabarlos en la base de datos correspondiente.
Usamos Push: Arduino se comunica con el servidor para mandarle los datos http://www.tweaking4all.com/hardware/arduino/arduino-ethernet-data-push/
Información y referencias usadas
- Ejemplo: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio32-EnviaDatos
- WebClient: http://arduino.cc/en/Tutorial/WebClient
- Métodos POST y GET de HTTP: http://www.w3schools.com/tags/ref_httpmethods.asp
Para poder usar una Raspberry Pi en este ejercicio, necesitamos instalar un servidor LAMP, tutoriales de como hacerlo:
- https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-debian
- http://elinux.org/RPi_A_Simple_Wheezy_LAMP_install
- En castellano: http://www.taringa.net/posts/linux/16939507/Instalacion-de-un-completo-sevidor-web-LAMP-en-raspberry-pi.html
- Un poco más completos: http://www.tariqkhan.co.uk/articles/creating-a-raspberry-pi-web-server/ y http://www.tariqkhan.co.uk/articles/creating-a-raspberry-pi-lamp-server/
También podemos instalar Postfix en Raspberry Pi como servidor SMTP para mandar correos desde nuestro Arduino al ocurrir un evento como por ejemplo superar un umbral de temperatura:
- https://samhobbs.co.uk/2013/12/raspberry-pi-email-server-part-1-postfix
- http://www.tariqkhan.co.uk/articles/creating-a-raspberry-pi-mail-server/
NOTAS:
- En el ejemplo se usa una IP fija, pero se usará IPs dinámicas asignadas por DHCP.
- La MAC de cada Arduino debe ser diferente, usaremos la MAC “0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xYY”, donde YY es el número del kit de Arduino
- En la llama a grabar datos en la línea “/grabaDatos.php?arduino=YY&temperatura=” donde YY es en número de kit de Arduino.
- Poner la IP correcta de la Raspberry Pi
Código para DHCP:
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xYY };
EthernetClient client;
void setup() {
// start the serial library:
Serial.begin(9600);
// start the Ethernet connection:
if (Ethernet.begin(mac) == 0) {
Serial.println(«Failed to configure Ethernet using DHCP»);
// no point in carrying on, so do nothing forevermore:
for(;;)
;
}
// print your local IP address:
Serial.println(Ethernet.localIP());
}
Github: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Otros/DHCP_Arduino
Esquema de Conexión
Solución
BBDD pública: https://qvm602.aprendiendoarduino.com/
Gráficas: http://www.aprendiendoarduino.com/servicios/graficas.htm