Communiquer avec un arduino à l'aide d'un Raspberry Pi

Communicating with an Arduino Using a Raspberry Pi

Le Raspberry Pi et Arduino peuvent communiquer entre eux en utilisant différents protocoles, y compris Série (UART), I2C et SPI. Ce guide vous montrera comment configurer la communication entre un Raspberry Pi et un Arduino en utilisant le Interface série (UART), qui est la méthode la plus courante et la plus simple.


Ce dont vous aurez besoin

  1. Raspberry Pi (Tout modèle avec le support GPIO, par ex., PI 3, PI 4)
  2. Arduino (par exemple, uno, mega, nano)
  3. Câble USB (pour connecter l'Arduino au Raspberry Pi)
  4. Fils de cavalier (Si vous utilisez la communication série GPIO)
  5. Python installé sur le Raspberry Pi
  6. Arduino ide Installé sur le Raspberry Pi ou un ordinateur séparé

Étape 1: Connexion de l'Arduino au Raspberry Pi

Vous pouvez connecter le Raspberry Pi à l'Arduino en utilisant USB ou le Broches GPIO.

Méthode 1: connexion USB (recommandée)

  1. Connectez le Arduino au Raspberry Pi en utilisant un câble USB.
  2. Le Raspberry Pi détectera l'Arduino en tant que dispositif série (par exemple, /dev/ttyUSB0 ou /dev/ttyACM0).

Méthode 2: Utilisation des broches GPIO (série matérielle)

  1. Connectez le Arduino TX (broche 1) à Raspberry Pi Rx (GPIO 15, broche 10).
  2. Connectez le Arduino Rx (broche 0) à Raspberry Pi TX (GPIO 14, broche 8).
  3. Connecter GND à GND.
  4. Désactivez la console série intégrée du framboise PI:
    sudo raspi-config
    
    • Se diriger vers Options d'interface> Port série.
    • Désactivez le shell de connexion via la série mais activez le matériel de port série.
    • Redémarrez le Raspberry Pi:
      sudo reboot
      

Étape 2: Installez les bibliothèques requises

Assurez-vous que votre Raspberry Pi a installé les outils de communication série nécessaires.

sudo apt update
sudo apt install python3-serial

Pour vérifier les ports en série disponibles:

ls /dev/tty*

Pour une connexion USB, recherchez /dev/ttyUSB0 ou /dev/ttyACM0.


Étape 3: Téléchargez un croquis Arduino

Pour envoyer des données de l'Arduino au Raspberry Pi, téléchargez ce simple Sketch Arduino en utilisant le Arduino ide.

void setup() {
  Serial.begin(9600); // Start serial communication
}

void loop() {
  Serial.println("Hello from Arduino!"); // Send message
  delay(1000);
}

Étape 4: Lire les données série sur le Raspberry Pi

Créez un script Python sur le Raspberry Pi pour lire les données de l'Arduino.

Exemple de code python

import serial
import time

# Open the serial port (Change ttyUSB0 if necessary)
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
time.sleep(2)  # Wait for connection

try:
    while True:
        if ser.in_waiting > 0:
            data = ser.readline().decode('utf-8').strip()
            print(f"Received: {data}")
except KeyboardInterrupt:
    print("Exiting...")
    ser.close()
  • S'assurer que /dev/ttyUSB0 correspond à votre port série détecté.
  • Exécutez le script:
    python3 serial_read.py
    
  • Tu devrais voir "Bonjour d'Arduino!" imprimé chaque seconde.

Étape 5: Envoi de données du Raspberry Pi à Arduino

Modifier le Code arduino Pour recevoir des données du Raspberry Pi:

void setup() {
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {
    String received = Serial.readStringUntil('\\n');
    Serial.print("Raspberry Pi Sent: ");
    Serial.println(received);
  }
}

Modifier le Code python Pour envoyer des données à l'Arduino:

ser.write(b"Hello from Raspberry Pi!\\n")
  • Maintenant, l'Arduino recevra des messages envoyés par le Raspberry Pi.

Méthodes de communication alternatives

  1. Communication I2C (pour plusieurs arduinos)

    • Raspberry Pi agit comme Maître, Arduino agit comme Esclave.
    • Activer I2C:
      sudo raspi-config
      
    • Installer les bibliothèques requises:
      sudo apt install python3-smbus i2c-tools
      
    • Utiliser Wire.h Du côté Arduino pour la communication I2C.
  2. Communication SPI (pour le transfert de données à grande vitesse)

    • Nécessite Arduino compatible SPI et SPI.h bibliothèque.
    • Plus rapide que UART et I2C mais nécessite plus de câblage.

Dépannage

  1. Arduino non détecté sur Raspberry Pi

    • Courir ls /dev/tty* Pour vérifier les appareils série disponibles.
    • Assurez-vous que le port série correct est spécifié dans le script Python.
  2. Erreur d'autorisation refusée

    • Ajoutez votre utilisateur au dialout groupe:
      sudo usermod -aG dialout $USER
      sudo reboot
      
  3. Caractères à ordures en sortie

    • Assurer Les deux appareils utilisent le même taux de bauds (par exemple, 9600).
    • Ajouter un petit retard (time.sleep(2)) Avant de lire les données dans Python.

Conclusion

En suivant ce guide, vous pouvez établir communication en série entre un Arduino et un Raspberry Pi, leur permettant d'échanger des données contre Projets IoT, intégration des capteurs et systèmes d'automatisation. Expérimenter I2C et SPI Pour des applications plus avancées!

Laissez un commentaire

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.