Arduino Duemilanove con BBDD.

Muy buenas foreros!

Estamos desarrollando una estación meteorológica con una arduino duemilanove. Ya conseguimos visualizar los datos de los sensores des del pc. La conexión arduino-pc va con un cable usb. Queremos guardar los datos que leemos en una base de datos para poder hacer una posterior comparativa web. También queremos visualizarlos en tiempo real desde la web. Agradecemos cualquier tipo de ayuda!!

Muchas grácias de antemano!

Saludos! :slight_smile:

Supongo que la manera mas logica es hacer que el programa que esta corriendo en el PC y que esta a la espera de los resultados que llegan por el puerto serie, se ocupe de insertarlos en la base de datos. Para consultarlos via web, necesitas que el servidor de paginas y el lenguaje de scripting que estes usando, se comunique con la BBDD. Todo esto es muy sencillo, pero me temo que necesito mas informacion. Lo primero es saber si la maquina que sirve las paginas web es (o puede ser) la misma que recibe los datos de Arduino. Tambien habria que saber si el sistema operativo es un Linux o Windows, y qué base de datos es a la que teneis acceso.

Perfecto!

Tenemos nuestra estación conectada al pc mediante usb. Utilizaríamos un mismo pc para recibir los datos y también nuestra BBDD (en MySql). De momento utilizamos Windows en nuestra máquina.
Nuestra idea sería:
-Tener nuestro Arduino conectado al pc y recibir datos al pc. (probado y funciona)
-Al mismo tiempo que recibimos datos, estos se van insertando en la BD para posteriormente poder realizar consultas dedsde nuestra web.-
-Los datos que constantemente llegan al pc leerlos en tiempo real desde la web.

Muchíssimas gracias!!

Puedes crear un socket en PHP que se conecte al pc y lea los datos que le llegan del puerto, luego los inserte en la BBDD, pero según mi experiencia si eso lo vas a hacer fuera de una LAN, te va a hacer falta un sevidor dedicado para abrirle los puertos para que conecte el socket...

¿Donde teneis el servidor de paginas web? Es mas sencillo de lo que parece. Contestame y veras que sencillo.

De momento estamos en servidor local. Utilizamos el easyphp para desarrollar.

:slight_smile: :slight_smile:

Entonces tienes montado un servidor apache. Leer la base de datos y generar la pagina (incluso con gráficos) en tiempo real, no debería suponer ningún problema. ¿Donde exactamente os estáis atrancando??

Tenemos conocimientos de informática pero no muchos de arduino...
Entonces la duda que tenemos es si existe la posibilidad de introducir los datos (que leemos de nuestro Arduino) directamente en la base de datos sin llamar al codigo php de nuestra pagina web...
Por una parte ya tenemos el arduino corriendo y por otra parte tenemos la web y la base de datos...faltaría la conexión entre estos.
Utilizamos el paquete de esayphp para poder trabajar en local. No sé si necesitamos alguna cosa mas. Que pasos debemos seguir? Podemos conectar directamente nuestro arduino con la base de datos? Algunos consejos?

TE habia entendido que, el mismo programa que recibe los datos procedentes del Arduino es el que los incorpora en Mysql. Creo que eso es lo unico que os falta. ¿En que lenguaje esta hecho el programa que escucha al Arduino? Practicamente todos los lenguajes tienen una interfase para Mysql.

Leemos los datos desde el programa de Arduino, segun la web de Arduino "esta escrito en Java y basado en Processing, avr-gcc y otros programas también de código abierto".

:slight_smile:

Entonces lo unico que teneis que hacer es un programa que este ejecutandose continuamente, y se limite a monitorizar el puerto serie. Cuando entre un dato procedente del arduino, debe validarlo (ver que no es una chorrada fruto de una mala transmision. Para esto os sugiero que hagais algun tipo de suma de verificacion) y grabar el dato en Mysql.
Lenguajes para hacer esto, teneis muchos. Si seguis pensando en trabajar en Windows, os sugiero que visiteis la siguiente direccion:

Se trata de las herramientas de microsoft que pueden ser usadas sin necesidad de comprar los paquetes.
Si no sois programadores expertos, os recomendare que jugueis con Visual Basic. Encontrareis un monton de documentacion y os resultara muy sencillo. Para conectar con Mysql, me imagino que tendreis que hacerlo a traves de ODBC, aunque siempre teneis la opcion de grabar un fichero de texto con la sentencia del insert, arrancar el programa de gestion de mysql para que ejecute el archivo que acabais de crear, y lo borrais a continuacion.
Se que en C existen librerias para enlazar directamente con el API de Mysql, pero probablemente sea mas complicado. De todas maneras, si googleais 'conectar visual basic-Mysql', obtendreis esto como primera entrada:

A lo mejor, con un corta y pega os despachais.
Suerte, y ya nos contareis.
P.D:
Si quereis que os eche alguna mano, mandadme un email a pofenas@pofenas.com

Me parece interesante el proyecto.

Por lo que entiendo estais recibiendo los datos en el IDE de Arduino, no?

Si es así, podeis utilizar el código del IDE de Arduino (la parte del terminal serie) para conectaros con Arduino y leer los datos por el USB y luego utilizar algún conector con MySql para guardar dichos datos en la BD. Todo ello en Java, porque el código del IDE de Arduino está escrito en Java.

Mi propuesta:

Arduino -> Serie -> Processing -> MySQL

Un saludo

Adumet,no se si sabeis que el ordenador "ve" al Arduino como un puerto serie, es decir, no necesitais para nada el IDE de Arduino para recibir datos. Es decir, cualquier programa que maneje puerto serie os puede servir. El IDE de Arduino (el programa que se utiliza para programar la tarjeta), simplemente trae un terminal serie muy sencillo. Pero podrías visualizar con otro como Realterm, hyperterminal de windows, o lo que sea....

Si ya teneis EasyPHP, disponeis de todo para empezar (bueno no sé si por defecto viene la clase para manejar serie, si no es cuestión de descargarla). Es decir, ya teneis el servidor apache+PHP+msql... todo!!!

Cualquiera de las opciones que han sugerido los compañeros es válida, pero sólo puntualizar que con lo que teneis ahora, deberíais poder hacerlo.

:wink:

Aunque es posible hacer un programa en apache+php que monitorice el puerto serie, es un ejemplo muy interesante del concepto de 'espera ocupada'. Imaginate que el Arduino pasa a razon de tres o cuatro datos por hora... a 9600 baudios, apenas un segundo de trabajo eficaz por cada hora de toooda la memoria que necesita un pesado servidor de paginas web como es apache, mas un interprete de PHP mas un script ejecutandose constantemente solo para comprobar que no hay gran cosa que hacer.
En el post anterior recomendaba Visual Basic, porque es un lenguaje que funciona por eventos: el programa no hace nada hasta que se produce un evento ('OnComm') que es el que desencadena que se ejecute el resto del programa y se quede durmiendo de nuevo hasta que se dispare el siguiente evento (espera desatendida).
Java es otra opcion interesante: funciona exactamente igual que VB, pero no sabria que entorno de desarrollo recomendarte. En Linux te habria sugerido Gambas, o un simple script en bash, pero eso esta fuera de lugar.

Estoy muy contento de la cantidad y calidad de toda la información recibida! Muchas gracias!! :wink: :wink:
Ahora tocará investigar a fondo con alguna de estas opciones!
No sabemos con que frecuencia vamos a emitir los datos de arduino!
Inicialmente supongo que intentaremos que se emitan con relativa frecuencia...no lo sabemos...
A medida que vamos avanzando con el proyecto os informaremos!
:smiley: :smiley:

Por cierto que tal la opción del NetBeans?

NetBeans es un IDE, no un lenguaje. Te sera util tanto para escribir en PHP como para Java, C++, etc. Sin embargo, si vas a usar alguno de los lenguajes de MicroSoft (visual Studio) no lo vas a necesitar, porque estos llevan su propio IDE.