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 |
||
optionnel |
||
optionnel |
Batterie de lithium 3.7V |
|
1 |
||
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 |
||
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:
- Normaler Démarrer mit Tastatur und Monitor, anschließend « abnabeln ».
- Démarrer über SSH (Secure Shell) vom PC z.B. mit dem Programm Putty
- 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.
4 commentaires
Wolfgang Menzel
Hallo,
es wird ja relativ viel mit de, 1.3" OLED Display gezeigt. Gibt es eigentlich auch einen funktionierenden Treiber für den Anschluss am ESP32??? Ich habe schon mehrere XXX-SH1106 ausprobiert, die am ESP32 laufen sollen, aber bisher hat noch nichts funktioniert, während es mit dem 0.96" Display und SSD1306 perfekt funktioniert.
Kann da jemand helfen?
Gruß
Wolfgang
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
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
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.