Automatiser la lecture d'une musique par input digital

Bonjour à tous! =D

Je suis tout nouveau sur le forum, mais aussi tout nouveau en programmation.
Je suis également maître du jeu dans un escape game, et je réalise parfois mes propres énigmes.
Je tiens à dire que je suis également un ultra-débutant en code, même si je sais déjà faire quelques petites choses en Arduino. Et c’est justement dû aux limitations hardware de l’Arduino, notamment du multimédia, que je me tourne vers vous! :slight_smile:

Pour réaliser ma prochaine énigme, j’aurais besoin de conseils sur sa faisabilité.
J’aimerais qu’un input envoyé depuis une carte Arduino soit reçu par une carte Raspberry. Idéalement sur un pin.
J’aimerais que cet input déclenche alors automatiquement la lecture d’un unique fichier audio.
J’aimerais que la lecture de ce fichier audio soit unique, & ne se relance que si un nouvel input de la carte Arduino est envoyé.

L’idée est-elle aisément réalisable? Comme je l’ai dit, je suis un ultra-débutant qui grille bien trop souvent les étapes.
Avez-vous sous la main des tutos, des idées, pour programmer tout ça? Je n’ai pas trouvé grand chose sur YouTube, la plupart des tutos expliquent comment installer des lecteurs multimédias, mais pas nécessairement comment automatiser la lecture de leur contenu par un simple input sur un pin digital de la carte Raspberry envoyé depuis une Arduino.
Un OS Raspberry en particulier à me conseiller pour ce genre d’application très limité de Raspberry? :slight_smile:
Merci beaucoup pour votre aide, et encore plus pour votre indulgence :smiley:

Salut @NubiaNeko

Je passe l’étape du Arduino.

Si on considère un Rpi et un bouton sur GPIO, la pression sur le bouton générant un input (une entrée), alors, c’est simple.
Un petit script python et pouf, lecture du son à la pression dudit bouton.

Maintenant, toi, tu veux que la carte arduino fasse quoi ?
Ils communiquent comment ?

++

Salut @Nabla ! Merci beaucoup pour ta réponse! Je crois que mon post n’était pas très clair, je l’ai sans doute écrit un peu trop tard! :slight_smile:

L’idée est qu’une fois une énigme réussie, la carte arduino envoie vers raspberry un input, idéalement d’un port analogique à un autre. Bref, plus simple qu’un bouton encore.
Je voudrais que Raspberry, à la réception de cet input, joue une musique sortant du 3.5mm jack.
Une fois la musique lue, je voudrais celle-ci s’arrête et ne se relance qu’au prochain input.

Est-ce que cela te paraît aisément réalisable? As-tu des pistes? Je rappelle que je suis un ultra-débutant pris de crise soudaine de projet à 4h du mat’! :stuck_out_tongue:

Re,

Oui, si tu sais gérer le côté input
Si on le fait avec un bouton, je le fais en 5 minutes

Pour moi, c’est python ton ami !

++

@Nabla Aucun problème pour le côté input, Arduino c’est mon p’tit dada. L’idée de de déclencher un input à la lecture d’une carte RFID via un lecteur RFID (je sais que c’est aussi tout à fait faisable sur Raspberry, mais je suis dans ma p’tite zone de confort avec Arduino :wink: ). L’idée de mon script (que j’ai déjà), c’est de dire "si le lecteur lit X, alors passe HIGH sur telle broche pour envoyer un p’tit input. Ce qui est finalement également la même chose qu’avec un bouton, finalement. Tant qu’il y a signal bas sur telle GPIO du Raspberry, on ne fait rien. Si signal HIGH sur telle GPIO du Raspberry, alors lecture du fichier audio. Je crois que plus je t’en parle plus c’est clair dans mon esprit ahah.

Je vais m’intéresser de plus prêt à Python, ça m’a vraiment pas l’air infaisable avec tes conseils :smiley:

Et oui, c’'est à ça que sert la discussion, formuler, reformuler, contredire une interprétation, modifier son propos pour le rendre plus explicite … et … finalement, pratiquement trouver la solution tout seul ; grâce aux autres, mais presque s :ns les autres ; la magie de l’interaction humaine :slight_smile:

Pour le python, facile si tu sais ce que tu cherches :yum:

Attention : le son via le connecteur jack = que dans tes rêves ; il faut passer par un ampli :wink:

Merci Nabla, je vais me dégoter mon p’tit kit Raspberry & commencer à gratouiller sérieusement alors, si jamais j’ai besoin d’aide, je sais où demander!
Quant à la sortie 3.5, je sais bien que c’est le niveau de sortie est très faible, je pensais passer par une enceinte bluetooth branchée en 3.5mm, qui est donc amplifiée, plutôt que par un simple HP passif :slight_smile:

Vous galopezz vers des problèmes: normalement, le RPi ne tolere pas, sans precautions, du 5v (il grillera en moins de 5 minutes: c’est plus cher qu’un arduino, qui est plus robuste…)

De plus, vous avez une cascade d’équipements (donc de fils branlants)…

Evidemment, c’est amusant de se compliquer la vie (et d’écourter la vie d’un RPi) quand on peut faire simple.

Normalement, les vendeurs de materiel Arduino fournissent les logiciels -et les adaptateurs de niveaux- pour brancher sur le RPi… et il n’est pas si insurmontable que ça -si ce n’est déjà fait- de convertir du C++ ultrasimplifié (langage d’arduino) en Python…

hello,

si j’en crois cette vidéo (I2C with Arduino and Raspberry Pi - Two Methods - YouTube) il semblerait qu’en cas d’utilisation de I2C et si le raspberry est maître, la communication entre l’arduino et le raspberry se ferait en 3.3v …
et que ce n’est que si l’arduino est maître qu’il faudrait utiliser un « logic level converter » pour éviter de griller le Rpi .

en clair, en I2C se serait le maître qui imposerait la tension … tu confirmes ? perso ça me parait bizarre bien que en général les tutos de cette chaîne utube sont plutôt fiable … je vois pas comment l’arduino esclave passerait de 5v a 3.3v … mais clairement j’y connais rien en électronique :roll_eyes:

Tout d’abord, je tiens à vous remercier pour ce lien vers une video très claire.
Il confirme que c’est vraiment un tas de fils branlants… (surtout avec un adaptateur 3v 5v)
Quelques points de detail:
l’Arduino peut être mis en mode esclave, recevant une horloge (signal SCL) de son Maître.
Il est impossible de réduire en esclavage le RPI: il est toujours maître (et l’arduino est toujours esclave).

Les deux barnchements possibles sont:
a) liaison directe, exploite le fait que le port USB est en fait … des interrupteurs non reliés au 5v : pas de risque de griller et des resistances de tirage internes au maître : le RPi verra soit 0, soit 3v… (c’est le maître qui a des resistances de tirage … ou pas; le Rpi en a, et je confirme qu’il impose la tension … sur les « interrupteurs » en silicium -que l’esclave et le maître peuvent ouvrir ou fermer à ca 400 kHz).

Cela utilise 3 fils i masse commune, 1 horloge(du RPi vers l’arduino; le niveau du RPi étant suffisant pour l’arduino ; voit True entre 2.5 et 5v -même avec du 3v3 , ça laisse une marge de 0.8v sur l’horloge, 0 en dessous de 2.5v), 1 données (bidirectionnel)

b) un adaptateur qui mange …8 fils.

A noter que faire de l’arduino un esclave l’empêche de …maîtriser d’autres periferiques I2C, qui doivent donc être connectés directement au RPi -ce qui se fait très bien-

Utiliser un Arduino comme esclave I2C me semble un crime économique, parce que:

  • le seul interet de l’Arduino est son convertisseur analogique/numerique, qui n’existe pas sur RPi; il est lent (ca 20 ksamples/s IIRC), sur 10 bits, avec 6 voies sur les arduini classiques, dont … deux sont mangées par l’I2C; un converisseur type MCP 3008 est plus rapide (200 ks/s), a 8 voies, il est plus précis, moins cher et a tous les logiciels pour le RPi et l’arduino -demander à google « MCP3008 RPi adafruit » -pour l’arduino, il faut … adapter du python de RPi vers le C++)
  • comme il existe des arduini en 3v (le nano, les arduino basés sur ARM, ESP8266 ou ESP32) , beaucoup de circuits de Sparkfun, Ladyada ou chinois-seed studio- sont , au choix, en 3v ou 5v (et pas « seulement » l’I2C)

Par exemple, Lady Ada donne un tutoriel pour un circuit RFID en I2C -entre autres!- sur Arduino (mais là, l’arduino est le maître) et, via circuitpython, pour le même circuit en I2C sur RPi : Overview | Adafruit PN532 RFID/NFC Breakout and Shield | Adafruit Learning System : conseils de câblage, logiciel et logiciel de demo-

Donc, avec un tout petit effort de reprogrammation (le gros a déjà été fait par les vendeurs/fabricants/assembleurs) , on peut se passer de l’Arduino comme intermédiaire entre le materiel et le RPi et trouver moins cher, plus fiable (câblage simplifié, par élimination de l’intermédiaire ) et plus performant…

ok clair ! donc en fait si on résume pour le problème de NubiaNeko ; on oublie I2C et avec un câble USB-A /USB-B ( comme un câble d’imprimante USB ), les librairies série en C++ sur arduino et en python sur raspberry, les deux communiquent sans soucis et « en prime » le raspberry alimente l’arduino.

source et exemple de code : Communication série entre Raspberry Pi et Arduino • AranaCorp

On peut même oublier … l’arduino
En effet, les peripheriques modernes se branchent directement sur RPi ex:
boutons poussoirs
leds
puce RFID (ça a l’air d’être son sujet), qui se branche

  • en I2C
  • en mode UART (là, un adaptateur USB serial -ou un arduino uno sans son ATmeg328… serait utile)
  • en SPI (peut rentrer en concurrence avec un peripherique rapide)
    suivant l’état d’un jumper…

Edité:
je suis un peu mechant avec l’arduino; il ne faut surtout pas le jeter, ni l’oublier totalement, car, si on veut tester très vite une petite carte, sa robustesse (en tous cas, celle des AVR 8 bits) surpasse celle du RPi.
et, si on veut des temporisations ultra précises et simples, l’arduino est idéal (je doute que le RPi, une fois chargé, soit exempt de gigue (jitter))
Mais, pour la majorité des fonctionnalités, les assembleurs/vendeurs ont fait le nécessaire (tutos, bibliothèques) pour que le RPi et l’arduino soient interfacés simplement et directement avec leurs produits (la seule exception qui me vient à l’esprit étant la conversion Analogique digitale, que le RPi ne supporte pas directement)