IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Inclure des fichiers dans mon principal


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Makeur
    Inscrit en
    Avril 2022
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Makeur

    Informations forums :
    Inscription : Avril 2022
    Messages : 1
    Par défaut Inclure des fichiers dans mon principal
    Bonjour à tous !

    Je suis novice en python et je me fais un petit projet perso, sur un Rpi avec un module KY-038 qui permet de detecter un bruit, j'aimerai que à un certain seuil de son, cela me déclanche deux actions, une prise de photo et une capteur audio.
    Pour cela, j'ai fais 4 programmes en python, l'un pour detecter le son "sound-detect.py" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import RPi.GPIO as GPIO
    import time
     
    sound = 4
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(sound, GPIO.IN)
    def callback(sound):
            if GPIO.input(sound):
                    print "Sound Detected!"
     
    GPIO.add_event_detect(sound, GPIO.BOTH, bouncetime=300)  # let us know when the pin goes HIGH or LOW
    GPIO.add_event_callback(sound, callback)  # assign function to GPIO PIN, Run function on change
     
    while True:
            time.sleep(1)
    Ensuite un fichier "photo.py" qui permet de prendre une photo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from datetime import datetime
    from picamera import PiCamera
     
    camera = PiCamera()
    camera.rotation = 180
     
    camera.capture("/home/pi/Test/Dim-"+str(datetime.now().strftime('%Y-%m-%d-%H_%M_%S'))+".jpg")
    et un fichier "micro.py" qui permet d'enregistrer un son :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    from datetime import datetime
    import pyaudio
    import wave
     
    form_1 = pyaudio.paInt16 # 16-bit resolution
    chans = 1 # 1 channel
    samp_rate = 44100 # 44.1kHz sampling rate
    chunk = 4096 # 2^12 samples for buffer
    record_secs = 4 # seconds to record
    dev_index = 2 # device index found by p.get_device_info_by_index(ii)
    wav_output_filename = "/home/pi/Test/Dim-"+str(datetime.now().strftime('%Y-%m-%d-%H_%M_%S'))+".wav" # name of .wav file
     
    audio = pyaudio.PyAudio() # create pyaudio instantiation
     
    # create pyaudio stream
    stream = audio.open(format = form_1,rate = samp_rate,channels = chans, \
                        input_device_index = dev_index,input = True, \
                        frames_per_buffer=chunk)
    print("recording")
    frames = []
     
    # loop through stream and append audio chunks to frame array
    for ii in range(0,int((samp_rate/chunk)*record_secs)):
        data = stream.read(chunk)
        frames.append(data)
     
    print("finished recording")
     
    # stop the stream, close it, and terminate the pyaudio instantiation
    stream.stop_stream()
    stream.close()
    audio.terminate()
     
    # save the audio frames as .wav file
    wavefile = wave.open(wav_output_filename,'wb')
    wavefile.setnchannels(chans)
    wavefile.setsampwidth(audio.get_sample_size(form_1))
    wavefile.setframerate(samp_rate)
    wavefile.writeframes(b''.join(frames))
    wavefile.close()
    Individuellement, ces 3 fichiers fonctionnent bien

    Le soucis est que lorsque je crée un fichier principal "main.py" qui permet de lier ces trois programmes, j'ai "import" mes deux fichiers "micro" et "photo" mais apès je ne sais pas comment faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import RPi.GPIO as GPIO
    import time
    import micro
    import photo
     
    sound = 4
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(sound, GPIO.IN)
    def callback(sound):
            if GPIO.input(sound):
                    print "Sound Detected!"
     
    GPIO.add_event_detect(sound, GPIO.BOTH, bouncetime=300)  # let us know when the pin goes HIGH or LOW
    GPIO.add_event_callback(sound, callback)  # assign function to GPIO PIN, Run function on change
     
    while True:
            time.sleep(1)
    Comment puis je faire ?
    Cordialement

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par Loovis Voir le message
    Comment puis je faire ?
    Découper son code en modules/scripts est quelque chose qui se pense "avant" de coder car pour les "composer", il va falloir avoir défini une "interface" cohérente avec ce qu'on veut faire.
    Comme vous débutez, je suis quasiment sur que vous ne comprenez rien à ce que je raconte...

    Pour faire simple, la première notion d'interface que l'on rencontre est la fonction.
    Regroupez tous vos bouts de code dans un seul script et essayez de l'organiser en fonctions/variables pour que ça puisse fonctionner.

    note: là si vous ne savez pas par où commencer, ouvrez un tuto. car vous n'avez pas encore les bases pour vous lancer dans un truc encore trop compliqué pour vous.

    Pour ce qui est des modules, il faut aussi apprendre comment çà marche.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Loovis Voir le message
    Comment puis je faire ?
    Le souci, c'est que tu n'as pas pensé tes programmes sous forme de fonction mais sous forme de programme. Et en tant que tels, ils ne sont pas importables.

    Prenons un exemple simple: je veux calculer la surface d'un cercle. Je peux très bien écrire un programme simpliste de ce style
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    r=int(input("Entrez le rayon :"))
    print("Surface=%f" % 3.14*r**2)
    Ca marche, mais ce programme n'est pas importable.

    Pour qu'il soit importable, il faut que je le pense déjà au départ comme articulation de fonctions. Exemple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def saisie(prompt): return int(input("%s :" % prompt))
    def surface(r): return 3.14 * r**2
    Je peux maintenant utiliser ces fonctions. Suffit de rajouter
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    r=saisie("Entrez le rayon")
    print("Surface=%f" % surface(r))

    Je peux même détecter si le programme est appelé ou importé et agir en conséquence
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # Si son nom c'est "__main__" c'est qu'il est appelé, sinon il est importé
    if __name__ == "__main__":
    	# Si on entre ici c'est qu'il est appelé donc pour qu'il me sorte un truc je dois utiliser les fonctions
    	r=saisie("Entrez le rayon")
    	print("Surface=%f" % surface(r))
    else:
    	# Ici il a été importé, donc c'est l'appelant qui aura charge d'appeler les fonctions qui l'intéressent, moi je n'ai rien à faire
    	pass
    # if

    Et donc maintenant je peux l'importer et de ce fait utiliser ses fonctions. Mettons qu'il s'appelle "toto.py", je peux alors dans un autre script, écrire
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import toto
    r=toto.saisie("Entrez le rayon")
    print("Surface = %f" % toto.surface(r))

    Donc voilà. Te faut tout repenser tes codes de cette façon pour pouvoir ensuite les importer et surtout utiliser leurs fonctions là où tu les importes.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Inclure des fichiers dans un war.
    Par RémyYves dans le forum Maven
    Réponses: 5
    Dernier message: 22/01/2008, 10h16
  2. Réponses: 1
    Dernier message: 26/12/2007, 12h28
  3. inclure des fichiers dans un .jar
    Par cysboy dans le forum Multimédia
    Réponses: 3
    Dernier message: 11/09/2006, 13h56
  4. upload des fichiers dans mon serveur
    Par abdou.sahraoui dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 29/05/2006, 09h32
  5. Réponses: 3
    Dernier message: 16/02/2006, 14h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo