Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
RaspBerry Pi + nrf24L01
#21
Habeis comentao algo sobre volumen de datos a guardar en la BD, y varias alternativas. Como me gustaría usar la rasp mas adelante para mas cosas, pero enfocadas a recibir datos, y guardarlos en una BD. Que me recomendáis exactamente? y sobre que volumen de datos barajáis usar una opción u otra?
Citar
#22
Bueno, bases de datos nosql se usan para entornos con millones de registros como twitter o similares, bases de daros sql para el resto Sonrisa
Citar
#23
Por eso depende de los sensores y la cantidad de datos que quieras almacenar...
Si te toca partir de 0, para datos estadísticos donde no es crítica la integridad o la consistencia, yo lo haría con una NoSQL, porque nunca sabes cuándo vas a necesitar ampliar los horizontes. Y el tema de muestreos suelen ser volúmenes de datos que crecen rápidamente.
NOVEDAD: CoreXY Eternal Edition (Custom) -> https://www.spainlabs.com/foros/tema-Ete...So-Edition
Mi Prusa i3, ¡con lista de componentes! -> http://www.spainlabs.com/foros/tema-Un-clon-mas
Citar
#24
Estuve buscando cuando se implanta un sgbd sql o una nosql y encontré un vídeo hablando de ello de Ricardo Galli, creador de meneame y profesor de informática de la universidad de las Islas Baleares

https://gallir.wordpress.com/2012/08/06/...ica-video/

Entiendo que NoSQL es mejor para cuando se trata de volumen medio/alto/muy alto de información y que no está estructurada, en cambio sql es para un volúmen bajo/medio/alto de información y que está estructurada.
Citar
#25
Yo en principio, volumen bajo y supongo que...estrucutrado.
Citar
#26
Bajando la versión raspbian, sobre esta pondré todo Sonrisa

Inicialmente instalare SAMP, porque viene todo en uno, salvo contra indicación, esos serán mis primeros pasos.
Citar
#27
Rasp preparada con LAMP. En cuanto tenga otro rato, instalo la parte correspondiente al nrf24L01 y compruebo que comunica Gran sonrisa
Citar
#28
jejejeje, ya queda poco. ¿Puedes crear /var/www/info.php cuyo contenido sea

Código:
<?
phpinfo();
?>

Y desde un navegador acceder a

http://ip de la raspberry/info.php ?

Si todo va bien verás una página con las características del servidor. Si te vas a la sección mysql ¿qué te pone en Client API version?

Esta es el diagrama de bbdd que me ha salido a mi:

   

Por un lado tenemos una tabla donde rellenamos todos los dispositivos y todas sus ubicaciones. Por otro lado tenemos los distintos atributos que se pueden guardar (temperatura, humedad, nivel de batería, cantidad de luz, nivel de ruido, etc). Luego tenemos dos tablas, una para guadar el registro (la fecha, la trama y el dispositivo) y otra para los valores de los atributos de ese registro ¿por qué no lo he puesto todo en la misma tabla? pues porque he creido que no todos los dispositivos enviarán la misma información, hay algunos que enviaran sólo la temperatura y humedad, otros que sólo enviarán el ruido de ambiente, otros que lo enviaran todo, por eso prefiero desagregar a tener campos vacíos (asi cumplimos con la primera forma normal de diseño de bbdd).
Citar
#29
Es mejor 4 tablas que tener una solo con los datos pese a tener campos vacios?

La trama sera del estilo: Id_Nodo#numero_trama#bateria#datos_sensor(es)[separado cada uno por una #]
Citar
#30
Al proceso de optimizar el diseño de una bbdd se le llama normalización. Lo que se consigue es gastar menos espacio en disco, mejorar el rendimiento en general, acelarar la velocidad en las búsquedas, extraer los datos de una forma más sencilla, etc. Y dicho esto, podemos obviar lo anterior :elrisas: y tal y como dices guardarlo en una sola tabla, que también funcionaría si se queda como está 8-) .

Por otro lado, los datos de los sensores separados por #, si nos ponemos en el caso de que no todos los nodos tienen los mismos sensores, ¿cómo sabes en que posicion va el dato de la temperatura, el del ruido de ambiente o el del medidor de gas?. Por ejemplo:
el nodo 1 te envía: 1#15#3.78#10#54
el nodo 5 te envía: 5#32#3.76#68#96

En el primer caso los datos son de la temperatura y la humedad, en el segundo caso es la humedad y la luz de ambiente. A priori el programa no sabe cada nodo qué sensores tiene y en qué orden vienen en la trama, a no ser que lo pongas a pelo en el código y cada vez que añadas un nuevo nodo cambies el programa de nuevo para reflejarlo. Para hacerlo más automático podrías poner una cabecera para distinguirlos mejor como:
1#15#BA:3.78#TE:10#HU:54
5#32#BA:3.76#HU:68#GA:96
Citar
#31
Si, se me olvido añadir, que cada sensor tendria un TAG, como bien has puesto en el segundo ejemplo de trama.
Citar
#32
He mirado lo que me preguntaste de la version de la API, esto sale:

Cita:Client API version 5.5.40
Citar
#33
Peleandome con pocos resultados. Posiblemente tenga que poner un nodo como receptor y mandarle los datos via UART a la rasp.

Sigo probando
Citar
#34
Qué problema te está dando? Te dejo ésta librería para los GPIO de la Rasp por si te sirve de ayuda y no la conocías: http://wiringpi.com/
La sintaxis es similar a la de Arduino, bastante intuitiva y sencilla.
NOVEDAD: CoreXY Eternal Edition (Custom) -> https://www.spainlabs.com/foros/tema-Ete...So-Edition
Mi Prusa i3, ¡con lista de componentes! -> http://www.spainlabs.com/foros/tema-Un-clon-mas
Citar
#35
Si, pero no uso arduino, entonces hay algunas cosas diferentes. Tengo que investigar mas. Gracias
Citar
#36
La librería es en C, por lo que la comunicación no puede estar más a bajo nivel Confundidois3: De Arduino comparte la sintaxis únicamente, pero permite hacer muchas cosas de una manera más amigable, incluida la comunicación.
NOVEDAD: CoreXY Eternal Edition (Custom) -> https://www.spainlabs.com/foros/tema-Ete...So-Edition
Mi Prusa i3, ¡con lista de componentes! -> http://www.spainlabs.com/foros/tema-Un-clon-mas
Citar
#37
Si, pero añade cosas que en PIC no uso, y tengo que ver como establecer comunicación.
Citar
#38
grafisoft escribió:He mirado lo que me preguntaste de la version de la API, esto sale:

Cita:Client API version 5.5.40

Genial, con ese dato sabemos que el apache y php funcionan porque lo muestran y además que tienes una de las versiones más recientes de mysql. Te voy a pasar unos pasos para crear un usuario, la bbdd y la tabla; después crearemos un script en python que mete algunos datos de prueba en la tabla y también una página html y php para mostrarlos "en bruto".

En cuanto a los problemas del nrf24l01, puedes ponerlo directamente a la Raspberry Pi tal y como aparece en esta página http://www.akirasan.net/raspbpi-arduino-...-nrf24l01/ que además te viene con un ejemplo de cómo configurarlo y enviar y recibir datos en python.
Citar
#39
Ok, a ver si lo puedo probar la comunicacion esta noche otra vez Sonrisa
Citar
#40
Bueno, pues vamos a empezar. Pasos a seguir:

crear un fichero llamado script.sql con el siguiente contenido:
Código:
CREATE DATABASE sensores;
GRANT ALL PRIVILEGES ON sensores.* to cliente@localhost IDENTIFIED BY 'cliente2014';
FLUSH PRIVILEGES;
USE sensores;
CREATE TABLE trama(id INT NOT NULL AUTO_INCREMENT, nodo TINYINT NOT NULL, numero INT NOT NULL, fecha DATETIME NOT NULL, temperatura FLOAT, humedad FLOAT, PRIMARY KEY (id));
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 1, '2014-12-20 00:00:00', 25.7, 77.4);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 1, '2014-12-20 00:00:00', 25.7, 77.4);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 2, '2014-12-20 01:00:00', 25.4, 67.4);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 2, '2014-12-20 01:00:00', 25.4, 67.4);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 3, '2014-12-20 02:00:00', 25.8, 56.8);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 3, '2014-12-20 02:00:00', 25.8, 56.8);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 4, '2014-12-20 03:00:00', 25.1, 88.9);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 4, '2014-12-20 03:00:00', 25.1, 88.9);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 5, '2014-12-20 04:00:00', 24.6, 45.7);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 5, '2014-12-20 04:00:00', 24.6, 45.7);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 6, '2014-12-20 05:00:00', 21.9, 67.1);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 6, '2014-12-20 05:00:00', 21.9, 67.1);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 7, '2014-12-20 06:00:00', 25.7, 34.2);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 7, '2014-12-20 06:00:00', 25.7, 34.2);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 8, '2014-12-20 07:00:00', 21.2, 55.6);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 8, '2014-12-20 07:00:00', 21.2, 55.6);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 9, '2014-12-20 08:00:00', 24.8, 56.0);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 9, '2014-12-20 08:00:00', 24.8, 56.0);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 10, '2014-12-20 09:00:00', 27.7, 56.3);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 10, '2014-12-20 09:00:00', 27.7, 56.3);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 11, '2014-12-20 10:00:00', 29.7, 56.6);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 11, '2014-12-20 10:00:00', 29.7, 56.6);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 12, '2014-12-20 11:00:00', 30.1, 56.9);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 12, '2014-12-20 11:00:00', 30.1, 56.9);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 13, '2014-12-20 12:00:00', 31.5, 57.2);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 13, '2014-12-20 12:00:00', 31.5, 57.2);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 14, '2014-12-21 00:00:00', 25.7, 77.4);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 14, '2014-12-21 00:00:00', 25.7, 77.4);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 15, '2014-12-21 01:00:00', 25.4, 67.4);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 15, '2014-12-21 01:00:00', 25.4, 67.4);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 16, '2014-12-21 02:00:00', 25.8, 56.8);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 16, '2014-12-21 02:00:00', 25.8, 56.8);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 17, '2014-12-21 03:00:00', 25.1, 88.9);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 17, '2014-12-21 03:00:00', 25.1, 88.9);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 18, '2014-12-21 04:00:00', 24.6, 45.7);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 18, '2014-12-21 04:00:00', 24.6, 45.7);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 19, '2014-12-21 05:00:00', 21.9, 67.1);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 19, '2014-12-21 05:00:00', 21.9, 67.1);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 20, '2014-12-21 06:00:00', 25.7, 34.2);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 20, '2014-12-21 06:00:00', 25.7, 34.2);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 21, '2014-12-21 07:00:00', 21.2, 55.6);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 21, '2014-12-21 07:00:00', 21.2, 55.6);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 22, '2014-12-21 08:00:00', 24.8, 56.0);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 22, '2014-12-21 08:00:00', 24.8, 56.0);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 23, '2014-12-21 09:00:00', 27.7, 56.3);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 23, '2014-12-21 09:00:00', 27.7, 56.3);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 24, '2014-12-21 10:00:00', 29.7, 56.6);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 24, '2014-12-21 10:00:00', 29.7, 56.6);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 25, '2014-12-21 11:00:00', 30.1, 56.9);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 25, '2014-12-21 11:00:00', 30.1, 56.9);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 26, '2014-12-21 12:00:00', 31.5, 57.2);
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(2, 26, '2014-12-21 12:00:00', 31.5, 57.2);

Esto creará un base de datos llamada sensores, un usuario llamado cliente con password cliente2014, una tabla llamada trama con los siguientes campos: id, nodo, numero, fecha, temperatura, humedad (el id es un número único para identificar cada fila, podría haber usado nodo, numero y fecha, pero es más incómodo) y finalmente unos datos de prueba de dos nodos que más tarde borraremos.

Para ejecutarlo desde la consola hay que poner:

Código:
mysql -u root -p

Te pedirá la clave de root de mysql que introduciste cuando lo instalaste. Si todo ha ido bien te saldrá la línea de comandos de mysql (mysql>).

Para ejecutar el script de comandos hay que poner:

Código:
source script.sql

Si todo ha ido bien verás que salen varios mensajes de OK.

Ahora vamos a comprobar que el usuario cliente puede leer y escribir en la tabla. En la línea de comandos de mysql pon:

Código:
quit

Después en la consola pon:

Código:
mysql -u cliente -p

La clave es cliente2014

A continuación vamos a seleccionar la base de datos con la que trabajaremos:

Código:
USE sensores;

Y ahora la primera prueba, vamos a leer los datos de la tabla:

Código:
SELECT * FROM trama;

Te saldrá una lista con los datos que se han guardado.

Ahora vamos a insertar una fila más:

Código:
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 27, '2014-12-21 13:00:00', 32.0, 88.4);

Te saldrá un OK y si ejecuta la SELECT de nuevo verás el nuevo registro insertado.

Ahora vamos a salir de mysql:

Código:
quit

Si has llegado hasta aquí mañana hacemos la página web que los muestre. Después haremos un script en python que introduzca los datos recibidos a través del nrf24L01 en la BBDD.
Citar


Temas similares...
Tema Autor Respuestas Vistas Último mensaje
  Raspberry quemada al conectar USB de placa xero83 4 436 24-07-2018, 01:09 PM
Último mensaje: xero83
  NOTICIA Os invito a mi blog "Raspberry Para todos" Turriano 0 251 14-07-2018, 05:16 PM
Último mensaje: Turriano
  Encendido/Apagado LED con pulsador Raspberry Javier_DC 2 706 16-04-2018, 08:12 AM
Último mensaje: Javier_DC
  [TUTORIAL] Como ejecutar scripts al iniciar nuestra Raspberry Electromecánico 7 15,150 18-03-2018, 11:52 PM
Último mensaje: yuber1992
Pregunta Plataforma educativa online para curso de Raspberry Pi Electromecánico 1 518 17-01-2018, 09:09 PM
Último mensaje: grafisoft