MicroPython Pyboard au Pays du NCD - traversera t'il la rivière sans se mouiller :-)

Bonjour à tous,
MicroPython utilisant un capteur NCD pour détecter la présence d'eau

Je travaille beaucoup sur le développement de pilotes MicroPython et je ne cache pas mon intérêt pour le connecteur I2C de NCD (ncd.io) et adaptateur NCD pour Pyboard et Adaptateur NCD pour ESP qui permet des raccordement facile et rapide.

Cette fois, je me suis penché sur le détecteur d'eau + Buzzer permettant de détecter des fuites et éventuellement de lancer une alerte sonore (buzzer I2C).
Water Detect Sensor de National Control Device
Contrairement à ce que l'on pourrait penser au premier abord, ce capteur fonctionne vraiment bien... une grosse goutte de café (le breuvage du développeur) et le capteur s'active. Le buzzer (aussi commandé en I2C) est vraiment pénible, un véritable supplice pour les oreilles. Il fait donc son taf.

Après l'avoir raccordé sur le notre Pyboard... avec le câble ad-hoc... click-click.
Source: ncd-water-sensor sur le GitHub ESP8266-uPy
Et comme c'est du MicroPython, le code reste est limpide.

from machine import Pin, I2C
from time import sleep
from wdetect import WaterDetect

# Creer le bus I2C en fonction de votre plateforme.
# Pyboard: SDA sur Y9, SCL sur Y10. Voir le branchement NCD sur https://github.com/mchobby/pyboard-driver/tree/master/NCD
#          La vitesse du bus à été reduite à 100 Khz.
#          Ne pas hésité à descendre à 10 KHz (10000) durant les tests.
i2c = I2C( 2, freq=100000 )
# Feather ESP8266 & Wemos D1: sda=4, scl=5.
# i2c = I2C( sda=Pin(4), scl=Pin(5) )
# ESP8266-EVB
# i2c = I2C( sda=Pin(6), scl=Pin(5) )

wd = WaterDetect( i2c )
buz = False
try:
 while True:
  if wd.has_water:
   print( "EAU DETECTEE!" )
   # Change l'état du buzzer 1 SEULE FOIS pour éviter de charger le bus I2C
   if not buz:
    buz = True
    wd.buzzer( True )
  else:
   print( '...')
   # Change l'état du buzzer 1 SEULE FOIS
   if buz:
    buz = False
    wd.buzzer( False )
  sleep( 1 )
finally:
 # Etre certain que le buzzer est désactivé
 # ... avant que quelqu'un ne pète un câble :-)
 if buz:
  wd.buzzer( False )

Les plus attentifs remarquerons que le code inclus un bloc try - finally. C'est qu'il faut absolument couper le buzzer lorsque le script est interrompu (avec un Ctrl-C) parce qu'il est incroyablement bruyant!

Ressource

Aucun commentaire