Page 1 sur 4

Pin 13 (GPIO27) et Mise a jour  [RESOLU]

Posté : mer. 30 sept. 2020 10:45
par Laurent53
Bonjour et merci de m’accepter sur ce forum.

Sur mon Raspberry Pi Type B j’ai une sonde DT22 en Pin 13 (GPIO27) et je récupère tous les 5 minutes la température et l’hygrométrie extérieure. Ça fonctionne sans problème depuis 2014.

j'ai effectué une mise a jour de ma carte SD .Et depuis sa ne fonctionne plus ! Est ce du a cela ?

root@PiHome:/home/www/Graph# python3 readDHT22T.py
Traceback (most recent call last):
File "readDHT22T.py", line 50, in <module>
humidity,temperature = get_outputs("22",pin)
File "readDHT22T.py", line 38, in get_outputs
OK = search("Temp", outputs_raw) and search("Hum", outputs_raw)
File "/usr/lib/python3.2/re.py", line 161, in search
return _compile(pattern, flags).search(string)
TypeError: can't use a string pattern on a bytes-like object

Avez vous une idée Merci .

Re: Pin 13 (GPIO27) et Mise a jour

Posté : mer. 30 sept. 2020 13:45
par Gyom_86
Bonjour,

qu'entends-tu par mise à jour de la carte SD?

As-tu changé de version de Rapsbian ou Python?


Guillaume.

Re: Pin 13 (GPIO27) et Mise a jour

Posté : mer. 30 sept. 2020 13:57
par Laurent53
Mise a jour en faisant
sudo apt-get update
sudo apt-get dist-upgrade

Re: Pin 13 (GPIO27) et Mise a jour

Posté : mer. 30 sept. 2020 15:23
par Bud Spencer
problème de type

OK = search("Temp", outputs_raw) and search("Hum", outputs_raw)

un truc du genre est plus coherant :

OK = search("Temp", outputs_raw.decode('utf-8')) and search("Hum", outputs_raw.decode('utf-8'))

Re: Pin 13 (GPIO27) et Mise a jour

Posté : mer. 30 sept. 2020 16:09
par Laurent53
Merci Bud Spencer , je ne comprend pas pourquoi il faut retoucher le code car sa fonctionnais bien avant la mise a jour ,mais j'ai essayé et il y a du mieux

Sa fonctionne 1 fois sur 2 !!

root@PiHome:/home/www/Graph# python readDHT22T.py
DHT22:19.3Celsius, 70.0%
root@PiHome:/home/www/Graph# python readDHT22T.py
DHT22:---Celsius, ---%
root@PiHome:/home/www/Graph#


#Fonction pour lecture DHT22
def get_outputs(typ,pin):
i=0
Hmax=100
for test_output in range(5):
i=i+1
outputs_raw = subprocess.check_output(["/root/Adafruit_DHT", typ, pin])
if len(outputs_raw)==44:
return None,None
OK = search("Temp", outputs_raw.decode('utf-8')) and search("Hum", outputs_raw.decode('utf-8'))
if (OK):
result_humid = search("Hum =\s+([0-9.]+)", outputs_raw)
humidity = result_humid.group(1)
if float(humidity)<=Hmax:
result_temp = search("Temp =\s+([0-9.]+|-[0-9]+)", outputs_raw)
temperature = result_temp.group(1)
if float(temperature)!=-3276:
return humidity,temperature
return None,None

Re: Pin 13 (GPIO27) et Mise a jour

Posté : mer. 30 sept. 2020 19:39
par Bud Spencer
Laurent53 a écrit :
mer. 30 sept. 2020 16:09
Merci Bud Spencer , je ne comprend pas pourquoi il faut retoucher le code car sa fonctionnais bien avant la mise a jour
Ça c’est un problème récurrent avec les mise à jours et python. Généralement ça se corrige bien (encore que, avec la fin du support python2 et les milliers de références plus maintenues, ca pleure dans pas mal d'entreprises ...), mais pour ça il faut lire et les docs pour scruter les points de ruptures. Pour les sonde DHTx, c’est pareil. Le protocole utilisé par la plupart des lib est un ‘pseudo’ one wire soft et les erreurs sont plus fréquentes que les bonnes lectures. Perso, je m’étais amusé un peu avec ce type de sonde pour faire quelques tutos ici (et ailleurs), mais elles ont vite rejoint les fonds de tiroir (et en plus elles sont d’une imprécision remarquable …)

Re: Pin 13 (GPIO27) et Mise a jour

Posté : mer. 30 sept. 2020 20:54
par Gyom_86
salut,

Tu devrais peut-être aussi appliquer la modif suggérée par Bud sur les deux lignes avec tes expressions régulières qui récupèrent tes valeurs:

result_humid = search("Hum =\s+([0-9.]+)", outputs_raw.decode('utf-8'))

Re: Pin 13 (GPIO27) et Mise a jour

Posté : mer. 30 sept. 2020 21:38
par Laurent53
Merci pour votre aide je viens de découvrir que mon probleme viens de la librairie adafruit ! Je me suis un peu mélanger les pinceaux avec mes Raspberry !
J'ai bien fait une mise a jour sur mon Raspberry B , ensuite j'ai sauvegardé la carte SD et je l'ai recopié sur une micro SD que j'ai mise dans un Raspberry 2 , Après versification sa fonctionne toujours sur mon Raspberry B, mais pas sur mon Raspberry 2 .CA ne viens pas du tout de la mise a jour, mais de la librairie adafruit qui est différente pour les Raspberry 2 et 3 !

Re: Pin 13 (GPIO27) et Mise a jour

Posté : jeu. 1 oct. 2020 15:33
par Bud Spencer
C’est bien du fait d'une mise à jour python (et forcement des libs qui ont évolué avec). Depuis je ne sais plus quel version (2.x...) , les stream de bytes doivent être converti explicitement en précisant l’encodage pour de très nombreuse fonctions et c’est valable aussi dans le sens inverse (exemple)

Re: Pin 13 (GPIO27) et Mise a jour

Posté : jeu. 1 oct. 2020 15:36
par Bud Spencer
Gyom_86 a écrit :
mer. 30 sept. 2020 20:54
salut,

Tu devrais peut-être aussi appliquer la modif suggérée par Bud sur les deux lignes avec tes expressions régulières qui récupèrent tes valeurs:

result_humid = search("Hum =\s+([0-9.]+)", outputs_raw.decode('utf-8'))
ou plus simplement en une seule fois en le faisant dès réception des données la ligne

outputs_raw = subprocess.check_output(["/root/Adafruit_DHT", typ, pin])
outputs_raw = subprocess.check_output(["/root/Adafruit_DHT", typ, pin]).decode('utf-8')
ou un truc dans l'genre