Ce soir, branchement du PI et son pote Duino !!
Les 2 sont reliés en USB. Ils sont isolés du reste du robot. Le PI alimente l'arduino via USB.
Au programme ce soir :
- Upload sur arduino directement depuis le PI en ligne de commande.
- Communication entre les 2 via USB.
Je kiffe, je partage. Parce que je ne dois pas être le seul que cela embête de débrancher re-brancher ce câble USB ...
Compilation et Upload
Pour modifier le sketch via ssh, depuis le PI vers l'arduino, sans passer par l'interface graphique (IDE) :
(Préalable) Il faut installer 2 packages sur le PI :
sudo apt-get install arduino-core arduino-mk
Autoriser le user (pi) à utiliser les commandes arduino :
sudo usermod -a -G dialout pi
Pour chaque programme à uploader :
Il faut un répertoire dédié pour ces 2 fichiers : code.ino et le Makefile.
Code.ino (le nom importe peu mais l'extension doit être .ino) contient le code source arduino. On peut l'éditer via son éditeur de texte préféré, via ssh, via vi si on veut.
Makefile indique aux commandes arduino quelques paramètres. Il doit contenir ces lignes :
ARDUINO_DIR = /usr/share/arduino
BOARD_TAG = uno
ARDUINO_PORT = /dev/ttyACM*
ARDUINO_LIBS =
include /usr/share/arduino/Arduino.mk
Mon arduino est un uno , cela tombe bien. Je crois qu'il faut changer 'BOARD_TAG' si ce n'est pas le cas.
Pour Ash, sur le PI, cela donne :
pi@raspberrypi:~/SBR/arduino $ ls -la
total 20
drwxr-xr-x 3 pi pi 4096 mars 16 21:49 .
drwxr-xr-x 5 pi pi 4096 mars 16 21:47 ..
drwxr-xr-x 3 pi pi 4096 mars 16 21:49 build-uno
-rw-r--r-- 1 pi pi 133 mars 16 21:48 Makefile
-rw-r--r-- 1 pi pi 532 mars 16 21:47 sbr.ino
NB. le répertoire build-uno est créé par le compilateur.
Compiler et uploader :
Pour compiler, il faut se mettre dans le répertoire qui contient le .ino et le Makefile.
Lancer la commande make :
pi@raspberrypi:~/SBR/arduino $ vi sbr.ino
pi@raspberrypi:~/SBR/arduino $ make
Cela semble compiler ^^
Pour uploader, toujours dans le même répertoire, lancer make upload.
pi@raspberrypi:~/SBR/arduino $ make upload
I thank you too Mr Duino.
Communication entre Mr PI et Mr Duino via USB
Maintenant, toujours sans débrancher la prise USB entre le PI et le Duino, ils se parlent !
Préalable sur le raspberry
Il faut installer Serial pour python.
sudo apt-get install python-serial
Préalable sur arduino : rien.
Programme de test PI (en python)
#!/usr/bin/python
# -*- coding: utf-8 -*-
import serial
import time
ser = serial.Serial('/dev/ttyACM0', 9600)
while 1 :
message = time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime())
ser.write(message)
print(ser.readline())
time.sleep(0.5)
Programme de test arduino :
int compteur = 0;
String message;
void setup(){
Serial.begin(9600);
}
void loop() {
message = "-";
if (Serial.available()) {
message = Serial.readString();
}
Serial.print("MSG # ");
Serial.print(compteur);
Serial.print(" read : ");
Serial.println(message);
compteur++;
delay(1000);
}
Le PI envoi la date.
Le Duino lit cette date, ajoute une donnée et retourne la texte modifié.
Le PI affiche ce que Duino lui envoi.
pi@raspberrypi:~/SBR $ ./test-serial-rpi.py
Wed, 16 MSG # 0 read : -
MSG # 1 read : Wed, 16 Mar 2016 21:30:21 +0000
MSG # 2 read : Wed, 16 Mar 2016 21:30:23 +0000
MSG # 3 read : Wed, 16 Mar 2016 21:30:25 +0000
MSG # 4 read : Wed, 16 Mar 2016 21:30:27 +0000
MSG # 5 read : Wed, 16 Mar 2016 21:30:29 +0000
Au passage, on note qu'il manque une seconde sur 2. La lecture étant bloquante en python sur le PI, il attend que le Duino réponde (1s) pour envoyer la prochaine date.