[RÉSOLU] Relier des pins Arduino sur des GPIO de RPi  [RESOLU]

Le connecteur GPIO du Raspberry Pi, comment l'utiliser sur les Mode A, B et B+

Modérateur : Francois

Pinhapple
Raspinaute
Messages : 125
Enregistré le : jeu. 23 févr. 2017 15:53
Localisation : Rouen

[RÉSOLU] Relier des pins Arduino sur des GPIO de RPi

Message par Pinhapple » mar. 28 févr. 2017 11:49

Bonjour,

J'ai programmé une Arduino Uno pour, théoriquement, générer en continu un signal carré de période 244 µs, et je souhaite lire ce signal avec les GPIO d'un RPi 3. Il n'y aurait pas de communication dans les deux sens, juste l'Arduino qui envoie continuellement son signal, et le RPi qui le récupère ; aucune donnée n'irait du RPi à l'Arduino.

Quelle serait la marche à suivre pour relier l'Arduino aux GPIO ? Quelles précautions dois-je prendre ? Sachant qu'idéalement, l'Arduino serait alimentée via USB par le RPi lui-même.

Là comme ça, je serais tenté de relier la pin d'émission à une broche GPIO, mais sans trop savoir laquelle serait la plus adaptée, et surtout je ne sais pas si je dois brancher un GND côté Arduino et/ou RPi...
Modifié en dernier par Pinhapple le ven. 10 mars 2017 12:54, modifié 1 fois.

etpi7out
Messages : 69
Enregistré le : mar. 12 juil. 2016 16:08

Re: Relier des pins Arduino sur des GPIO de RPi

Message par etpi7out » mar. 28 févr. 2017 17:08

Pinhapple a écrit : Là comme ça, je serais tenté de relier la pin d'émission à une broche GPIO, mais sans trop savoir laquelle serait la plus adaptée, et surtout je ne sais pas si je dois brancher un GND côté Arduino et/ou RPi...
Stop, n’envoie surtout pas un signal arduino(5V) comme ça sur le GPIO de ton raspberry(3.3V) tu vas le cramer!!! :shock:
Écoute, je suis moi même débutant et je ne voudrais pas te dire de bêtise, mais je mettrais au minimum :

- un pont de résistances entre l'arduino et le GND avec entre les 2 résistances la pin du raspberry afin de diminuer la tension.
- le GND en Commun de l'arduino et du pi (mais ça c'est peut être déjà fait si l'un alimente l'autre).

De plus, je mettrais la valeurs des résistances du pont assez grandes pour limiter l'intensité.

Quelqu'un de plus instruit que moi pourra, peut être te confirmer cela...

Ghislain
Raspinaute
Messages : 315
Enregistré le : jeu. 12 nov. 2015 17:39
Localisation : Bourges (18)

Re: Relier des pins Arduino sur des GPIO de RPi

Message par Ghislain » mar. 28 févr. 2017 18:02

Sinon y'a un truc avec 550 000 résultat et il s'appelle Google et avec "Raspberry GPIO Arduino" il en dit plein des choses !

Tu doit tout avoir ici ? 8-)

Pinhapple
Raspinaute
Messages : 125
Enregistré le : jeu. 23 févr. 2017 15:53
Localisation : Rouen

Re: Relier des pins Arduino sur des GPIO de RPi

Message par Pinhapple » mer. 1 mars 2017 08:59

etpi7out a écrit :Stop, n’envoie surtout pas un signal arduino(5V) comme ça sur le GPIO de ton raspberry(3.3V) tu vas le cramer!!! :shock:
Pas d'inquiétude, j'ai juste dit que c'est ce qui me venait à l'esprit, je ne fais pas de branchements sans savoir ! :lol:
Ghislain a écrit :Sinon y'a un truc avec 550 000 résultat et il s'appelle Google et avec "Raspberry GPIO Arduino" il en dit plein des choses !

Tu doit tout avoir ici ? 8-)
Merci, je ne connaissais pas Google ! :o
Non, plus sérieusement, merci pour le lien, mais je cherchais plus quelque chose concernant mon contexte (recevoir avec le RPi sans message retour) et non pas du bête envoi de string. :D
Je devrais toutefois pouvoir me débrouiller avec ça, donc merci à toi ! :)

Toutefois, étant donné que mon signal généré est assez serré (244 µs de période), est-ce que la communication de ces valeurs au RPi ne va-t-elle pas ralentir ce signal ? Je peux prendre comme analogie la fonction print de Python 3 qui ralentit le déroulement d'un programme lors de l'affichage.

De plus, est-ce qu'alimenter mon Arduino avec l'USB du RPi ne va pas poser un quelconque problème ?
  • RPi 3 + LibreELEC / RPi 3 + RetroPie / RPi B+ + Sense HAT ou Framboisedorf ou module caméra
  • Arduino Mega, Uno, Nano
  • Freescale FRDM KL25Z

Pinhapple
Raspinaute
Messages : 125
Enregistré le : jeu. 23 févr. 2017 15:53
Localisation : Rouen

Re: Relier des pins Arduino sur des GPIO de RPi

Message par Pinhapple » lun. 6 mars 2017 13:23

A la réflexion, ce lien ne m'aide pas beaucoup finalement. Il décrit comment faire communiquer un RPi et une Arduino en utilisant ses pins RX et TX.

Dans mon cas, j'ai une Arduino Uno qui envoie en continu un signal carré symétrique de période 244 µs sur une de ses pins non-RX/TX (cf. code plus loin), et je souhaite "lire" ce signal avec un RPi via ses GPIO, comme on mesurerait un signal avec un oscilloscope.

Du coup : dois-je absolument utiliser les pins RX/TX pour envoyer mon signal de l'Arduino vers le RPi ?

Pour info au cas où, le code Arduino :

Code : Tout sélectionner

void setup()
{
	pinMode(11, OUTPUT);
	digitalWrite(11, LOW);
}

void loop()
{
	digitalWrite(11, !digitalRead(11));
	delayMicroseconds(244 / 2);
}
  • RPi 3 + LibreELEC / RPi 3 + RetroPie / RPi B+ + Sense HAT ou Framboisedorf ou module caméra
  • Arduino Mega, Uno, Nano
  • Freescale FRDM KL25Z

spourre
Raspinaute
Messages : 735
Enregistré le : lun. 22 déc. 2014 16:50
Localisation : 67380 LINGOLSHEIM

Re: Relier des pins Arduino sur des GPIO de RPi

Message par spourre » lun. 6 mars 2017 16:46

Pinhapple a écrit :
Du coup : dois-je absolument utiliser les pins RX/TX pour envoyer mon signal de l'Arduino vers le RPi ?

Pour info au cas où, le code Arduino :

Code : Tout sélectionner

void setup()
{
	pinMode(11, OUTPUT);
	digitalWrite(11, LOW);
}

void loop()
{
	digitalWrite(11, !digitalRead(11));
	delayMicroseconds(244 / 2);
}
Bonjour,

Dans les fonctions de la libwiringPi que vous êtes en train d'apprivoiser (cf. autre fil), il y a la possibilité d'armer une interruption sur une pin GPIO (sur front montant, descendant ou les 2).
Comme l'a déjà souligné un contributeur, attention au niveau: le GPIO du Raspberry ne supporte pas 5V.

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: Relier des pins Arduino sur des GPIO de RPi

Message par Bud Spencer » lun. 6 mars 2017 21:02

spourre a écrit :Dans les fonctions de la libwiringPi que vous êtes en train d'apprivoiser (cf. autre fil), il y a la possibilité d'armer une interruption ...
Qui sans modif du kernel à une latence qui peut varier de 25 a 75 µS, ce qui fait beaucoup sur une base de 244µS ... :?

Je te vois bien venir PinHapple. Tes 244 µS (+ temps d'instruction) serait une aubaine pour commander les 4000 cycles d'acquisition par seconde que tu veux avoir. Domage ;)
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

spourre
Raspinaute
Messages : 735
Enregistré le : lun. 22 déc. 2014 16:50
Localisation : 67380 LINGOLSHEIM

Re: Relier des pins Arduino sur des GPIO de RPi

Message par spourre » lun. 6 mars 2017 23:45

Bud Spencer a écrit :
spourre a écrit :Dans les fonctions de la libwiringPi que vous êtes en train d'apprivoiser (cf. autre fil), il y a la possibilité d'armer une interruption ...
Qui sans modif du kernel à une latence qui peut varier de 25 a 75 µS, ce qui fait beaucoup sur une base de 244µS ... :?

Je te vois bien venir PinHapple. Tes 244 µS (+ temps d'instruction) serait une aubaine pour commander les 4000 cycles d'acquisition par seconde que tu veux avoir. Domage ;)
O en revient toujours à la même problématique et aux mêmes propositions. Quand on a des contraintes de délais de traitement de plus en plus serrées, il faut explorer:

1) le passage au compilé.
2) choisir des bibliothèques de + en + proches du hard (chaque couche d'abstraction apporte sa latence). Pour les GPIO, dans l'ordre :
- lwiringPi
- libcm
- attaquer les périphériques "à la main" (cf. mon lien dans l'autre fil).
3) être conscient que Linus n'est pas (et ne prétend pas être) un OS temps réeel (RTOS). Il y a des patch ou des solutions RTOS mais ce n'est pas trivial à mettre en oeuvre.

l reste toujours possible de grapiller des pouillièmes en faisant la chasse aux services inutiles mais tant que le programme tourne en "user land", il est soumis aux risques d'être swappé ou mis en attente par le scheduler .
Je ne développe pas la possibilité d'écrire un "driver" dans le noyau car je n'ai pas la moindre idée de comment faire. Je crois qu'il y a un bon bouquin de M. Ficheux qui en parle.

Pinhapple
Raspinaute
Messages : 125
Enregistré le : jeu. 23 févr. 2017 15:53
Localisation : Rouen

Re: Relier des pins Arduino sur des GPIO de RPi

Message par Pinhapple » mar. 7 mars 2017 08:31

Bud Spencer a écrit :Je te vois bien venir PinHapple. Tes 244 µS (+ temps d'instruction) serait une aubaine pour commander les 4000 cycles d'acquisition par seconde que tu veux avoir. Domage ;)
Ha ha, même pas ! :lol:
C'est lié au même projet, mais ce n'est pas pour lire mon gyro ! ;)
spourre a écrit :Dans les fonctions de la libwiringPi que vous êtes en train d'apprivoiser (cf. autre fil), il y a la possibilité d'armer une interruption sur une pin GPIO (sur front montant, descendant ou les 2).
wiringPiISR() j'imagine ? Je vais voir ce que ça donne, merci pour l'info ;)
spourre a écrit :Comme l'a déjà souligné un contributeur, attention au niveau: le GPIO du Raspberry ne supporte pas 5V.
J'ai monté un pont diviseur de tension avec des résistances, comme dans le lien montré plus haut ! Par contre, si je fais le calcul de la tension réduite, j'obtiens 3,37 V : est-ce grave de dépasser la tension d'entrée limite des GPIO de 0,07 V ?

J'ai suivi un rapide tuto hier pour faire clignoter une DEL avec RPi.GPIO puis WiringPi, avec succès (en même temps, pas trop compliqué !), et j'ai été agréablement surpris de voir que la syntaxe de WiringPi était assez proche du C Arduino, que je connais déjà un peu plus, donc ça m'a mis en confiance !

Du coup je me demandais : si je relie mon RPi et mon Arduino Uno avec le pont diviseur de tension, est-ce que je ne peux pas "tout simplement" garder mon code Arduino, et faire un digitalRead() avec WiringPi côté RPi ?

Il y a peut-être des choses qui m'échappent, mais j'imagine les choses comme ça :
  • L'Arduino émet en continu son signal de période d'environ 244 µs sur la pin 11, avec une tension de 5 V
  • Le pont diviseur réduit cette tension à 3,37 V
  • Une GPIO du RPi lit "le niveau logique sur la broche" (pour citer la doc de WiringPi) avec digitalRead(), donc 0/LOW si 0 V reçu, ou 1/HIGH si 3,37 V reçus
  • Traitement des états reçus (probablement affichage sur un graphique)
Ne m'en voulez pas si c'est une énormité ! :D
  • RPi 3 + LibreELEC / RPi 3 + RetroPie / RPi B+ + Sense HAT ou Framboisedorf ou module caméra
  • Arduino Mega, Uno, Nano
  • Freescale FRDM KL25Z

guillaume9344
Raspinaute
Messages : 629
Enregistré le : mar. 6 janv. 2015 19:44
Localisation : finistere

Re: Relier des pins Arduino sur des GPIO de RPi

Message par guillaume9344 » mar. 7 mars 2017 10:49

Bonjour, et une question toute bête, si vous alimentez l'arduino en 3.3v , ces sortie serrons en 3.3v. je sais que certaines cartes arduino permettent de choisir la tension d'alimentation du µp.
@+
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam

Répondre

Retourner vers « Le GPIO »