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/

 

Last modified: Tuesday, 29 December 2020, 12:36 PM