Raspberry Pi – Arduino – Reliez les deux via le bus I2C – Raspberry Pi Home Server – Bien choisir son serveur d impression
Achtung: Dieser Artikel wurde automatisch von Bing Traduire übersetzt
Advertencia: Este artículo ha sido traducido automáticamente por Bing Traduire
Certains disent que nous ne lions pas les chiens aux saucisses mais parfois pourquoi pas. Ainsi, le Raspberry Pi et l'Arduino ne sont pas nécessairement si opposés, avec même des points communs mais chacun a des avantages qui peuvent être bons à combiner.
Avec le Raspberry Pi, vous pouvez via les ports GPIO contrôler les composants externes et faire des pirates informatiques. Mais j'imagine que certaines personnes maîtrisent déjà bien leur Arduino, qu'elles ont l'équipement, etc. Et puis cela fait un tutoriel supplémentaire 😀
Pour lier les deux, nous allons passer par le protocole I2C. Plusieurs raisons à cela: n'utilisez pas le port USB, le Raspberry Pi étant limité (si vous voulez quand même le faire il y a un article dans MagPi # 15 et j'en ferai un moi plus tard). Et n'utilisez pas le port série. Ici, c'est un peu plus personnel, car j'ai une carte Slice Of Pi sur un Raspberry pour la station météo et elle utilise le port série pour les sondes sans fil.
Le protocole I2C, créé par Philips avec une orientation domotique, permet à plusieurs composants de communiquer entre eux de manière bidirectionnelle mais en semi-duplex uniquement. Comme d'habitude, plus d'informations sur Wikipedia.
Il y a un principe de maître et d'esclave. Nous allons donc ici utiliser le Raspberry Pi comme maître et l'Arduino comme esclave.
Tout d'abord pour connecter les deux appareils, vous devez savoir quelles broches utiliser!
Pour la framboise c'est sur GPIO 2 et 3 (pour les cartes du modèle B révision 2, celles avec les trous de fixation dans la carte)

Pour l'Arduino, cela se produit sur les broches A4 et A5 pour les cartes de type Arduino Uno. Pour d'autres cartes, vous trouverez plus d'informations sur le site officiel d'Arduino.
Vous devrez ajouter une connexion à la terre entre les deux. Vous aurez donc besoin de trois fils.
Avant de connecter nos deux appareils, nous devons nous assurer qu'ils pourront communiquer. Toutes les informations sont sur le site Web d'Adafruit mais, fondamentalement, voici ce qu'il faut faire.
Il est relativement simple d'inclure le module Wire dans le programme. J'ai pris l'adresse 0x12 mais vous pouvez choisir entre 0x03 et 0x77 (en hex):
#comprendre#define SLAVE_ADDRESS 0x12 int dataReceived = 0; void setup () Serial.begin (9600); Wire.begin (SLAVE_ADDRESS); Wire.onReceive (ReceiveData); Wire.onRequest (sendData); boucle vide () retard (100); void receiveData (int byteCount) while (Wire.available ()) dataReceived = Wire.read (); Serial.print ("Données reçues:"); Serial.println (dataReceived); void sendData () int send = dataReceived + 1; Wire.write (expédition);
Comme vous pouvez le voir, le programme initialise l'Arduino avec l'adresse 0x12, définit la méthode de réception des données, la méthode d'envoi des données et c'est parti pour l'envoyer sur la carte avec l'interface.
Par défaut, les distributions de type Raspbian désactivent la gestion I2C pour économiser la mémoire utilisée par le module. Pour réactiver, rien de plus simple et c'est dans le dossier /etc/modprobe.d/raspi-blacklist.conf. Vous devez commenter avec un # la ligne:
liste noire i2c-bcm2708
Reste à activer le module à chaque démarrage. C'est dans le fichier / Etc / modules, en ajoutant une nouvelle ligne à la fin:
i2c-dev
Ensuite, vous installez la suite d'outils de gestion I2C
apt-get install i2c-tools
Vous devrez redémarrer le Raspberry pour faire apparaître deux fichiers:

Grâce à eux, vous pourrez communiquer sur le bus I2C!
Vous pouvez lister les appareils avec la commande:
i2cdetect -y 1
Pour les modèles 256 Mo (comme celui que j'utilise pour mes tests):
i2cdetect -y 0
Ici. Étape suivante: connectez l'Arduino et parlez-lui!
Vous pouvez maintenant connecter l'Arduino à la Raspberry et allumer tout ce petit monde!
Attention, sur le schéma, la connexion SDA et SCL est inversée! Le rouge en A5 et le balnc va en A4 😉

Une fois cela fait, vous vous connectez au Raspberry Pi et relancez la commande i2cdetect avec le paramètre correct:

Le paramètre défini dans l'esquisse envoyée à l'Arduino, 0x12, apparaît dans les appareils détectés. Nous progressons!
Maintenant, nous devons configurer le script sur le Raspberry Pi qui enverra / recevra avec l'Arduino. La façon la plus simple de procéder consiste à installer le support I2C dans les scripts Python. C'est ce que fera python-smbus
apt-get install python-smbus
Nous sommes donc maintenant équipés pour parler à notre Arduino. Pour cela un petit programme simple. Envoyez un numéro entre 0 et 8 et renvoyez ce numéro plus un:
importer des smbus temps d'importation # Remplacer 0 par 1 si nouveau framboise bus = smbus.SMBus (0) adresse = 0x12 imprimer "Valeur d'envoi 3" bus.write_byte (adresse, 3) # Pause de 1 seconde pour laisser le temps au traitement de se dérouler time.sleep (1) answer = bus.read_byte (adresse) imprimer "Arduino & # 39; s answer:", answer
Le résultat de l'exécution:

Laissez parler votre imagination pour l'instant dirigez l'Arduino en lui envoyant des requêtes un peu plus complexes en fonction de ce que vous y avez connecté!
Source et inspiration : un article d'Oscar







Commentaires
Laisser un commentaire