Le principe : Les presses renvoie un top fin de cycle au raspberry, le raspberry enregistre dans un fichier par presse le top (un "1) et horodate ledit top. Le fichier les sauvegardé toutes les 5 minutes. A cause de la longueur d'installation, je n'envoie pas directement le 3v3 sur les presses mais du 12V et je recupere le top en 3v3 par un relais a proximité du raspberry. Le top du relais est exploité par l'intermédiaire d'interruption programme (déclenchement sur GPIO.RISING). 1 interuption par presse (16 presses). Proframmation en python.
Un top me declenche l'interruption et cette interruption horodate et ouvre/ferme le fichier correspondant a la presse si l'archivage n'est pas en cours.
Pour l'archivage toutes les 5 minutes, j'ai mis en place un thread dédié comme ca on s'en occupe plus. (ca marche impeccable)
Par contre j'ai des problèmes de rebonds récurrents mais intermitents, c'est à dire pas à chaque fn de cycle , sur la presse p12, j'enregistre le top et 6secondes apres j'ai un deuxieme top alors qu'un cycle moyen est d'environ 50secondes. J'ai vérifié en mettant d'autres relais plus gros et donc moins sensibles a des micro coupures, les relais restent collés, MAIS les rebonds apparaissent quand meme. J'ai mis dans les interruptions une mémoire qui interdit de refaire le travail tant que l'entree correspondantes n'est pas repassée a 0. Ce qui vérifie que l'entrée correspondante repasse bien par 0 vu que l'interruption est relancée en intégralitée : du coup j'ai 2 questions:
- Serait ce un faux contact intermittent sur l'entree du raspberry ? Que prendre pour connecter de maniere fiable le connecteur GPIO ? (cable en nappe + bornier ou Dupond ?) (j'ai virée une nappe pour du Dupond et ca à amélioré un peu)
- Y a t il un nombre d'interruption maxi en Python ? Je vous envoie le code par la meme occasion.
grosso modo j'obtiens ca sur le moniteur du Thonny IDE: (pas fait de capture d'ecran mais ca ressemble a ca)
p122018-05-25 11:05:30
p172018-05-25 11:05:34
p192018-05-25 11:06:08
p122018-05-25 11:06:55 <---- ok tps de cycle environ 25s
p122018-05-25 11:07:00 <---- rebond apres 5s
p192018-05-25 11:07:03
...etc...
Merci de m'avoir lu malgré la longueur.
Code : Tout sélectionner
#!/usr/bin/python
from tkinter import *
from threading import Thread
import RPi.GPIO as GPIO
import time
import datetime
import smtplib
import threading
import os
from time import strftime
Encours_Archivage=0
test12 = 0
test04 = 0
test17 = 0
test19 = 0
def Tempo_Archivage(count=1):
# for x in range(count):
while 1:
time.sleep(300)
Archivage()
def Archivage():
Encours_Archivage=1
print("Archivage")
date = strftime('%y%m%d%H%M')
os.rename('/home/pi/Partage/p02.txt','/home/pi/Partage/p02_' + date + '.txt')
os.rename('/home/pi/Partage/p04.txt','/home/pi/Partage/p04_' + date + '.txt')
os.rename('/home/pi/Partage/p08.txt','/home/pi/Partage/p08_' + date + '.txt')
os.rename('/home/pi/Partage/p09.txt','/home/pi/Partage/p09_' + date + '.txt')
os.rename('/home/pi/Partage/p10.txt','/home/pi/Partage/p10_' + date + '.txt')
os.rename('/home/pi/Partage/p12.txt','/home/pi/Partage/p12_' + date + '.txt')
os.rename('/home/pi/Partage/p14.txt','/home/pi/Partage/p14_' + date + '.txt')
os.rename('/home/pi/Partage/p15.txt','/home/pi/Partage/p15_' + date + '.txt')
os.rename('/home/pi/Partage/p17.txt','/home/pi/Partage/p17_' + date + '.txt')
os.rename('/home/pi/Partage/p18.txt','/home/pi/Partage/p18_' + date + '.txt')
os.rename('/home/pi/Partage/p19.txt','/home/pi/Partage/p19_' + date + '.txt')
os.rename('/home/pi/Partage/p20.txt','/home/pi/Partage/p20_' + date + '.txt')
fichier= open("/home/pi/Partage/p02.txt" , "a")
fichier.close()
fichier= open("/home/pi/Partage/p04.txt" , "a")
fichier.close()
fichier= open("/home/pi/Partage/p08.txt" , "a")
fichier.close()
fichier= open("/home/pi/Partage/p09.txt" , "a")
fichier.close()
fichier= open("/home/pi/Partage/p10.txt" , "a")
fichier.close()
fichier= open("/home/pi/Partage/p12.txt" , "a")
fichier.close()
fichier= open("/home/pi/Partage/p14.txt" , "a")
fichier.close()
fichier= open("/home/pi/Partage/p15.txt" , "a")
fichier.close()
fichier= open("/home/pi/Partage/p17.txt" , "a")
fichier.close()
fichier= open("/home/pi/Partage/p18.txt" , "a")
fichier.close()
fichier= open("/home/pi/Partage/p19.txt" , "a")
fichier.close()
fichier= open("/home/pi/Partage/p20.txt" , "a")
fichier.close()
print("Fin Archivage")
Encours_Archivage=0
def cb_p02(channel):
now = datetime.datetime.now()
heure = now.strftime('%Y-%m-%d %H:%M:%S')
s="p02" + heure
print(s)
fwrite= open('/home/pi/Partage/p02.txt','a')
fwrite.write(heure)
fwrite.write("\t1\n")
fwrite.close()
def cb_p04(channel):
global test04
global Encours_Archivage
if Encours_Archivage ==0:
if test04 ==0:
now = datetime.datetime.now()
heure = now.strftime('%Y-%m-%d %H:%M:%S')
s="p04" + heure
print(s)
fwrite= open('/home/pi/Partage/p04.txt','a')
fwrite.write(heure)
fwrite.write("\t1\n")
fwrite.close()
test04=1
def cb_p08(channel):
now = datetime.datetime.now()
heure = now.strftime('%Y-%m-%d %H:%M:%S')
s="p08" + heure
print(s)
fwrite= open('/home/pi/Partage/p08.txt','a')
fwrite.write(heure)
fwrite.write("\t1\n")
fwrite.close()
def cb_p09(channel):
now = datetime.datetime.now()
heure = now.strftime('%Y-%m-%d %H:%M:%S')
s="p09" + heure
print(s)
fwrite= open('/home/pi/Partage/p09.txt','a')
fwrite.write(heure)
fwrite.write("\t1\n")
fwrite.close()
def cb_p10(channel):
now = datetime.datetime.now()
heure = now.strftime('%Y-%m-%d %H:%M:%S')
s="p10" + heure
print(s)
fwrite= open('/home/pi/Partage/p10.txt','a')
fwrite.write(heure)
fwrite.write("\t1\n")
fwrite.close()
def cb_p12(channel):
global test12
global Encours_Archivage
if Encours_Archivage ==0:
if test12 == 0:
now = datetime.datetime.now()
heure = now.strftime('%Y-%m-%d %H:%M:%S')
s="p12" + heure
print(s)
fwrite= open('/home/pi/Partage/p12.txt','a')
fwrite.write(heure)
fwrite.write("\t1\n")
fwrite.close()
test12 = 1
def cb_p14(channel):
now = datetime.datetime.now()
heure = now.strftime('%Y-%m-%d %H:%M:%S')
s="p14" + heure
print(s)
fwrite= open('/home/pi/Partage/p14.txt','a')
fwrite.write(heure)
fwrite.write("\t1\n")
fwrite.close()
def cb_p15(channel):
now = datetime.datetime.now()
heure = now.strftime('%Y-%m-%d %H:%M:%S')
s="p15" + heure
print(s)
fwrite= open('/home/pi/Partage/p15.txt','a')
fwrite.write(heure)
fwrite.write("\t1\n")
fwrite.close()
def cb_p17(channel):
global test17
global Encours_Archivage
if Encours_Archivage ==0:
now = datetime.datetime.now()
heure = now.strftime('%Y-%m-%d %H:%M:%S')
s="p17" + heure
print(s)
fwrite= open('/home/pi/Partage/p17.txt','a')
fwrite.write(heure)
fwrite.write("\t1\n")
fwrite.close()
test17 = 1
def cb_p18(channel):
now = datetime.datetime.now()
heure = now.strftime('%Y-%m-%d %H:%M:%S')
s="p18" + heure
print(s)
fwrite= open('/home/pi/Partage/p18.txt','a')
fwrite.write(heure)
fwrite.write("\t1\n")
fwrite.close()
def cb_p19(channel):
global test19
global Encours_Archivage
if Encours_Archivage ==0:
now = datetime.datetime.now()
heure = now.strftime('%Y-%m-%d %H:%M:%S')
s="p19" + heure
print(s)
fwrite= open('/home/pi/Partage/p19.txt','a')
fwrite.write(heure)
fwrite.write("\t1\n")
fwrite.close()
test19 = 1
def cb_p20(channel):
now = datetime.datetime.now()
heure = now.strftime('%Y-%m-%d %H:%M:%S')
s="p20" + heure
print(s)
fwrite= open('/home/pi/Partage/p20.txt','a')
fwrite.write(heure)
fwrite.write("\t1\n")
fwrite.close()
#mode numerotation brochage : BCM = num electronique carte ou BOARD = num serigraphie connecteur
GPIO.setmode(GPIO.BOARD)
#initialiser broches
GPIO.setup(11, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(13, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(15, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(16, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(19, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(26, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
#lire etat entree
#callback selon n° presses
# presse remise dans le bon ordre le 21/05/2018
#GPIO.add_event_detect(11, GPIO.RISING, callback=cb_p02, bouncetime=200)
#time.sleep (0.1)
GPIO.add_event_detect(12, GPIO.RISING, callback=cb_p04, bouncetime=200)
time.sleep (0.1)
#GPIO.add_event_detect(13, GPIO.RISING, callback=cb_p08, bouncetime=200)
#time.sleep (0.1)
GPIO.add_event_detect(15, GPIO.RISING, callback=cb_p09, bouncetime=200)
time.sleep (0.1)
GPIO.add_event_detect(16, GPIO.RISING, callback=cb_p10, bouncetime=200)
time.sleep (0.1)
GPIO.add_event_detect(18, GPIO.RISING, callback=cb_p20, bouncetime=200)
time.sleep (0.1)
GPIO.add_event_detect(19, GPIO.RISING, callback=cb_p15, bouncetime=200)
time.sleep (0.1)
#GPIO.add_event_detect(21, GPIO.RISING, callback=cb_p14, bouncetime=200)
#time.sleep (0.1)
GPIO.add_event_detect(22, GPIO.RISING, callback=cb_p17, bouncetime=3000)
time.sleep (0.1)
GPIO.add_event_detect(23, GPIO.RISING, callback=cb_p18, bouncetime=200)
time.sleep (0.1)
GPIO.add_event_detect(24, GPIO.RISING, callback=cb_p19, bouncetime=3000)
time.sleep (0.1)
GPIO.add_event_detect(26, GPIO.RISING, callback=cb_p12, bouncetime=3000)
time.sleep (0.1)
thread =Thread(target=Tempo_Archivage)
thread.start()
while 1:
if GPIO.input(22) ==0:
test17 = 0
if GPIO.input(24) ==0:
test19 = 0
if GPIO.input(26) ==0:
test12 = 0
if GPIO.input(12) ==0:
test04 = 0