Connecter notre Raspberry Pi à une carte Arduino et envoyer notre programme seulement avec le terminal en SSH
Extrait de l’article : Connecting Raspberry PI Zero W to Arduino only via terminal Connecting Raspberry PI Zero W to Arduino only via terminal - peppe8o 6th February 2020
Step-by-Step Guide
Install Arduino-Cli
To install arduino-cli, I’ll use the official install script. Before all, create a directory where user executables will be stored:
mkdir -p local/bin
add this directory to user $PATH variables (so that you can execute arduino-cli without typing full path):
nano .bashrc
add the following line to the end of file:
export PATH="$HOME/local/bin:$PATH"
logout/login to make it running. Now install arduino-cli with default script. Note the BINDIR variable telling the script to use our $PATH directory for installation:
curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | BINDIR=/home/pi/local/bin sh
Now create the default configuration file (suggested from arduino-cli man page to avoid a lot of typing when issuing each command):
arduino-cli config init
Connect Arduino Uno / Elegoo Uno Board
Before installing our board, we need to update the local cache of available platforms and libraries:
arduino-cli core update-index
Connect Elegoo Uno/Arduino board to your Raspberry PI using the miniUSB-to-USB cable. You should be able now to list your board:
pi@raspberrypi:~ $ arduino-cli board list
Port Type Board Name FQBN Core
/dev/ttyACM0 Serial Port (USB) Arduino Uno arduino:avr:uno arduino:avr
/dev/ttyAMA0 Serial Port Unknown
If you can see only Unknown port, a Raspberry PI reboot could help in refreshing hardware recognition. My output shows that I have an Arduino Uno based board, with FQBN (fully qualified board names) set to “arduino:avr:uno”.
Install your board:
arduino-cli core install arduino:avr
Verify that installed board is properly running:
pi@raspberrypi:~ $ arduino-cli core list
ID Installed Latest Name
arduino:avr 1.8.2 1.8.2 Arduino AVR Boards
Tester son installation
Nous allons créer notre programme arduino
arduino-cli sketch new Prog_V2
Maintenant nous allons éditer ce fichier et insérer le code du programme
nano MyFirstSketch/Prog_V2.ino
Voici le code à copier / coller :
int bouton = 0;
//***********************************//
//Déclaration pour servo //
//***********************************//
#include <Servo.h>
Servo servo_azimut; // création de l'objet pour le servo azimut (axe de rotation vertical)
Servo servo_elevation1; // création de l'objet pour le servo élévation du premier panneau (axe horizontal)
Servo servo_elevation2; // création de l'objet pour le servo élévation du deuxième panneau (axe horizontal)
int pin_servo_azimut = 3; // le servo azimut est connecté à la pin digitale 3
int pin_servo_elevation1 = 5; // le servo élévation1 est connecté à la pin digitale 5
int pin_servo_elevation2 = 6; // le servo élévation2 est connecté à la pin digitale 6
int pos_servo_azimut = 0; // position du servo
int pos_servo_elevation1 = 0; // position du servo
int pos_servo_elevation2 = 0; // position du servo
//int angle_initial_servo_azimut = 0; //angle initial
//int angle_initial_servo_elevation1 = 0; //angle initial
//int angle_initial_servo_elevation2 = 0; //angle initial
//int angle_final_servo_azimut = 180; //angle final
//int angle_final_servo_elevation1 = 180; //angle final
//int angle_final_servo_elevation2 = 180; //angle final
//int increment_servo_azimut = 1; //incrément entre chaque position
//int increment_servo_elevation1 = 1; //incrément entre chaque position
//int increment_servo_elevation2 = 1; //incrément entre chaque position
//bool angle_actuel = false;//Envoi sur le port série la position courante du servomoteur
//***********************************//
//Déclaration pour ecran //
//***********************************//
#include <Wire.h>
#include "rgb_lcd.h"
rgb_lcd lcd; // déclaration d'un écran lcd
//***********************************//
//Déclaration pour capteur de lumière//
//***********************************//
#include "Arduino.h"
#include "SI114X.h"
SI114X capteur_luminosite = SI114X();
int rayonnement_VIS = 0;
int rayonnement_IR = 0;
float rayonnement_UV = 0 ;
//*************************************//
//Déclaration pour capteur de puissance//
//*************************************//
#include "DFRobot_INA219.h"
DFRobot_INA219_IIC wattmetre(&Wire, INA219_I2C_ADDRESS4);
//paramètres a modifier pour la calibration du capteur
float ina219Reading_mA = 1000;
float extMeterReading_mA = 1000;
float tension;
int courant;
int puissance;
void setup() {
Serial.begin(115200);
while(!Serial){;}
servo_azimut.attach(pin_servo_azimut); // attache le servo au pin spécifié sur l'objet
servo_elevation1.attach(pin_servo_elevation1);
servo_elevation2.attach(pin_servo_elevation2);
lcd.begin(16, 2); // déclaration de la dimension du lcd : 16 caractères, 2 lignes
while(wattmetre.begin() != true) {
Serial.println("INA219 begin faild");
delay(2000);
}
wattmetre.linearCalibrate(ina219Reading_mA, extMeterReading_mA);
while (!capteur_luminosite.Begin()) {
Serial.println("Si1145 is not ready!");
delay(1000);
}
}
void loop() {
//test de servo -------------------------------------------
servo_azimut.write(pos_servo_azimut);
pos_servo_azimut = pos_servo_azimut +5;
if (pos_servo_azimut >180){
pos_servo_azimut = 0;
}
//fin de test de servo ------------------------------------
servo_elevation1.write(pos_servo_elevation1);
servo_elevation2.write(pos_servo_elevation2);
rayonnement_VIS = capteur_luminosite.ReadVisible();
rayonnement_IR = capteur_luminosite.ReadIR();
rayonnement_UV = (float)capteur_luminosite.ReadUV() / 100;
tension = wattmetre.getBusVoltage_V();
courant = wattmetre.getCurrent_mA();
puissance = wattmetre.getPower_mW();
if (digitalRead(2) == 1){
bouton=1;
}
else{
bouton=0;
}
if (bouton == 0){
lcd.setCursor(0, 0); // positionnement en colonne 0, ligne 0
lcd.print("AZ:");
lcd.setCursor(3, 0);
lcd.print(pos_servo_azimut); // afficharge de la position du servo azimut
lcd.setCursor(7, 0);
lcd.print("EL1:");
lcd.setCursor(11, 0);
lcd.print(pos_servo_elevation1); // afficharge de la position du servo élévation1
lcd.setCursor(0,1);
lcd.print(tension);
lcd.setCursor(4, 1);
lcd.print("V");
lcd.setCursor(8,1);
lcd.print(courant);
lcd.setCursor(13, 1);
lcd.print("mA");
lcd.setCursor(15,0);
if (courant < 0){
lcd.print("+");
}
if (courant > 0){
lcd.print("-");
}
}
if (bouton == 1){
lcd.setCursor(0,0);
lcd.print("visible:");
lcd.setCursor(8,0);
lcd.print(rayonnement_VIS);
lcd.setCursor(0,1);
lcd.print("IR:");
lcd.setCursor(3,1);
lcd.print(rayonnement_IR);
lcd.setCursor(8,1);
lcd.print("UV:");
lcd.setCursor(11,1);
lcd.print(rayonnement_UV);
}
Serial.println("//---------rayonnement---------------------//");
Serial.print("rayonnement Visible: ");
Serial.println(rayonnement_VIS);
Serial.print("rayonnement Infrarouge: ");
Serial.println(rayonnement_IR);
Serial.print("rayonnement Ultraviolet: ");
Serial.println(rayonnement_UV);
Serial.println("//---------positionnement---------------------//");
Serial.print("Position servo azimut:");
Serial.println(pos_servo_azimut);
Serial.print("Position servo élévation:");
Serial.println(pos_servo_elevation1);
Serial.println("//---------puissance---------------------//");
Serial.print("tension batterie : ");
Serial.print(tension);
Serial.println(" V");
Serial.print("courant batterie : ");
Serial.print(courant);
Serial.println(" mA");
Serial.print("puissance batterie : ");
Serial.print(puissance);
Serial.println(" mW");
delay(200);
Serial.write(12);
lcd.clear();
Avant d’envoyer le programme sur notre arduino, nous devons le compiler.
arduino-cli compile --fqbn arduino:avr:uno Prog_V2
Nous envoyons maintenant le programme sur l’arduino
arduino-cli upload -p /dev/ttyACM0 --fqbn arduino:avr:uno Prog_V2
Ci-dessous une astuce à reprendre pour faciliter les commandes
Tips To Simplify Command
Typing fqbn and port every time can be really boring. An help comes from linux alias command. The following line will associate “acompile” with arduino-cli compile and its full parameters. The second line will make the same work but with the update command:
alias acompile="arduino-cli compile --fqbn arduino:avr:uno"
alias aupload="arduino-cli upload -p /dev/ttyACM0 --fqbn arduino:avr:uno"
If you want to make these alias running also after reboot for pi user, you have to add them to your bashrc file. From terminal, let’s add alias with echo:
echo 'alias acompile="arduino-cli compile --fqbn arduino:avr:uno" ' >> ~/.bashrc
echo 'alias aupload="arduino-cli upload -p /dev/ttyACM0 --fqbn arduino:avr:uno"' >> ~/.bashrc
Now you can complile and upload sketches simply by typing:
acompile MyFirstSketch/
aupload MyFirstSketch/
or with combined command:
acompile MyFirstSketch/ && aupload MyFirstSketch/