Gartenhäuschen mit Micro Controller und Sensoren überwachen - Teil 2
dans le première partie J'ai décrit comment la Mini D1 (ESP8266) avec capteur de température DHT22 et Gassensor MQ-2 en tant que serveur Web envoie des valeurs mesurées de notre gîte de jardin dans une connexion Wi-Fi domestique.

Ces valeurs sont affichées dans le navigateur sur le PC ou sur le smartphone (voir image) lorsque vous entrez l'adresse IP du serveur Web (ici: http://192.168.178.100) dans la ligne d'adresse.

Le serveur Web est programmé pour émettre le mot "Alarme" lorsqu'une température de 50 ° C ou une concentration de gaz de 100 est dépassée. Mais vous devez avoir l'air actif sur la page correspondante pour que tout soit affiché. Je me suis inquiété, je voulais aussi être averti d'un signal acoustique et optique. J'ai donc dû évaluer le site Web avec un micro contrôleur ou un micro-ordinateur, filtrer les valeurs mesurées et, si nécessaire, déclencher l'alarme avec une sonnerie et une LED.

Matériel requis pour la première partie

1

D1 Mini Nodemcu avec module WLAN ESP8266-12F

optionnel

Bouclier de batterie pour piles au lithium pour D1 Mini

optionnel

Batterie de lithium 3.7V

1

DHT22 AM2302 Capteur de température et capteur d'humidité

1

Capteur de gaz MQ-2 Capteur de fumée Module de qualité de l'air

Mini pain de pain, câble de cavalier


Matériel requis pour la deuxième partie

1

Raspberry Pi 3b, 4b ou zéro W (WLAN-Capable)

1

Affichage de 1,3 pouce OLED I2C 128 x 64 Pixel

Mini pain de pain, câble de cavalier

Buzzer actif

LED rouge avec résistance de série 200 à 330 ohms


Excessive est l'utilisation d'un micro contrôleur, car elle fonctionne après la mise sous tension "sur le doigté". Mais je ne voulais pas me sentir tout de suite pour utiliser mon tableau D1 pour la requête. Ce n'est qu'après l'aide d'un collègue de blogueurs que je l'ai fait. Par conséquent, j'ai d'abord introduire la solution (pour moi) plus rapide avec le PI de framboise et déplacez le croquis de la carte D1 en tant que client Web sur la troisième partie de la série Blog.

J'ai déjà fait la lecture d'un site Web basé sur un texte en rapport avec le téléchargement de pilotes et de bibliothèques de programme plus fréquemment. Avec curl ( „ClientpourURLS" est unLigne de commandeOutil de téléchargement ou de téléchargement de fichiers via une adresse Internet) Je peux télécharger le texte HTML complet à partir du serveur Web ESP avec l'adresse IP 192.168.178.100 dans le terminal. (La ligne correspondante dans le programme avec l'adresse IP que vous devez bien sûr personnaliser pour votre serveur Web).

Après de nombreuses lignes avec formatage, nous trouverons les valeurs mesurées recherchées pour la température, rel. Humidité (humidité anglaise) à partir du DHT22 et de la concentration en gaz du MQ-2 à la fin.

Avec la redirection> text.txt i Enregistrez le texte entier pour une modification ultérieure dans un fichier.

 boucle 192.168.178.100> text.txt

Pour le filtrage des valeurs mesurées, vérifiez le dépassement des valeurs limites et, si nécessaire, le déclenchement de l'alarme que j'utilise un programme Python auto-développé. Pour l'exécution de la commande Terminal mentionnée ci-dessus, le système d'exploitation du module de programme est requis, c'est-à-dire

 importer Système d'exploitation

puis

 Système d'exploitation.système('Curl 192.168.178.100> Text.txt')

Pour attribuer le texte stocké au site Web d'une variable, les commandes suivantes sont nécessaires:

 F=ouvert("text.txt","r")
 Les données = F.en train de lire()
 F.proche

Avec les méthodes de chaîne, trouvez (), la tranchée [de: à], divisée () et la bande () finalement les valeurs mesurées sont filtrées.

Voici le programme Python avec le client Web et l'alarme (Télécharger):

 importer Système d'exploitation
 importer temps
 importer RPI.Gpio comme Gpio
 
 avertisseur sonore=21
 Gpio.marchandings(Faux)
 Gpio.mode réglages(Gpio.Bcm)
 Gpio.d'installation(avertisseur sonore,Gpio.DEHORS)
 
 defer alarme():
     imprimer("Alarme")
     pour je dans rochet(2):
         Gpio.sortir(avertisseur sonore,Vrai)
         temps.dormir(0.2)
         Gpio.sortir(avertisseur sonore,Faux)
         temps.dormir(0.1)
         Gpio.sortir(avertisseur sonore,Vrai)
         temps.dormir(0.2)
         Gpio.sortir(avertisseur sonore,Faux)
         temps.dormir(1)
         
 Tandis que Vrai:
     essayer:
         Système d'exploitation.système('Curl 192.168.178.100> Text.txt')
         F=ouvert("text.txt","r")
         Les données = F.en train de lire()
         F.proche
         #Print (données)
         imprimer()
         indice=Les données.trouve("Température")
         #Print (index)
         Data1=Les données[indice:-23]
         imprimer(Data1)
         valeurs=Data1.diviser(":")
         imprimer(valeurs)
         t=flotter(valeurs[1][0:6].déshabiller())
         imprimer("T =",t,"° C")
         H=int(valeurs[2][1:3])
         imprimer("H =",H," %")
         g=int(valeurs[3][1:4])
         imprimer("G =",g,"Ppm")
         SI (t>25.0 OU g>100):
             alarme()        
         temps.dormir(1)
 
     sauf:
         temps.dormir(10)

La sortie des données a lieu dans la coquille Python, lorsque les valeurs limites sont dépassées, la sonnerie et la LED sont activées à GPIO21.

Pour utiliser le RASPI dans le "mode sans tête", c'est-à-dire sans clavier et moniteur, il est logique d'intégrer un petit écran OLED pour la sortie de données dans l'arrangement. Cette Affichage de 1,3 pouce OLED I2C 128 x 64 Pixel Isolé avec quatre connexions pour 3,3 V (PIN 1) et GND (PIN 9) et SDA (PIN 3) et SCL (PIN 5). Pour cela, j'ai téléchargé la bibliothèque de programme Luma.core de RM Hull Von Github.
Si votre OS de Raspberry Pi n'est pas à jour, les commandes suivantes peuvent être nécessaires:

  $ Sudo usermod -une -G I2C, SPI, GPIO PI
  $ Sudo Apt installer python3-dev python3-pp libreietype6-dev libjourg-dev build-essentiel
  $ Sudo Apt Installation Libsdl-dev libessmidi-dev libsdl-ttf2.0-dev libsdl-mixer1.2-dev libsdl-image1.2-dev

Le clonage du référentiel a lieu avec:

   $ git Clone https://github.com/rm-hull/luma.examples.git
   $ Cd Luma.Exemples
   $ Sudo -H Installation de pip faire .

Dans le répertoire OLED avec ses autres sous-répertoires, nous n'avons aucun droit d'écriture. En raison des dépendances internes sur le module de programme Demo_opts.py et les polices de sous-répertoire, cependant, il est logique d'écrire notre programme dans les exemples de sous-répertoire. Nous allons nous chercher les droits d'écriture:

 sudo chmod 777 -c -R / Accueil / Pi / OLED
N'oubliez pas d'activer SSH et I2C dans la configuration PI de Raspberry sur l'onglet Interfaces.

Voici le diagramme de circuit:

et le programme Python complet qui utilise des parties de Luma.core Exemple Terminal.py: (Télécharger)

 #! / usr / bin / env python
 # - * - CODING: UTF-8 - * -
 # Client Web pour lire les données environnementales
 # Par Bernd Albrecht pour AZ-Livraison
 #
 # Luma.core: Copyright (c) 2014-2020 Richard Hull et contributeurs
 # Voir Licence.Rst pour plus de détails.
 
 importer Système d'exploitation
 importer temps
 de pathologienne importer Chemin
 de Demo_opts importer get_device
 de luma.coeur.virtuel importer Terminal
 de Pile importer Imaginaire
 importer RPI.Gpio comme Gpio
 
 avertisseur sonore=21
 Gpio.marchandings(Faux)
 Gpio.mode réglages(Gpio.Bcm)
 Gpio.d'installation(avertisseur sonore,Gpio.DEHORS)
 
 defer make_font(Nom de famille, Taille):
     Font_Path = chaîne de caractères(Chemin(__Déposer__).résoudre().parent.Joinpath('Fonts', Nom de famille))
     revenir Imaginaire.vrai type(Font_Path, Taille)
 
 defer alarme():
     imprimer("Alarme")
     pour je dans rochet(2):
         Gpio.sortir(avertisseur sonore,Vrai)
         temps.dormir(0.2)
         Gpio.sortir(avertisseur sonore,Faux)
         temps.dormir(0.1)
         Gpio.sortir(avertisseur sonore,Vrai)
         temps.dormir(0.2)
         Gpio.sortir(avertisseur sonore,Faux)
         temps.dormir(1)
 
 defer capteur():
     global t,H,g,Temps
     essayer:
         Système d'exploitation.système('Curl 192.168.178.100> Text.txt')
         F=ouvert("text.txt","r")
         Les données = F.en train de lire()
         F.proche
         
     sauf:
         t=H=g=0
         temps.dormir(10)
 
     #Print (données)
     imprimer()
     indice=Les données.trouve("Température")
     #Print (index)
     Data1=Les données[indice:-23]
     imprimer(Data1)
     valeurs=Data1.diviser(":")
     imprimer(valeurs)
     t=flotter(valeurs[1][0:6].déshabiller())
     imprimer("T =",t,"° C")
     h=int(werte[2][1:3])
     imprimer("H =",h," %")
     g=int(werte[3][1:4])
     imprimer("G =",g)
     si (t>25.0 ou g>100):
         alarme()        
     temps.dormir(1)
 
 def principale():
     # Pour fontname, la taille dans [(None, None), ( "ProggyTiny.ttf", 16), ( 'ChiKareGo.ttf', 16)]:
     pour fontname, Taille dans [("ProggyTiny.ttf", 16)]:
         imprimer()
         imprimer(fontname, Taille)
         Police de caractère = make_font(fontname, Taille) si fontname autre Rien
         terme = Terminal(dispositif, Police de caractère)
             
     tandis que Vrai:
             capteur()
 
             terme.dégager()
             terme.animer = Faux
             terme.dégager()
             terme.met("Température:")
             terme.met(str(t))
             terme.met("° C")
             terme.println()
             terme.println()
             terme.met("Humidité: ")
             terme.met(str(h))
             terme.met(" %")
             terme.println()
             terme.println()
             terme.met("Gaz: ")
             terme.met(str(g))
             terme.println()          
             terme.affleurer()
             temps.dormir(2)
 
 si __Nom__ == "__principale__":
     essayer:
         dispositif = get_device()
         principale()
     sauf KeyboardInterrupt:
         passe

Für den Programmstart haben Sie grundsätzlich drei Möglichkeiten:

  1. Normaler Démarrer mit Tastatur und Monitor, anschließend « abnabeln ».
  2. Démarrer über SSH (Secure Shell) vom PC z.B. mit dem Programm Putty
  3. Einrichten von Autostart (Blog beschrieben im Robot Car mit Raspberry Pi)

Es reicht jedoch nicht, das Programm zu und zu starten chargé, weil die Voreinstellungen für ein anderes Display mit dem Treiber SSD1306 festgelegt sind. Deshalb muss für unser 1,3 Zoll OLED I2C 128 x 64 pixels beim Programmaufruf der paramètre --display sh1106 übergeben werden.

Die weiteren Voreinstellungen für Interface: I2C und Dimensions: 128 x 64 richtig sind. Wenn Sie les anderes Afficher verwenden, lohnt der Blick in die Datei README.rst im Verzeichnis luma.examples.

Im Dritten Teil werde ich die Auswertung der Messwerte mit einem D1 Conseil (oder einem anderen beliebigen ESP8266 Controller Micro) vorstellen.


Télécharger als pdf

EtalagesEsp-8266Projets pour les débutantsTarte aux framboisesMaison intelligente

3 commentaires

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.

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés

Messages de blogs recommandés

  1. Installez maintenant ESP32 via l'administrateur de la carte
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA-Over the Air-ESP Programmation par WiFi