Gartenhäuschen mit Micro Controller und Sensoren überwachen - Teil 2
en el primera parte He descrito cómo el D1 Mini (ESP8266) con sensor de temperatura DHT22 y Gassensor MQ-2 como servidor Web envía los valores medidos de nuestra casa jardín en Wi-Fi doméstica.

Estos valores se muestran en el navegador en el PC o el teléfono inteligente (ver foto) cuando se introduce la dirección IP del servidor web (aquí: http://192.168.178.100) en la línea de dirección.

El servidor web está programado para emitir la palabra "alarma" cuando se supera una temperatura de 50 ° C o una concentración de gas de 100. Pero hay que mirar activa en la página correspondiente a conseguir todo lo visualiza. No me importaba, yo también quería ser notificado con una señal acústica y óptica. Así que tuve que evaluar el sitio web con un microcontrolador o Micro Computer, filtro de los valores medidos y, si es necesario, activar la alarma con un zumbador y LED.

hardware necesario para la primera parte

1

D1 Mini Nodemcu con ESP8266-12F módulo WLAN

Opcional

escudo de la batería para baterías de litio para D1 Mini

Opcional

3.7V batería de litio

1

DHT22 AM2302 sensor de temperatura y sensor de humedad

1

humo sensor módulo de calidad de aire sensor de gas-2 MQ

MINI BREADBOARD, cable de puente


hardware necesario para la segunda parte

1

Frambuesa Pi 3b, 4b o Zero W (WLAN-capaz)

1

OLED I2C 128 x 64 píxeles 1,3 pulgadas

MINI BREADBOARD, cable de puente

zumbador activa

LED rojo con resistencia en serie de 200 a 330 ohms


El exceso es el uso de un controlador de micro, ya que funciona después de la conexión "en la digitación". Pero no me quiero sentir de inmediato a utilizar mi tabla D1 para la consulta. Sólo después de la ayuda de un colega blogger hizo lo hago. Por lo tanto, lo primero que presente a la (para mí) la solución más rápida con la Frambuesa Pi y mover el boceto de la Junta D1 como Web Client en la tercera parte de la serie blog.

Ya he hecho la lectura de un sitio web basado en texto en relación con la descarga de drivers y librerías de programas con mayor frecuencia. Con CURL ( „ClienteporURL" es unLínea de comandoHerramienta para descargar o subir archivos a través de una dirección de Internet) que se puede descargar el texto completo HTML desde el servidor Web ESP con la dirección IP 192.168.178.100 en el terminal. (La línea correspondiente en el programa con la dirección IP que debe del personalizar supuesto para su servidor Web).

Después de muchas líneas con el formato, nos encontraremos con los valores medidos buscados para la temperatura, rel. Humedad (Inglés Humedad) de la DHT22 y para la concentración de gas de la MQ-2 al final.

Con la redirección> Text.txt puedo guardar todo el texto para su posterior edición en un archivo.

 rizo 192.168.178.100> text.txt

Para el filtrado de los valores de medición, el control de la superación de los valores límite y, si es necesario, el disparo de la alarma Yo uso un programa Python de desarrollo propio. Para la ejecución del comando de terminal mencionados arriba, se requiere que el OS módulo de programa, es decir,

 importar OS

y luego

 OS.sistema('Curl 192.168.178.100> text.txt')

Para asignar el texto almacenado a la página web de una variable, se necesitan los siguientes comandos:

 F=abierto("Text.txt","R")
 datos = F.leyendo()
 F.cerrar

Con los métodos de cadena find (), corte en rodajas [a partir de: a], split () y la tira () finalmente los valores medidos se filtran.

Este es el programa de Python con el cliente Web y Alarma (Descargar):

 importar OS
 importar tiempo
 importar RPI.GPIO como GPIO
 
 zumbador=21
 GPIO.setwarings(Falso)
 GPIO.modo de ajuste(GPIO.bcm)
 GPIO.configurar(zumbador,GPIO.FUERA)
 
 def alarma():
     impresión("Alarma")
     por I en trinquete(2):
         GPIO.producción(zumbador,Cierto)
         tiempo.dormir(0.2)
         GPIO.producción(zumbador,Falso)
         tiempo.dormir(0.1)
         GPIO.producción(zumbador,Cierto)
         tiempo.dormir(0.2)
         GPIO.producción(zumbador,Falso)
         tiempo.dormir(1)
         
 Tiempo Cierto:
     tratar:
         OS.sistema('Curl 192.168.178.100> text.txt')
         F=abierto("Text.txt","R")
         datos = F.leyendo()
         F.cerrar
         #Print (datos)
         impresión()
         índice=datos.encontrar("Temperatura")
         #Print (índice)
         datos1=datos[índice:-23]
         impresión(datos1)
         valores=datos1.separar(":")
         impresión(valores)
         t=flotador(valores[1][0:6].banda())
         impresión("T =",t,"° C")
         H=En t(valores[2][1:3])
         impresión("H =",H," %")
         GRAMO=En t(valores[3][1:4])
         impresión("G =",GRAMO,"PPM")
         SI (t>25.0 O GRAMO>100):
             alarma()        
         tiempo.dormir(1)
 
     excepto:
         tiempo.dormir(10)

La salida de los datos tiene lugar en el terminal de Python, cuando se superan los valores límite, el zumbador y el LED se activan para GPIO21.

Para hacer funcionar el Raspi en el "Modo sin cabeza", es decir, sin el teclado y el monitor, tiene sentido para integrar una pequeña pantalla OLED para la salida de datos en la disposición. Ese OLED I2C 128 x 64 píxeles 1,3 pulgadas Aislado con cuatro conexiones para 3,3 V (pin 1) y GND (pin 9) y SDA (pin 3) y SCL (pin 5). Para esto he descargado el luma.core biblioteca de programas de RM casco von Github.
Si su sistema operativo no Frambuesa Pi es hasta la fecha, los siguientes comandos pueden ser necesarios:

  $ Sudo usermod -a -GRAMO I2C, SPI, GPIO PI
  $ Sudo APT Instalar build-essential python3-Dev python3-Pip-Dev Libreietype6 libjpeg-Dev
  $ Sudo APT Instalar libSDL-Dev LibportMidi-Dev-libSDL TTF2.0-Dev-libSDL Mixer1.2-DEV-libSDL Image1.2-Dev

La clonación del repositorio se lleva a cabo con:

   $ git clon https://github.com/rm-hull/luma.examples.git
   $ CD luma.examples
   $ Sudo -H pip instalar -ce .

En el directorio de OLED con sus otros subdirectorios, primero tenemos ningún derecho de escritura. Debido a las dependencias internas de la demo_opts.py módulo de programa y las fuentes de subdirectorios, sin embargo, tiene sentido para escribir nuestro programa en los ejemplos de subdirectorios. Nosotros nos recogemos los derechos de escritura:

 sudo chmod 777 -C -R / Inicio / pi / OLED
Por favor, no olvide activar tanto SSH y I2C en la configuración Raspberry Pi en la ficha Interfaces.

Aquí está el diagrama de circuito:

y el programa completo Python que utiliza partes de la luma.core Ejemplo Terminal.py: (Descargar)

 #! / Usr / bin / env python
 # - * - Codificación: UTF-8 - * -
 # Web Client para leer datos del medio ambiente
 # Por Bernd Albrecht para AZ-Entrega
 #
 # Luma.core: Copyright (C) 2014-2020 Richard Hull y colaboradores
 # Ver License.RST para más detalles.
 
 importar OS
 importar tiempo
 de pathlib importar Sendero
 de demo_opts importar get_device
 de luma.centro.virtual importar Terminal
 de Pila importar Imaginario
 importar RPI.GPIO como GPIO
 
 zumbador=21
 GPIO.setwarings(Falso)
 GPIO.modo de ajuste(GPIO.bcm)
 GPIO.configurar(zumbador,GPIO.FUERA)
 
 def make_font(Apellido, Talla):
     font_path = cuerda(Sendero(__Expediente__).resolver().padre.Joinpath(Fuentes '', Apellido))
     regreso Imaginario.tipo verdadero(font_path, Talla)
 
 def alarma():
     impresión("Alarma")
     por I en trinquete(2):
         GPIO.producción(zumbador,Cierto)
         tiempo.dormir(0.2)
         GPIO.producción(zumbador,Falso)
         tiempo.dormir(0.1)
         GPIO.producción(zumbador,Cierto)
         tiempo.dormir(0.2)
         GPIO.producción(zumbador,Falso)
         tiempo.dormir(1)
 
 def sensor():
     global t,H,GRAMO,Tiempo
     tratar:
         OS.sistema('Curl 192.168.178.100> text.txt')
         F=abierto("Text.txt","R")
         datos = F.leyendo()
         F.cerrar
         
     excepto:
         t=H=GRAMO=0
         tiempo.dormir(10)
 
     #Print (datos)
     impresión()
     índice=datos.encontrar("Temperatura")
     #Print (índice)
     datos1=datos[índice:-23]
     impresión(datos1)
     valores=datos1.separar(":")
     impresión(valores)
     t=flotador(valores[1][0:6].banda())
     impresión("T =",t,"° C")
     h=En t(werte[2][1:3])
     impresión("H =",h," %")
     gramo=En t(werte[3][1:4])
     impresión("G =",gramo)
     si (t>25.0 o gramo>100):
         alarma()        
     tiempo.dormir(1)
 
 def principal():
     # Para FONTNAME, tamaño en [(Ninguno, Ninguno), ("proggytiny.ttf", 16), ('chikarego.ttf', 16)]:
     por nombre de la fuente, Talla en [("Proggytiny.ttf", 16)]:
         impresión()
         impresión(nombre de la fuente, Talla)
         fuente = make_font(nombre de la fuente, Talla) si nombre de la fuente demás Ninguno
         término = Terminal(dispositivo, fuente)
             
     tiempo Cierto:
             sensor()
 
             término.claro()
             término.animar = Falso
             término.claro()
             término.pone("Temperatura:")
             término.pone(str(t))
             término.pone("° C")
             término.prender()
             término.prender()
             término.pone("Humedad:")
             término.pone(str(h))
             término.pone(" %")
             término.prender()
             término.prender()
             término.pone("Gas:")
             término.pone(str(gramo))
             término.prender()          
             término.enjuagar()
             tiempo.dormir(2)
 
 si __nombre__ == "__principal__":
     tratar:
         dispositivo = get_device()
         principal()
     excepto Teclainterrupt:
         aprobar

Für den Programmstart Haben Sie Grundsätzlic Drei Möglichkeiten:

  1. Normaler Start MIT Tastatur y Monitor, Anschließend "Abnabeln".
  2. Iniciar Über ssh (shell seguro) vom pc z.b. MIT DEM Programm Motty
  3. Einrichten von autostart (beschrieben im blog Robot coche mit ramberry pi)

Es Reicht Jedoch Nicht, Das Programm Zu Laden und Zu Starten, Weil Die Voreinstellungen für Ein Anderes Display MIT DEM TREIRIERS SSD1306 FESTGELEGT Sind. Deshalb Muss für Mancer 1,3 ZOLL OLED I2C 128 x 64 Pantalla de píxeles Beim Programmaufruf der Parámetro --Display SH1106 Übergeben Werden.

DIE WEITEREN VOREINSTELLUNGEN FÜR INTERFIZ: I2C y DIMENSIONES: 128 x 64 Sind Richtig. WENN SIE EIN Anderes Display VERWENDEN, lohnt der Blick en Die Feati Readme.RST Im Verzeichnis Luma.Examplos.

IM DRUTTE TEIL WERDE ICH DIE AUSWERTRUNG DES MESSWERTE MIT EINEM D1 Board (Oder Einem Beliebigen Anderen ESP8266 Micro Controller) Vorstellen.


Descargar als pdf

MuestraPrecipitador electrostático - 8266Proyectos para principiantesRaspberry piCasa inteligente

3 comentarios

Bernd Albrecht

Bernd Albrecht

@ Sylvio Beck:
In seinem Blog vom 12. August 2020 zeigt Markus Pohle die Verwendung von IFTTT (if this than that).
https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/enc28j60-ethernet-modul-fur-arduino-esp-und-raspi
Nachteil beider Lösungen: Man benötigt einen Internet-Dienstleister für das Versenden einer Nachricht. Das wollte ich vermeiden.

Wolfgang Herz

Wolfgang Herz

Sehr schönes Projekt. Sicherlich lässt sich da etwas optimieren. _Vielleicht ist der Vorschlag von Hr. Beck auch als Beispiel abbildbar. Trotzdem finde ich die direkte Anzeige im Display gut. Es macht Spaß derart tolle Projekt im AZ-Delivery zu haben! Ich habe bisher viel dazugelernt.

Danke

Sylvio Beck

Sylvio Beck

Schönes Projekt
Aber viel zu kompliziert viel einfacher wäre es wenn das Gerät im Garten Anomalien selbst erkennt und mit Hilfe eines Web Dienstes wie notifymydevice.com eine push Meldung auf das Handy sendet.

Die Daten die der Server sammelt können auch direkt per ftp upload ins Web oder eigene nas hochgeladen werden.

Bei Interesse könnt ich den entsprechenden Code zur Verfügung stellen.

Deja un comentario

Todos los comentarios son moderados antes de ser publicados

Artículos de blog

  1. Ahora instalamos el esp32 a través de la administración.
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. Transporte Aéreo - programación de ESP mediante redes locales inalámbricas