Una estación meteorológica Raspberry Pi con una interfaz web

Cuando compré mi primera Raspberry Pi allí lo 10 meses, Quería usarlo para hacer software. A fuerza de leer en varios sitios y foro, Electrónica ha empezado a hacerme. Hoy, Por lo tanto, iremos juntos mi primer proyecto : una estación meteorológica con sensores inalámbricos.

tiempo¿Por qué una estación meteorológica. Sin duda es el proyecto más común y menos original que se puede encontrar ! Cada uno está en su sistema de captura, sus sondas, su almacenamiento. Pero el principio sigue siendo el mismo : ¿Cómo es en tu casa o apartamento o fuera.

Por lo tanto yo he definido mi necesidad :

  • Medición de temperatura interior y exterior
  • Las sondas deben comunicarse de forma inalámbrica. Sin duda para la señora ver cables en todas las direcciones sólo han mostrado c.

Mi investigación me llevó Este post, muy bien hecho y se utiliza para 90% para mi estación meteorológica con Frambuesa Pi. Los componentes son fáciles de usar, un poco caro pero para un principiante como yo ultra, Ayuda a tranquilizar en estos primeros no. Así que aquí está lo que he pedido en Ciseco :

  • 3 x XRF RF radio UART RS232 serial datos módulo inalámbrico XBee forma (29.70£ los tres)
  • 2 x Sensor – Sensor de temperatura XRF de desarrollo – TERMISTOR (14.16£ ambos)
  • 1 x rebanada de pi – Añadir el de frambuesa PI (3.25£ la unidad)

Por lo tanto, es una suma de £ 47,11, más de £ 10 de franqueo y la mala sorpresa IVA a agregar que asciende a £ 11,42. Un total de £ 68,53 o 80 €. ¡ Ay. Me parece un poco caro para solo dos sondas, pero estaba casi seguro de llegar al final !

Aquí está lo que yo quería pasar :

 

Vez el material recibido, Tomó

  • montar la rebanada tablero principal de Pi : todas las noticias aquí
  • Configurar cada transmisor XRF : todas las noticias aquí
  • montar las sondas y configurarlos para comunicarse : todas las noticias aquí

Las primeras pruebas mostraron temperaturas. Un gran éxito en sí mismo ! 🙂

Premiers essais d'affichage avec la station météo Rapsberry Pi

Primeros ensayos de pantalla con el clima de la estación Frambuesa Pi

El siguiente paso fue la automatización de la recuperación. Para esto un script en Python (la primera vez también) vueltas de bucle para analizar la llegada de temperaturas. El guión está disponible aquí. Carga todas las noticias (incluyendo el nivel de la batería) en una base de datos SQLite (siempre mi primera vez acostumbrados a Oracle o jBase).

Almacenamiento de los datos está en curso, Sigue siendo la representación de esta información en algo no muy tonto. No hay muchas opciones, pero me fui en una interfaz web simple con el marco bootstrap y Highcharts para hacer este un poco más sexy estación meteorológica de Frambuesa Pi.

El servidor Web es un clásico con NGinx con soporte PHP (Tutorial para instalar en Esta página). La configuración del sitio que se encuentra en Puerto 80 mi casa es como sigue :

Servidor {
  Escucha 80;
  root/var/www;
  Índice index.php;
  nombre_servidor localhost;
  Alquiler / {
    try_files $uri $uri / index.php;
  }
  alquiler ~ .php$ {
  fastcgi_pass unix:/var/run/PHP5-fpm.sock;
  fastcgi_index index.php;
  incluyen fastcgi_params;
 }
}

El sitio web incluso contiene solamente una sola página. Mejores gráficos, las efemérides y los pasos abajo. He intentado hacerlo genérico así la adición de una nueva sonda, tan pronto como se inserta en los transmisores de la tabla en la base de datos, Debe aparecer debajo de gráficos.

Finalmente las efemérides. Para esto me quedo con el tiempo página de inicio de Francia para recuperar la fiesta del día, las horas de salida y puesta del sol y la luna. Todos a través de un script en Python corren cada día 2 por la mañana vía crontab (Descargar el script)

Sería añadir una zona para la previsión de un posible cambio pero no fue el propósito original.

[EDITAR] C’était pas le but initial mais je suis quand même en train d’ajouter les informations de Open Weather sur un nouveau graphique 🙂

[EDIT2] La secuencia de comandos para actualizar las efemérides ha sido rehechos gracias Jimmy. El nuevo diseño del clima Francia ahora es administrado. Gracias a él !

Aquí está el resultado (actual) final :

Météo_Raspberry_Pi

El sitio entero está en Este archivo, incluyendo la base de datos, un script de inicio, imágenes y scripts en python.

Pequeñas notas por el momento :

  • No hay presión atmosférica y humedad. Sería bueno tener esta información y mucho más.
  • Es necesario conectarse para disponer de la información. Una señora tiene una pantalla en algún lugar que muestra información sobre. Por el momento no sé si será posible con la rebanada de Pi en la tarjeta de frambuesa. C’est l’étape suivante 😉

Así que si tú también quieres empezar, n’hésitez pas 🙂 Pour l’instant c’est satisfaction totale à la maison 🙂

[EDITAR] Las fotos de las sondas son aquí

Posiblemente le gustan también....

  • Para que la humedad una sonda DHT22, para la presión, una sonda de BMP085.
    Fáciles de montar en la frambuesa pi. Después de, para el montaje externo, Va a pedir a juguetear un poco más.

    En todos los casos, Buen proyecto.
    Pero carece de fotos :p

    • Buen punto. Voy a hacer fotos de las puntas de prueba …en la acción ! 😉

  • ss814

    Bravo !
    Estoy tratando de hacerme enfermo que no tienen el presupuesto para entrar a la elec me también, Pero precisamente, con respecto a la pantalla; con poco dinero, ¿Por qué no tomar una pantalla para el coche como por ejemplo : http://www.amazon.com/dp/B0045IIZKU ?
    Sólo queda para ver la representación de la web en la pantalla con un script en el inicio que pondría en marcha un servidor X entonces que cargaría una instancia de firefox con la página de inicio de localhost.

    • La pantalla es una buena idea. Hace sólo la estación más grande

  • Sheetal

    Si usted está mirando para recuperar información sobre el tiempo o las previsiones, viendo este lado : http://openweathermap.org/

    • Wow gracias ! Lo sabía y es grandioso que pueda añadir información !
      Gracias !

  • Blackmam3a

    He ojeado tu guión diagonalmente ! PHP maneja muy bien las fechas (http://php.net/manual/fr/function.date.php), ¿Qué puede aliviar algo de su código, y si quieres tener el nombre de los días en francés : setlocale (LC_ALL, “es_ES”); (Es necesario tener los lugareños FR en la frambuesa).

    De lo contrario gran trabajo !

    • Luché en este punto y la solución me irrita porque con la ca local habría sido más fácil. Pero de ninguna manera con mi instalación de julio nunca se refleja en julio !

      • Blackmam3a

        Actualmente utilizo en mi RPi y obras :).

        Ver primero mirar atrás setlocale (LC_ALL, "es_ES".), Si es falso, es que no haya activado al local en el RPi.

        Bajo el arco, Debemos ir al archivo /etc/locale.gen y descomentar las variables fr_FR.* y hacer una generación local (para descargar) Si mis recuerdos son buenas.

        No utilizo debian pero debe ser más o menos lo mismo.

        • Posible realmente eso ca no está configurado. Bajo Debian hay un dpg - reconfigure o algo en el género para hacer.
          Viendo esta noche. Gracias por la info

          • Blackmam3a

            No te preocupes, muy pocas personas utilizan setlocale() Pero prefiero una mesa…

            Otra manera de dibujar gráficos, Estás lleno de librerías JS hacer incluyendo Chart.js (para reducir al mínimo las consultas externas).

          • Me gusta highcharts que muy eficiente y yo no creo demasiado pesados para cargar. Y puesto que es para uso local …

  • Apoyo

    “Un total de £ 68,53 o 80 €. ¡ Ay. Me parece un poco caro para solo dos sondas, pero estaba casi seguro de llegar al final !”

    Estoy de acuerdo, Me parece demasiado alto bcp. Sería casi más rentable comprar un rasbperry y sondas conectadas a los GPIO. Caricatura pero creo que está hablando el paralelo.

    • Sí es cierto que sería más barato. El XBee para la salvar sin alambre será un poco más caro pero vía GPIO debe ayunar. El único problema es que es más técnico bcp para un principiante crear su propio sensor inalámbrico. No he encontrado nada en internet que es simple y comprensible tanto en francés como en inglés. Por lo tanto, esta solución que para mí es muy conveniente para aquellos que como yo no entiendo electrónica.
      Tenemos que reconocer, además del precio y escalabilidad sin, su temperatura es superior porque tiene la carcasa, la comida y la tarjeta tienen unen sonda 5 minutos.

      • Apoyo

        Perdón, que me expresé mal. La solución me parece muy bien pensado y viable, Pero yo quería apuntando especialmente a los precios de los componentes que parece alta en comparación con los componentes más “completa” a priori.

        Tal vez hay una manera de encontrar lo mismo por menos.

        A
        PS : Creo que he leído todos tus artículos y les agradezco.

        • No había ningún problema. Yo estoy de acuerdo contigo. Cuando te sabes un poco es una manera. Este es el lado inalámbrico que cuenta con aire caliente para lograr.

  • jed59

    Bravo, hermosa realización.

    ¿Por qué elegir lugar de radio RF inalámbrico el transmisor/receptor 433 Mhz XRF ? (fiabilidad, ámbito de aplicación, simplicidad de desarrollo, …).
    ¿Cuál es el alcance de receptores internos y/o externos, la duración de vida de la batería !

    J’ai hâte de voir les photos 🙂

    • Como expliqué en el artículo no sé nada de electrónica para que este módulo es fácil de usar y fabricación. Para el ámbito creo es 30 m en interiores y un poco más de 90 al aire libre.
      Y para la batería es un poco más de un año para una medida de todas las 5 minutos.

  • M2I

    En lugar de sqlite, usa rrdtool.
    Los archivos de datos no grossiront en el tiempo.
    Tengo 4 identificados en 10 años en 3 MB
    RRDtool existe para múltiples idiomas (Python y php) y permite hacer gráficos

  • Yamdar

    Hola,

    Gracias por este artículo.

    Pongo en su lugar siguiendo este artículo entre otros, 2 sondas de inicio.

    Sin embargo tengo una preocupación y es incapaz de encontrar la solución.

    El 2 sondas me devuelven valores diferentes. en un cuarto a 24 ° c , uno de sonda me devuelve un entorno 24 ° y los otros 27 ° pero varía enormemente.

    Eso da el 24 ° c me responde una vez todos los 6 valores, algo más exótico como 27 ° c y luego después de ir abajo en el 24 ° c.

    ¿soy el único que tiene este problema ?

    Cómo normalizar estas puntas de prueba ? Intento comprender la función “aXXRNOM” se supone para definir el 25 ° pero no alcanza.

    Gracias de antemano por sus respuestas.

    • Hola,
      Los cambios son realmente raros. La sonda no ha sufrido un golpe durante el montaje ? Nunca he hecho la calibración. Puede ser con la ayuda del foro en ciseco …

  • Acilnos

    Hola,

    Gracias por este sitio realmente muy informativo y artículos sobre Pi bien diseñado.

    Actualmente estoy trabajando en un proyecto de automatización del hogar que pretende sustituir el termostato de calefacción a mi. He logrado hacer siguiendo tus tutoriales. (temperatura de recuperación electrónica un poco para activar o no los calentadores).

    Queriendo empujar un poco más mi proyecto he intentado poner un servidor web (Nginx sqlite) para tener una carta como tu. Por lo tanto he descargar el archivo disponible en esta página, pero he bloqueado en la pantalla del gráfico que al parecer no está en el código de la página index.php.

    ¿Puedes ayudarme en este punto?

    Gracias de antemano

    • Buenas noches,
      ¿Hay alguna manera de tener los errores devueltos por el servidor web ? Es cierto que la muestra puede ser confusa para instalar.

      • Acilnos

        Hola,

        Merci de m’aider 🙂

        Lo hice no error en el navegador, Bueno tuve el carrusel pero no gráficos dentro. Creo que falta la parte de código correspondiente a la secuencia de comandos de java para crear el graph0 y Chart1 en el archivo.

        Sin embargo he logrado tener un gráfico mediante el examen de la doctora highcharts pero tengo dificultades para operar los datos en la tabla creada por la función create_graphic.

        • Es cierto que la manipulación de datos en HighCharts no es evidente, pero el resultado vale la pena el esfuerzo ! 🙂

        • Benoit91

          Hola,

          Muchas gracias por tu sitio, j’ai quasiment terminé le projet 🙂
          el guión de monitor funciona bien, Recupera los datos en la base de datos SQlite

          Todavía tengo un problema con el sitio web, el marco muestra correctamente, pero no se muestran datos… alguien me ayude a ?

          merci d’avance pour vos commentaires 😉

          • Hola,
            Si puedes mirar en la consola del navegador si hay errores ? De lo contrario hacer una página de bestia que muestra el resultado de una consulta para probar la conexión a la BBDD

          • Benoit91

            Hola Chris,

            merci pour ta réponse rapide 🙂
            Encontré el problema, la conexión a la BBDD estaba bien pero que no había cambiado el id de mis transmisores en los transmisores…. de repente no había nada que Mostrar…
            Ahora bien muestra los datos del sensor, Cool !

            Todavía tengo un pequeño problema de las diferencias dentro de las horas de captura. Un ejemplo es mejor que las conversaciones de un largo :
            Es 12:00, registrado mide 11 h en el db, el sitio web muestra 13 en el sensor y el 14 en el gráfico…

            Mi ntp está configurado correctamente, mi linux local está configurado en Fr

            una idea ?

          • Hola,
            Creo que debe existir una historia del formato de grabación. Yo miraba y yo también tengo problemas de fechas … La hora de demora del registro debe ser compensada en cada etapa lo hace ca se mueve de hora en hora. Je vais regarder pour enregistrer des heures locales et non UTC ou GMT ou je sais pas quoi 🙂

  • Van den Bliek Jimmy

    He cambiado el script ephemeride.py para recuperar los valores tras el cambio de sitio Météofrance diseño. Aunque le interesará a alguien, Aquí están las líneas para cambiar. La enmienda será primera línea m = re.search, hasta la tercera línea de este tipo.

    m = re.search(' Lever : (.+?) Coucher : (.+?) ', line)
    if m:
    SolLever = m.group(1)
    SolCoucher = m.group(2)
    m = re.search(' Lever : (.+?) Coucher : (.+?) ', line)
    if m:
    LuneLever = m.group(1)
    LuneCoucher = m.group(2)
    m = re.search('(.+?)', line)

  • Van den Bliek Jimmy

    Buenas noches, Sólo una pregunta rápida. No ser un profesional en el uso de HighCharts, Me gustaría saber si hay una manera de detener el carrusel automático. Me gustaría dejar que las flechas de izquierda y derecha pero ya no tiene animación. Una idea? Gracias.

    Jimmy

    • Hola,
      Este no es el carrusel de HighCharts pero BootStrap. Para desactivar :
      $('#myCarousel').carousel({
      interval: false
      })

  • Darki03

    Buenas noches,

    En primer lugar gracias por este logro que han permitido a no empezar desde cero. He adaptado el–CI para usarse con un sensor de la temperatura y la presión BMP085 en I2C sobre el IPC.

    Después de pasar un poco de tiempo en la configuración del sitio, todo funciona. Sin embargo, después de algún tiempo la base de datos sql se convierte cada vez más voluminoso y cada acceso a la interfaz web bloquea script en python que se ejecuta en segundo plano, Encontrar el error en la nohup.out “Base de datos de error está bloqueado”.

    Parecería que, debido al tamaño de la base, el script php pone más tiempo para recuperar los datos y que el pitón de la escritura de accesos escriben la base durante este tiempo donde un conflicto (el script en python se conecta a la base de datos sql para registrar un valor de todos los 30 segundos).

    No se notó este problema ? Me he perdido algo ?

    Tal vez le proporciona una limpieza de la escritura de la base ?

    Gracias de antemano.
    Daniel

    • Hola
      Esto no me preocupa de excepto una vez cuando era la base con una cerradura. El tamaño de la base de datos al final del 6 mes es en los 12 MB creo

  • Blabla51

    Hola,

    Este es el problema, De hecho, Sólo una única conexión a la base de datos es compatible con una base de datos SQLite.

    Sólo estoy de paso, Pero también he desarrollado una unidad de automatización del hogar con una base de datos SQLite, Pero tengo un proceso diferente.
    Déjame explicarte: la base de aceptar una sola conexión, para evitar un conflicto, Enviar una petición http al servidor de forma local, para poder realizar el procesamiento de datos en php, y enviarlos a la base de datos a través del servidor web (Yo personalmente uso Lighttpd)

  • Dalarwin

    Hola,
    En primer lugar muchas gracias por sus artículos que me ayudó a bien.

    Para la parte recuperación y almacenamiento de información en los valores de temperatura base, He usado tu script en python.
    Sin embargo he modificado para trabajar con python3 y he modificado la manera de manejar las fechas y horarios.

    En la consola usar localtime() para mostrar la hora local, UTC no
    y en la base de datos almacenar el valor devuelto por tiempo() (número de segundos desde 1970) Porque me parece (Esta es solo mi opinion) es más fácil de manejar y.

    Si usted está interesado, Te puedo enviar el código.

    Gracias de nuevo

    • Hola,

      Sí me interesa. Yo he corregido este problema en la interfaz de la grabadora, pero no en el tiempo. Y en realidad el almacenamiento timestamp proporciona más manipulaciones (como tris).
      Gracias por tu ayuda

  • Dalarwin

    Aquí pongo los archivos:
    https://owncloud.bjbteam.eu/public.php?service=files&t=04235e942e585ec46f8f3d1bf48c275d

    Después de eso trato de mostrar todo en una pequeña pantalla TFT directamente conectado a la Pi.
    Mantendremos informado cuando he conseguido.

  • Paztrick Prud

    Hola,
    Quizá sea un poco atrasada en este proyecto …
    Pero finalmente tengo algunas preocupaciones seguramente debido a mi falta de habilidades
    Mis sondas funcionan bien pero la pantalla me pregunto problema !
    ¿Cuál es el procedimiento para iniciar el sitio web del archivo ?

    Gracias

    • Hola,
      Es necesario tener instalado Nginx, Desempaquete el archivo y su contenido a la raíz definido en su instalación de Nginx. Con ca ya debe haber una pantalla. Para alimentar la base de datos SQlite es el python script a la raíz que se recuperará el puerto serial para enviar en la base de datos.

  • Paztrick Prud

    Nginx está instalado y funcionando, Poner el archivo en/var/www el script en python también funciona aunque tengo orden un poco precipitadamente y tengo puede reconstruirla.
    Tengo una pantalla en blanco cuando abro una ventana a la frambuesa con todavía un título del género tiempo frambuesa pi .

    • Eso da el Nginx log en/var/log/nginx ? ¿Qué es PHP esté correctamente instalado con php5-fpm ?

      • Paztrick Prud

        PHP está instalado pero tengo un registro de error :

        2014/12/06 17:56:56 [error] 5494#0: *60 FastCGI se siente en stderr: “Mensaje PHP: PH
        Error Fatal de P: SQLite3 la clase’ No se encuentra en/var / www/index.php en línea 235” WHI
        leyendo el encabezado de respuesta de upstream, cliente: 192.168.1.39, Servidor: localhos
        t, petición: “Obtener / HTTP/1.1”, upstream: “FastCGI://UNIX:/var/run/PHP5-fpm.sock:”
        , host: “pitemp”
        2014/12/06 17:56:56 [error] 5494#0: *60 FastCGI se siente en stderr: “Mensaje PHP: PH
        Error Fatal de P: SQLite3 la clase’ No se encuentra en/var / www/index.php en línea 235” WHI
        leyendo el encabezado de respuesta de upstream, cliente: 192.168.1.39, Servidor: localhos
        t, petición: “Haz /bootstrap/ico/favicon.png HTTP/1.1”, upstream: “FastCGI://UNIX
        :/var/run/PHP5-fpm.sock:”, host: “pitemp”

        • No está instalado el paquete sqlite3. Mira en las instrucciones para instalar los paquetes requeridos

          • Paztrick Prud

            Todavía era capaz de crear una base de datos según sus indicaciones …

          • Perdón, respuesta incorrecta : Este es el paquete php5-sqlite que no debe ser instalado.

          • Paztrick Prud

            Gracias , Esta vez tengo una pantalla , Supongo que ahora toma la base de datos llena a las temperaturas que aparecen !!
            Gracias de nuevo por este interesante proyecto.
            ( No he encontrado en el tutorial sin embargo php5-sqlite )

          • Paztrick Prud

            He intentado ejecutar manualmente por desgracia monitor.py !!!
            Aquí está el resultado !
            INTRODUCIR medidas de valores('AA', 10.66, ' 2014-12-07 12:32:10.000’);
            Rastreo. (más reciente llamada ultima):
            Archivo “./monitor.py”, línea 48, en
            excepto lite.Error, e:
            NameError: nombre ' lite’ No se ha definido
            Tengo la impresión de que nada ha terminado. !!
            También traté de llenar el bd con lo que se define en el tutorial !!
            También no funciona !!

          • Lo uso en casa y se terminó.
            He actualizado el script monitor.py. Reemplazar por sqlite3 lite

  • Paztrick Prud

    Soy yo otra vez :
    Rastreo. (más reciente llamada ultima):
    Archivo “./Ephemeride.py”, línea 38, en
    sql_command = “INSERT INTO efemérides VALUES(‘”+hoy en día ”‘,'”+ Fiesta”‘, ‘”+SolLever ”‘, ‘”+SolCoucher ”‘, ‘”+LuneLever ”‘, ‘”+LuneCoucher ”‘);”
    NameError: nombre de ' fiesta’ No se ha definido
    He intentado muchas cosas como la creación de un registro de efemérides en la base de datos pero el desespero para definir día y posteriormente en otros lugares ….;

    Gracias por tu ayuda iluminado

    • El tiempo en Francia tiene (Sin embargo) cambiado el formato del archivo de índice. Tengo un error, pero no en la fiesta. Hay que revisar la investigación en Python en el archivo descargado. Las expresiones regulares no son resultado, así que no se definen las variables.
      Para resolver los errores se puede agregar el bloque antes de la apertura del fichero index.html
      SolLever = ""
      SolCoucher = ""
      LuneLever = ""
      LuneCoucher = ""
      Fete = ""

      Pero para los valores que debes cambiar la secuencia de comandos

  • Jérôme

    Hola
    Estoy buscando a unos pocos a hacer lo mismo que tú , salvo que tenga un sensor ds18b20 y un sensor dht. Tengo nginx, PHP y sqlite ejecutado. Tengo una base de datos que recupera las medidas.Quería un poco editado su index.php para mis necesidades. Pero no sé demasiado Qué cambio. ¿Podría ayudarme por favor. Debería modificar otros archivos. Gracias de antemano.

    • Estoy tratando de hacer un sistema más “modular” avec des sondes sans fil mais ca n’est pas pour tout de suite qu’il va y avoir tous les articles pour le réaliser 😉
      Si desea utilizar este sistema, Mira en las fuentes, Debe haber suficientes comentarios para entender el contorno, pero ten cuidado, je n’ai pas de formation de développeur donc soyez indulgent 😉

  • Jérôme

    Gracias por su respuesta. ¿Quieres hablar sobre las fuentes del archivo index.php ? Gracias de antemano
    Jer

    • Sí. El archivo a leer las entradas en la base de datos SQLite para generar gráficos. Ver si se agregan “simplemente” sus medidas en la tabla ' medidas’ Esto será suficiente para representar el nivel
      Pero todo está en el archivo index.php. Los otros archivos de la plantilla y algunos scripts (memoria)

  • Jerome

    Hola
    Traté de usar su código de efemérides modificándolo un poco : https://drive.google.com/file/d/0B58x2helAgOdbTNpenBxUGFKcUE/view?usp=sharing

    Me da este error:

    Archivo “Ephemeride.py”, línea 32, en
    sql_command = “INSERT INTO efemérides VALUES(‘”+hoy en día ”‘, ‘”+ Fiesta”‘, ‘”+SolLever ”‘, ‘”+SolCoucher ”‘, ‘”+LuneLever ”‘, ‘”+LuneCoucher ”‘);”
    NameError: nombre de ' SolLever’ No se ha definido

    Tendrías una idea ?

    Gracias de antemano

    Jerome