Regenmesser Basisversion - Teil 1 - AZ-Delivery

Ce message est également comme Document PDF disponible.

 

S'il existe toute une gamme de capteurs disponibles pour enregistrer la température, l'humidité, la pression atmosphérique, l'éclairement... nous devons puiser dans la boîte à outils pour construire un capteur de précipitations. Il s’agit simplement d’enregistrer des quantités relativement faibles de liquides, qui ne représentent pas un flux continu mais, au sens propre du terme, se présentent sous forme de gouttelettes. Ces gouttelettes doivent être collectées. Lorsque le pot est rempli de gouttelettes, il doit être vidé automatiquement et ce processus doit être enregistré. J'ai copié le principe d'appareils commerciaux sur Internet. Une bascule avec deux bols est montée de manière à pouvoir être facilement tournée et inclinée lorsqu'un certain niveau de remplissage est atteint. Ce processus de basculement doit maintenant être enregistré par des capteurs appropriés. Vous découvrirez comment cela s'est passé en détail, y compris les mauvais virages, dans les prochains épisodes de la série.

 

MicroPython sur ESP32 et ESP8266

 

aujourd'hui [1] 

 

L’ESP32 comme pluviomètre – Partie 1

Dans l'épisode d'aujourd'hui, nous allons nous occuper de la mécanique du projet, examiner le fonctionnement des contacts Reed et créer un premier petit programme de test que nous développerons dans les deux prochains épisodes. Pour ce faire, nous utilisons le sac d’astuces de MicroPython. Vous en apprendrez davantage sur les interruptions, le rebond des contacts et comment les désactiver par programme. Enfin, nous transférerons les fichiers contenant les valeurs mesurées vers le PC via FTP, en utilisant la technologie threading.

 

mécanique

La bascule

Le capteur permettant de mesurer la quantité de pluie est une bascule à deux plateaux.

 

Figure 1 : Partie de base de l'appareil

Ici, la bascule est déjà installée dans la partie inférieure du tube de mesure. J'ai utilisé un couvercle d'un tuyau d'égout en PVC de calibre 100. Deux ouvertures ont été sciées pour que l'eau puisse s'écouler.

 

Figure 2 : Modèle de bascule de pluie

La figure 2 montre le motif de la bascule, réalisée à partir de plexiglas de 2 mm. Le modèle 1:1 sous la forme d'un Fichier PDF, peut être téléchargé. J'ai utilisé la colle PLEXIGLAS® « Acrifix 192 » pour le collage. Il comble les lacunes et durcit sous la lumière UV ou simplement à la lumière du jour. J'ai collé les pièces du gabarit sur le verre acrylique avec un bâton de colle soluble dans l'eau. Après le sciage et le perçage, vous pouvez simplement retirer à nouveau le papier. N'oubliez pas de nettoyer les zones à coller avec de l'acétone ou de l'isopropanol.

 

La position du trou de 1,5 mm pour l'arbre en fil de cuivre de 1,4 mm (l'arbre ne doit pas rouiller, donc n'utilisez pas de fer) détermine la facilité avec laquelle la bascule s'incline. Cela augmente à mesure que le trou est haut au-dessus du sol. J'utilise le trou supérieur et j'obtiens une capacité d'env. 2,4 cm³ jusqu'à ce que la bascule bascule. Nous verrons plus tard quelle quantité de pluie cela représente en fonction de la zone.

 

Que pouvez-vous faire de mal ? La résolution de la mesure du volume est meilleure si la bascule est la plus légère possible. Vous devez donc utiliser le matériau le plus fin possible et le moins de colle possible. Ma première tentative de fabrication de la bascule en fer blanc ou en tôle de cuivre a été un échec total. Le volume des bacs n'était pas suffisant pour faire basculer la bascule car la construction était beaucoup trop lourde.

 

La suspension de la bascule est également en verre acrylique. Les panneaux latéraux sont vissés sur la plaque de base de 6 mm d'épaisseur afin que l'objet puisse être démonté. Les dimensions peuvent être trouvées dans la figure 3.

 

Figure 3 : Support de culbuteur

 

Pour éviter que le culbuteur ne frotte contre les parois latérales, j'ai placé des petits disques en plexiglas entre elles.

 

Figure 4 : Bascule latérale

 

Figure 5 : Bascule, vue du nord-est

 

Pour que les précipitations atterrissent spécifiquement dans les plateaux, elles doivent être collectées sur une zone de taille connue et guidées via un entonnoir juste au-dessus de la bascule. Bien entendu, une seule des deux moitiés peut être remplie à la fois. Il y a trois choses à considérer.

 

       Les baignoires doivent être suffisamment larges pour que rien ne se passe mal.

       Le bord supérieur de la cloison doit être suffisamment éloigné de la ligne de chute des gouttes d'eau.

       Et comme les grands entonnoirs ont généralement des tubes de sortie plus épais, j'ai dû utiliser la buse d'une cartouche en silicone pour créer une sortie plus fine. La buse était simplement collée dans l'entonnoir avec du silicone.

 

Un tuyau d'égout de 100 mm qui supporte l'entonnoir a été coupé à longueur afin que l'entonnoir puisse être placé dans la bonne position. La figure 5 montre les trois composants de la mécanique.

 

Figure 6 : Les parties mécaniques du pluviomètre

 

Voici à quoi ressemble l'appareil fini. L'ouverture dans le tube permet de contrôler l'alignement précis de l'entonnoir. Si nécessaire, la pièce sciée peut être équipée de charnières et utilisée comme porte.

 

Figure 7 : Station de mesure assemblée

 

Enregistrer le mouvement d'inclinaison

Passons à la détermination du mouvement d'inclinaison. Des mesures avec une pipette ont montré que la bascule s'incline vers la droite et vers la gauche avec des quantités de remplissage légèrement différentes, 2,4 cm³ et 2,5 cm³. Cette situation résulte apparemment d’une application inégale de l’adhésif ou d’autres asymétries. Les deux positions finales stables devaient donc être détectables. Au départ j'avais prévu d'utiliser un accéléromètre MPU6050 sous la forme d'un module GY 521. Cependant, les quatre câbles nécessaires gênaient tellement le basculement de la bascule que j'ai dû m'abstenir de le faire. Les barrières lumineuses réfléchissantes étaient trop encombrantes pour moi et j'ai donc fini par utiliser des contacts Reed.

 

Ce sont de petits interrupteurs à commande magnétique dans un tube de verre mesurant 2 mm x 13 mm. La chose commune à ces choses, ce sont les fils de connexion rigides. J'ai tué quatre des contacts, car si vous le pliez trop près du verre, il se brisera immédiatement et tuera le composant.

 

Figure 8 : Contact Reed

 

Finalement, nous avons réussi à fixer deux des objets sur une paroi latérale du support à l'aide d'un mastic à deux composants. Ça a l’air sauvage, mais ça marche bien. Il est préférable d'attacher la laisse de la même manière.

 

Figure 9 : Emplacement des contacts et de l'aimant

 

Un petit disque aimanté en néodyme est collé sur la bascule (Acrifix) et les contacts sont alignés en fonction de cette position. La figure 10 illustre le fonctionnement des contacts Reed et explique pourquoi ce type d'aimant ne doit pas être situé exactement devant le contact.

 

Figure 10 : Comment fonctionne un contact Reed

 

Le contact est ouvert en dehors des champs magnétiques (1). Les ressorts de contact sont constitués d'un matériau ferromagnétique, probablement du fer ou un alliage correspondant. Les pôles d'un disque magnétique reposent sur les surfaces coupées. Si vous vous approchez du contact Reed, le fil de fer (en bas) devient un aimant (pôle sud) en raison de l'influence magnétique et attire le deuxième ressort de contact. Le contact se ferme (2).

 

Si vous deviez glisser le disque magnétique au centre sous le contact, des pôles similaires seraient influencés dans les ressorts. Parce qu’ils se repoussent, le contact ne peut pas se fermer (3).

 

De petites barres magnétiques peuvent être placées directement parallèlement au contact. Étant donné que différents pôles des ressorts de contact sont alors influencés, le contact se ferme (4).

 

 

Matériel

Pour les deux familles de contrôleurs, ESP32 et ESP8266, il faut d'abord penser aux broches GPIO pouvant être utilisées. Certains d'entre eux sont intégrés au processus de démarrage et ne peuvent donc pas être utilisés sans restrictions. En plus de trois entrées IRQ, une entrée bouton et une sortie LED, nous avons également besoin des bus I2C et SPI, qui occupent à eux seuls 6 broches. Les tableaux fournissent des informations sur l'utilisation des broches. Avec l'ESP8266, en plus des lignes de bus, il ne reste que 3 broches GPIO, dont D0 = GPIO16 n'est pas compatible IRQ. Les « petits » sont donc exclus de notre projet.

 

Mais il y a aussi un problème avec l'ESP32. La broche 12 ne doit pas être ÉLEVÉE lors du démarrage, sinon le contrôleur ne démarrera pas. Malheureusement, cette connexion est la ligne MISO du bus SPI1 et est tirée à 3,3 V par l'esclave. SPI1 est donc tabou. Utilisez donc SPI2 ou Soft-SPI. Nous y reviendrons dans le prochain post.

 

Passons aux pièces nécessaires au projet. Le tableau répertorie tous les composants nécessaires tout au long du projet. Dans ce premier épisode, ceux surlignés en gris ne sont pas utilisés dans un premier temps.

 

1

Kit de développement ESP32 C dessoudé ou

Kit de développement ESP32 C V4 dessoudé ou

Carte de développement WiFi WLAN, Module NodeMCU ESP32 avec CP2102 ou

Kit NodeMCU-ESP-32S ou

ESP32 Lolin Kit de développement Bluetooth WiFi LOLIN32

1

10x interrupteur magnétique N/O Reed, 2x14mm

1

Horloge temps réel RTC DS3231 I2C horloge temps réel

1

Lecteur SPI Micro mémoire SD TF carte module de protection de carte mémoire

1

Carte SD par exemple 8 Go

1

Capteur d'humidité et de température GY-21 HTU21

1

MB-102 Breadboard Breadboard avec 830 contacts 3pcs

1

Écran OLED SSD1306 de 0,96 pouces I2C 128 x 64 pixels

1

DIRIGÉ

1

Résistance 220Ω

2

Résistance 10kΩ

1

Module de boutons KY-004 ou

Jeu de boutons de micro-interrupteur - 180 pièces, différentes tailles, boutons polyvalents pour l'électronique

facultatif

Analyseur logique

Tableau 3 : Composants

 

Sur les 10 contacts Reed du kit, il en faut 2 (ou comme moi, six).

 

Le schéma de circuit de la figure 11 montre comment les pièces sont connectées.

 

Figure 11 : Circuit pluviomètre

 

Le logiciel

Pour flasher et programmer l'ESP32 :

Thonny ou

µPyCraft

 

 

Firmware utilisé pour un ESP32 :

Téléchargement du micrologiciel Micropython

 v1.19.1 (2022-06-18).bin

 

 

Les programmes MicroPython pour le projet :

timeout.py Minuterie logicielle non bloquante

oled.py API OLED

ssd1306.py Pilote OLED

couteau de pluie.py Programme de démonstration

 

MicroPython - langage - modules et programmes

Pour installer Thonny vous pouvez en trouver un ici instructions détaillées (version anglaise). Il y a aussi une description de la façon de procéder Micrologiciel Micropython (au 18 juin 2022) sur la puce ESP brûlé devient.

 

MicroPython est un langage interpréteur. La principale différence avec l'IDE Arduino, où vous flashez toujours et exclusivement des programmes entiers, est qu'il vous suffit de flasher le firmware MicroPython une seule fois au début sur l'ESP32 pour que le contrôleur comprenne les instructions MicroPython. Vous pouvez utiliser Thonny, µPyCraft ou esptool.py pour ce faire. J'ai le processus pour Thonny ici décrit.

 

Une fois le micrologiciel flashé, vous pouvez avoir une conversation informelle avec votre contrôleur, tester des commandes individuelles et voir immédiatement la réponse sans avoir à compiler et transférer au préalable un programme entier. C'est exactement ce qui me dérange à propos de l'IDE Arduino. Vous gagnez beaucoup de temps si vous pouvez effectuer des tests simples de syntaxe et de matériel jusqu'à tester et affiner des fonctions et des parties entières du programme via la ligne de commande avant de créer un programme à partir de celui-ci. Pour cela, j'aime toujours créer de petits programmes de test. Comme une sorte de macro, elles combinent des commandes récurrentes. Des applications entières se développent parfois à partir de tels fragments de programme.

 

Démarrage automatique

Si vous souhaitez que le programme démarre de manière autonome à la mise sous tension du contrôleur, copiez le texte du programme dans un fichier vierge nouvellement créé. Enregistrez ce fichier sous main.py dans l'espace de travail et téléchargez-le sur la puce ESP. La prochaine fois que vous réinitialiserez ou allumerez, le programme démarrera automatiquement.

 

Programmes de tests

Les programmes sont démarrés manuellement à partir de la fenêtre actuelle de l'éditeur dans l'IDE Thonny à l'aide de la touche F5. C'est plus rapide que de cliquer sur le bouton Démarrer ou d'utiliser le menu courir. Seuls les modules utilisés dans le programme doivent être dans le flash de l'ESP32.

Arduino IDE encore entre les deux ?

Si vous souhaitez ultérieurement utiliser à nouveau le contrôleur avec l'IDE Arduino, flashez simplement le programme de la manière habituelle. Cependant, l'ESP32/ESP8266 a alors oublié qu'il parlait MicroPython. A l'inverse, toute puce Espressif qui contient un programme compilé depuis l'IDE Arduino ou le firmware AT ou LUA ou... peut facilement être fournie avec le firmware MicroPython. Le processus est toujours comme ça ici décrit.

 

 

Un premier essai

Il vaut mieux commencer par ça Téléchargez les fichiers suivants sur le flash ESP32 :

 

oled.py, ssd1306.py, ds3231.py et timeout.py

 

Quand tout est assemblé, nous commençons les premiers tests. Dans REPL entrons les lignes suivantes. La beauté de MicroPython est que vous pouvez tester l'effet des commandes depuis la ligne de commande avant de les incorporer dans un programme. C'est exactement ce que nous faisons maintenant. Nous mettons la bascule en position gauche. Les entrées sont formatées en gras, le système répond en italique.

 

>>> from machine import Pin

>>> reedR = Pin(16,Pin.IN)

>>> reedL = Pin(17,Pin.IN)

>>> reedR()

1

>>> reedL()

0

 

Nach dem Umklappen der Wippe:

 

>>> reedR()

0

>>> reedL()

1

 

Donc ça marche. Lors de l'interrogation des niveaux, j'utilise la propriété des objets pin appelable, c'est-à-dire être appelable. Cela se fait par la méthode Épingler.__appeler__() permet. Elle appartient à ce qu'on appelle Méthodes magiques et permet à l'objet d'être appelé comme une fonction. Les instructions suivantes doivent donc être utilisées de manière synonyme.

 

>>> roseauR(1)

>>> reedR.value(1)

>>> reedR.on()

 

Ou

 

>>> reedR()

0

>>> reedR.value()

0

>>> reedR.on()

0

 

Prochain essai : Bus I2C. Nous lions le module DouxI2C Premièrement, instanciez un objet, i2c et regardez qui est représenté sur le bus.

 

>>> from machine import Pin, SoftI2C

>>> i2c=SoftI2C(scl=Pin(22),sda=Pin(21),freq=100000)

>>> i2c.scan()

[60, 87, 104]

 

Vous êtes probablement surpris que trois adresses de périphériques soient trouvées, puisque nous n'avons que deux modules sur le bus. Oui, mais - en plus de la puce RTC, le module DS3231 dispose également d'une EEPROM de 32 Ko = 8 Ko avec l'adresse matérielle 87 = 0x57 sur la carte. Les modèles 60 = 0x3C (OLED) et 104 = 0x68 (DS3231) nous intéressent. L'EEPROM pourrait être utilisée, par exemple, pour stocker de manière permanente des données de configuration. Donc ça marche aussi.

 

Écran Oled: Lors de l'instanciation, nous passons l'objet I2C et indiquons à l'API que notre affichage fait 64 pixels de haut.

 

>>> d=OLED(i2c,heightw=64)

this is the constructor of OLED class

Size:128x64

>>> d.writeAt("Hallo Welt",3,0)

13

 

« Hello World » est imprimé au milieu de la ligne supérieure. La valeur renvoyée 13 est la prochaine position d'écriture libre dans la ligne.

 

Le RTC (Real Time Clock) est également sur le bus I2C. On passe donc également l'instance I2C au constructeur de l'objet RTC. Ensuite, nous définissons la date et l'heure et obtenons l'heure. Un tuple avec les sept valeurs suivantes est à transmettre (année, mois, jour, jour de la semaine, heure, minute, seconde). Cela vaut également le module très complet ds3231.py pour y regarder de plus près.

 

>>> rtc=DS3231(i2c)

DS3231 bereit @ 0x4C

>>> rtc.DateTime((2024,6,14,5,14,19,30))

>>> rtc.Time()

[14, 19, 32]

 

L'ESP32 dispose également d'un RTC, mais il n'a pas de minuterie d'alarme. Pour avoir une fonction réveil, il faut utiliser le DS3231 et – les interruptions de programme, en bref IRQs. Ils permettent de signaler un événement extérieur au programme en cours d'exécution et de demander son fonctionnement en interrompant immédiatement le programme (demande d'interruption).

 

Les contacts à bascule et le RTC peuvent déclencher de tels événements en modifiant le niveau sur une broche GPIO (pin changement IRQ). Nous devons définir une entrée GPIO pour chaque événement. L'IRQ peut être armée après qu'une routine de service d'interruption (ISR) ait été définie. Dans le paramètre épingle L'objet broche de déclenchement est transmis par le système. Les entrées sont connectées à des pull-ups externes de 10 kOhm car les internes ont une impédance trop élevée. Cela améliore la pente – c’est ce que m’a dit le DSO (Digital Storage Oscilloscope).

 

>>> reedR = Pin(16,Pin.IN)

>>> reedL = Pin(17,Pin.IN)

led=Pin(2,Pin.OUT,value=0)

 

>>> def pinIRQ(pin):

    global source

    if pin==reedL:

        source="L"

        led(0)

    elif pin==reedR:

        source="R"

        led(1)

 

>>> reedR.irq(handler=pinIRQ, trigger=Pin.IRQ_FALLING)

<IRQ>

>>> reedL.irq(handler=pinIRQ, trigger=Pin.IRQ_FALLING)

<IRQ>


 

Lors de l'armement, la référence à l'ISR est transférée et le front descendant est défini comme déclencheur.

 

Si la bascule est maintenant inclinée à la main, la LED s'allume lorsqu'elle est inclinée vers la droite et s'éteint lorsqu'elle est inclinée vers la gauche. – Effrayant, non ? – Aucun programme n'est en cours d'exécution et les contacts ne sont pas directement connectés au circuit LED. Les IRQ sont donc actives même si aucun programme principal n'est en cours d'exécution. Ce qui est maintenant interrompu est REPL, le R.ead EVal P.imprimer Loups. Et donc nous désactivons à nouveau la magie.

 

>>> reedL.irq(handler=None)

<IRQ>

>>> reedR.irq(handler=None)

<IRQ>


 

Nous l'utiliserons pour nettoyer lorsque nous quitterons le programme et quitterons une salle blanche. Nous pouvons déclencher ce processus en appuyant sur le bouton du GPIO4 - plus tard, pas maintenant.

 

Pour le Battement de coeur (signe de vie) pendant le fonctionnement de la boucle principale nous utilisons la LED et un timer logiciel non bloquant. Cela s'exécute en arrière-plan sans bloquer l'exécution de la boucle. La magie est tout en un ici Fermeture. Il s'agit d'une fonction encapsulée dans une définition de fonction environnante. Étant donné que la fonction interne utilise des variables de la fonction environnante, la fonction interne et les variables restent actives après avoir quitté la fonction environnante. Normalement, tous les entrailles d’une fonction sont écrasés lorsqu’ils la quittent. Oh MicroPython mystique – Ommm !

 

La fonction environnante est appelée ici TimeOutMs(). Elle habite dans le module timeout.py, d'où nous les importons. Dans TimeOutMs() vit la fonction comparer(), qui récupère l'argument passé 5000 ainsi que l'état actuel du tick du minuteur. Tant que la différence entre les autres horodatages et le tick de minuterie enregistré au début ne dépasse pas 5 000, la fonction fournit comparer() renvoie la valeur False, sinon True. TimeOutMs() renvoie une référence à la sortie comparer() en arrière et rend ainsi la fermeture immortelle. On attribue cette référence à l'identifiant clignote maintenant et peut utiliser la fonction comparer() sous le pseudonyme clignote maintenant appeler à tout moment.

 

>>> from timeout import TimeOutMs

>>> jetztBlinken=TimeOutMs(5000)

>>> jetztBlinken()

False

>>> jetztBlinken()

False

>>> jetztBlinken()

True

 

Au bout de cinq secondes, on obtient le résultat Vrai. La définition de la fonction est assez chétive, mais mérite d'être étudiée. Pour ce faire, ouvrez simplement le fichier timeout.py dans une fenêtre d'éditeur.

 

 

Le programme

Avec ces tests manuels, nous avons déjà discuté de l'ensemble du programme. Tous les éléments réapparaissent dans un ordre peut-être légèrement différent, avec quelques petits ajouts qui sont commentés.

 

# regenmesser.py

 

from oled import OLED

from machine import Pin, SoftI2C

from time import sleep_us, sleep, sleep_ms

from ds3231 import DS3231

import sys

from timeout import TimeOutUs, TimeOutMs

 

# externe 10k-Pullups bringen steilere Flanken!

reedR = Pin(16,Pin.IN) # rechts prellt 75us

reedL = Pin(17,Pin.IN) # links kein Prellen

key=Pin(4,Pin.IN,Pin.PULL_UP) # Tasteneingang an GPIO4

                              # mit internem Pullupwiderstand

led=Pin(2,Pin.OUT,value=0)

 

i2c=SoftI2C(scl=Pin(22),sda=Pin(21),freq=100000)

i2cDevices=i2c.scan()

i2cNamen={ # Das Dictionary erleichtert die Identifikation

    0x57"DS3231.EEPROM 32Kb",

    0x68"DS3231.RTC",

    0x3C"OLED",

    0x40"SHT21",

    }

print("I2C-Devices @ ")

for i in i2cDevices:  # Nummer in Hexcode und Klartext wandeln

    print(hex(i),i2cNamen[i])

print()

 

d=OLED(i2c,heightw=64)

rtc=DS3231(i2c)

 

source="*"

 

# Inhalt der Kippschalen in ccm

cLinks = 2.4  # ccm

cRechts = 2.5

 

# Trichter Durchmesser d=10,9cm

area=(10.9/2)**2 * 3.1415  # Trichterfläche

bucketHour=0 # Der Sammeleimer

     

# IRQ-Service-Routine

def pinIRQ(pin):

    global source # Damit der neue Wert die ISR verlassen kann

    if pin==reedL:

        source="L"

    elif pin==reedR:

        source="R"

 

def shutdown(): # Funktion zum Aufraeumen beim Beenden

    reedL.irq(handler=None)

    reedR.irq(handler=None)

    print("von User abgebrochen")

   

# Pin Change IRQ scharfschalten

reedR.irq(handler=pinIRQ, trigger=Pin.IRQ_FALLING)

reedL.irq(handler=pinIRQ, trigger=Pin.IRQ_FALLING)

 

jetztBlinken=TimeOutMs(2000# Das erste Blinken initiieren

 

while 1:  # Hauptschleife

    Y,M,D,_,h,m,s=rtc.DateTime() # Datum und Zeit holen

    if source=="L":

        source="#"  # Trigger zuruecksetzen

        bucketHour += cLinks  # aufsummieren

        print("Links", bucketHour,"+",h,":",m,":",s)

 

    elif source=="R":

        source="-"  # Trigger zuruecksetzen

        bucketHour += cRechts # aufsummieren

        print("rechts",bucketHour,"-",h,":",m,":",s)

 

    datum=f"{D:02}.{M:02}.{Y}" # Datums- und Zeit-String bauen

    zeit=f"{h:02}:{m:02}:{s:02}"

    niederschlag="\'\'\'\' {:.2f} mm".  /

    format(bucketHour/area*10# dto. Niederschlag in mm

 

    d.clearAll(False)          # Display loeschen

    d.writeAt(datum,3,0,False)

    d.writeAt(zeit,4,1,False)

    d.writeAt(niederschlag,3,3)

   

    if jetztBlinken(): # Wenn Timer abgelaufen, kurz blitzen

        jetztBlinken=TimeOutMs(2000# Ablauf neu setzen

        led(1# LED an

        sleep_ms(5)

        led(0# und wieder aus

       

    if key()==0# Falls Taste key gedrueckt,

        sys.exit(shutdown()) # shutdown() aufrufen und Ende

Pour sortir du texte mélangé à des nombres, vous pouvez avantageusement utiliser des chaînes de format. Il existe deux variantes, chaîne f et la fonction format(). Les citations sont similaires.

 

>>> D,M,Y = 14,6,2024

>>> f"{D:02}.{M:02}.{Y}"

'14.06.2024'

 

Cela met le jour et le mois sur deux chiffres et l'année dans une chaîne, séparés par des points.

 

>>> "{:02}.{:02}.{}".format(D,M,Y)

'14.06.2024'

 

Ce formulaire produit le même résultat. La première variante est idéale pour la structure des textes HTML. La deuxième variante permet d'interrompre la ligne par "\" si elle devient trop longue, comme dans le listing ci-dessus. Les instructions de format sont très diverses. Les énumérer tous remplirait plusieurs épisodes de blog.

 

Un mot sur les sorties d'affichage. Les modifications apportées à l'écran sont d'abord écrites dans une mémoire tampon de la RAM, qui est également immédiatement envoyée à l'écran lorsque vous êtes dans l'écran. écrireAT()- ou effacerTout() énonce l'argument FAUX omet ou via un Vrai remplacé. Mais l'écran scintille alors, et c'est ennuyeux. C'est pourquoi j'ai d'abord laissé le nouveau contenu du tampon être entièrement construit dans la RAM et je n'ai transféré l'intégralité du contenu qu'avec la dernière commande d'écriture. Cela enlève le stress de tout cela.

 

Démarrez maintenant le programme et déplacez la bascule. La sortie gauche ou droite peut apparaître plusieurs fois de suite, même si un seul mouvement d'inclinaison a été effectué. J'ai également eu ce phénomène avec mon contact Reed droit - contact qui rebondit à la fermeture. Comment cela peut être éliminé par programme et d'autres ajouts au projet seront fournis dans le prochain épisode.

 

En attendant, restez à l’écoute !


Esp-32Esp32Esp32-dev-kitGrundlagen softwareProjekte für fortgeschritteneSensoren

1 commentaire

Francesco Cerquone

Francesco Cerquone

Salve. Mi chiedevo se per misurare in modo semplice la quantità di acqua caduta dal cielo non è meglio misurare il suo peso, anzichè il suo volume?
Per esempio un estensimetro o cella di carico come sensore del peso dell’acqua….

Laisser un commentaire

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

Articles de blog recommandés

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery