driver_rg11.py 2.3 KB
# -*- coding: utf-8 -*-
import RPi.GPIO as io
    
def get_data(pin_rain_bcm=19, pin_dry_bcm=20, pin_vin_bcm=25, debug_level=0):
   """Lecture d'une trame du capteur meteo RG11. 
Retourne un tuple, dans l'ordre: Un code de validité, etat (-1=unknown, 0=dry 1=rain), bit rain, bit dry. Le code de validité =0 si la trame est valide, =1 si Vin n'est pas detecte, =2 si les bits sont tous deux egaux a 0, =2 si les bits sont tous deux egaux à 1.

Exemple:

import driver_rg11 ; driver_rg11.get_data(19,20,25,2)
"""

   # === verify 12V power supply if it is possible
   power_mife = 1
   if (pin_vin_bcm>0):
      io.setmode(io.BCM) #set up GPIO using BCM numbering
      io.setup(pin_vin_bcm,io.IN, pull_up_down=io.PUD_DOWN) # make pin an input (=arduino 35->34 SWO_T60 = Vin)
      pin34  = io.input(pin_vin_bcm)
      power_mife = 1-pin34
      if (debug_level==2):
         print("=== Voltage intput ===")
         disp ="pin34,35,gpio25,Vin="+str(pin34)+ " (0=12V 1=0V)"
         print(disp)
   err = 0
   if ( power_mife==1 ):
      power_mife_msg = "12Volts"
      power_mife = 1
   else:
      power_mife_msg = "0Volt"
      power_mife = 0
      err = err +1

   io.setwarnings(False)
   io.setmode(io.BCM) #set up GPIO using BCM numbering
   io.setup(pin_rain_bcm,io.IN, pull_up_down=io.PUD_DOWN) # make pin an input (=arduino 46->36 rain)
   io.setup(pin_dry_bcm,io.IN, pull_up_down=io.PUD_DOWN) # make pin an input (=arduino 47->38 dry)

   pin36  = io.input(pin_rain_bcm)
   pin38 = io.input(pin_dry_bcm)
   if (debug_level==2):
      print("=== Bit states ===")
      disp ="pin36,46,gpio19,rain ="+str(pin36)+" pin38,47,gpio20,dry ="+str(pin38)
      print(disp)
    
   # === return
   err = 0
   rain_state_msg = "Unknown"
   rain_state = 2
   if (power_mife==1):
      if ( (pin36==0) and (pin38==0) ):
         err = err + 2
      elif ( (pin36==1) and (pin38==1) ):
         err = err + 4
      elif ( (pin36==0) and (pin38==1) ):
         rain_state_msg = "Rain"
         rain_state = 1
      elif ( (pin36==1) and (pin38==0) ):
         rain_state_msg = "Dry"
         rain_state = 0

   if (debug_level>=1):
      print("=== RG11 states ===")
      disp = " Vin ="+power_mife_msg + " RG11 ="+rain_state_msg
      print(disp)

   return err, power_mife, rain_state, rain_state, power_mife_msg, rain_state_msg, pin34, pin36, pin38