« Poste de DEV ESP32 sur PI » : différence entre les versions

De knowledge
Aller à la navigation Aller à la recherche
Page créée avec « Une fois n'est pas coutume je vais utiliser un Raspberry PI en mode graphique. Un bel écran HDMI branché sur HDMI N°1. Une installation simple avec toutes les valeurs de bases et seulement un ou deux delta: * Suppression de l'outil graphique PackageKit qui empèche les sudo apt install normeaux. * A voir peut etre plus tard... »
 
 
(6 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
Une fois n'est pas coutume je vais utiliser un Raspberry PI en mode graphique. Un bel écran HDMI branché sur HDMI N°1.
ttyACM0: USB ACM deviceUne fois n'est pas coutume je vais utiliser un Raspberry PI en mode graphique. Un bel écran HDMI branché sur HDMI N°1.


Une installation simple avec toutes les valeurs de bases et seulement un ou deux delta:
Une installation simple avec toutes les valeurs de bases et seulement un ou deux delta:


* [[PackageKit|Suppression de l'outil graphique PackageKit]] qui empèche les sudo apt install normeaux.
* [[PackageKit|Suppression de l'outil graphique PackageKit]] qui empèche les sudo apt install normeaux.
* A voir peut etre plus tard...
* Mettre a jour avec
<syntaxhighlight lang="bash">
sudo apt update
sudo apt upgrade
sudo apt full-upgrade
sudo apt install gnome-screenshot #C'est pas necessaire mais pour enrichier ce wiki je mets ca sur tous mes postes de dev
 
</syntaxhighlight>
* Passer Chromium en français pour pouvoir éditer ce site tranquilement.
 
== Préparer le Raspberry Pi ==
Normalement c'est inutile sur une installation par défaut mais au cas ou...<syntaxhighlight lang="bash">sudo apt install python3 python3-pip python3-venv git build-essential</syntaxhighlight>
 
== Installer Visual Studio Code (version ARM64/ARMHF) ==
Visual studio code n'est pas dans les repo par défaut. Il fout faire toute le sequence suivante:<syntaxhighlight lang="bash">sudo apt install wget gpg # Pour moi sur une insall par défaut ça n'a rien fait
# On télécharge la clé gpg de microsoft
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
# On installe cette clé
sudo install -o root -g root -m 644 microsoft.gpg /usr/share/keyrings/
# On ajoute une source pour apt
sudo sh -c 'echo "deb [arch=arm64 signed-by=/usr/share/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list'
# On synchronise
sudo apt update
# On installe (c'est que ca fait le boulot)
sudo apt install code</syntaxhighlight>
 
== Installer PlatformIO dans VS Code ==
On ouvre Visual Studio Code sagement avec le menu "Framboise | Programmation | Visual Studio Code".
 
[[Fichier:Visualstudiocode.png|sans_cadre|600x600px]]
 
Aller dans "extension" : Icone [[Fichier:Visualstudiocode-extensions.png|sans_cadre|25x25px]]
 
On recherche platformIO
 
[[Fichier:Visualstudiocode-platformio.png|sans_cadre]]
 
Et on installe. (Si ça demande si on y crois "Trust" on dit oui)
 
Ça prend quelques minutes et ça affiche la page de garde PlatformIO.
 
[[Fichier:Platform-io home.png|sans_cadre|871x871px]]
 
== Installer les toolchains ESP32 (automatique) ==
Il n'y a rien a installer en tant que tel. Ça se fait à la création du projet. On passe donc à la suite.
 
== Créer un projet ESP32 avec PlatformIO ==
Par défaut ca vas être créé dans (ça doit pouvoir se changer mais je sais pas encore faire):<syntaxhighlight lang="bash">
/home/$USER/Documents/PlatformIO/Projects/
</syntaxhighlight>On clique sur l'icône Platform IO dans la barre d'icône de gauche: [[Fichier:Platform-io icon.png|sans_cadre|28x28px]]
 
On attends un moment (surtout le première fois)...
 
Et dans la fenêtre : PlatformIO:
 
[[Fichier:Platform-io menu.png|sans_cadre|316x316px]]
 
On clique sur Create new Project.
 
[[Fichier:Platform-io home-2.png|sans_cadre|778x778px]]
 
On clique sur "+ New Project"
 
=== Choisir la "carte". ===
La il faut savoir quelle carte on a et surtout quelle est son interface.
 
Si on branche la carte sur le PI et que l'on examine dmesg.<syntaxhighlight lang="text">[ 6757.122196] usb 1-1.1: new full-speed USB device number 10 using xhci_hcd
[ 6757.217480] usb 1-1.1: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.01
[ 6757.217498] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 6757.217503] usb 1-1.1: Product: USB JTAG/serial debug unit
[ 6757.217508] usb 1-1.1: Manufacturer: Espressif
[ 6757.217512] usb 1-1.1: SerialNumber: AC:A7:04:83:55:70
[ 6757.226869] cdc_acm 1-1.1:1.0: ttyACM0: USB ACM device</syntaxhighlight>Ici j'ai une interface en ttyACM0. J'aurais pu avoir :<syntaxhighlight lang="text">[ 6757.226869] usb 1-1.3: ch341-uart converter now attached to ttyUSB0</syntaxhighlight>On choisit la carte en fonction de ça :
{| class="wikitable"
|+Type de carte
!dmesg
!carte
|-
|<code>cdc_acm 1-1.1:1.0: ttyACM0: USB ACM device</code>
|<code>esp32-c3-devkitc-02</code>
|-
|<code>usb 1-1.3: ch341-uart converter now attached to ttyUSB0</code>
|<code>esp32-c3-devkitm-1</code>
|-
|Doit y en avoir d'autres
|...
|}
Donc pour moi :
 
[[Fichier:Visualstudiocode-platformio-board.png|sans_cadre|593x593px]]
 
Dans un premier temps le framework Arduino c'est plus simple.
 
On clique sur Finish et on attends...
{| class="wikitable"
|+Attention
|[[Fichier:Attention.png|sans_cadre|44x44px]]
|Cette partie doit se faire ''connecté à internet'' la première fois puisque, comme vu plus haut, c'est là que l'on va chercher les éléments de la ''toolchain'' manquants.
|}
On a successivement les infos suivantes  :
 
[[Fichier:ESP32-rasp-02.png|sans_cadre|300x300px]] [[Fichier:ESP32-rasp-01.png|sans_cadre|296x296px]] [[Fichier:ESP32-rasp-03.png|sans_cadre]] [[Fichier:ESP32-rasp-04.png|sans_cadre|296x296px]]
 
 
A la fin (moi ca a pris 15 min mais je suis loin du Point D'acces Wifi) on a un beau projet :
 
[[Fichier:Default-esp32-project.png|sans_cadre]]
 
Le code de "main.cpp" est par défaut :<syntaxhighlight lang="c">
#include <Arduino.h>
 
// put function declarations here:
int myFunction(int, int);
 
void setup() {
  // put your setup code here, to run once:
  int result = myFunction(2, 3);
}
 
void loop() {
  // put your main code here, to run repeatedly:
}
 
// put function definitions here:
int myFunction(int x, int y) {
  return x + y;
}
</syntaxhighlight>
 
== Connectivité USB ==
En fonction de la carte (voir ci dessus) on a un "device" que le système crée au branchement :<syntaxhighlight lang="text">
crw-rw----+ 1 root plugdev 166, 0 22 mars  18:49  /dev/ttyACM0  # C'est mou cas
crw-rw----+ 1 root dialout 166, 0 22 mars  18:49  /dev/ttyUSB01 # Ca pourait être ça
</syntaxhighlight>Il faut vérifier que l'utilisateur que vous utilisez pour le dev soit bien membre du groupe (<code>plugdev</code> ou <code>dialout</code>) <syntaxhighlight lang="text">
uid=.... gid=.... groupes=20(dialout),24(cdrom),29(audio),44(video),46(plugdev),60(games),100(users),102(netdev),986(gpio),992(render),996(input)
 
</syntaxhighlight>Moi je suis bien : <code>plugdev</code> donc ça va marcher sinon un petit :<syntaxhighlight lang="bash">
sudo usermod -aG dialout $USER
sudo usermod -aG plugdev $USER
</syntaxhighlight>et ça marche!
 
== Compiler et flasher ==
On arrive au cœur du sujet!
 
Moi j'ai du modifier platformio.ini:<syntaxhighlight lang="ini">
; PlatformIO Project Configuration File
;
;  Build options: build flags, source filter
;  Upload options: custom upload port, speed and extra flags
;  Library options: dependencies, extra library storages
;  Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
 
[env:esp32-c3-devkitc-02]
platform = espressif32
board = esp32-c3-devkitc-02
framework = arduino
upload_protocol = esptool
upload_port = /dev/ttyACM0
monitor_port = /dev/ttyACM0
monitor_speed = 115200
debug_tool = custom
debug_server =
 
</syntaxhighlight>On sauvegarde et ensuite, sur la petite barre du bas:
 
[[Fichier:Visualstudio-lower-bar.png|sans_cadre|709x709px]]
 
On clique sur la coche pour compiler: Ce doit se terminer par un beau SUCCESS en vert.
 
On clique ensuite sur le flèche (entre la coche et la poubelle) : On voit les logs de esptool :<syntaxhighlight lang="text">
Compressed 228800 bytes to 128556...
Writing at 0x00010000... (12 %)
Writing at 0x0001aa3d... (25 %)
Writing at 0x0002180e... (37 %)
Writing at 0x00027993... (50 %)
Writing at 0x0002df5c... (62 %)
Writing at 0x00033c3b... (75 %)
Writing at 0x0003b93d... (87 %)
Writing at 0x00042705... (100 %)
Wrote 228800 bytes (128556 compressed) at 0x00010000 in 0.8 seconds (effective 2163.5 kbit/s)...
Hash of data verified.
</syntaxhighlight>Et aussi un beau SUCCESS en vert.
 
C'est fait on a flashé avec un beau programme... qui fait rien.
 
== Exemple ==
Avec la carte  avec [[ESP32C3 avec écran spotear|écran et ESP32-C3]] j'ai testé:<syntaxhighlight lang="c++">#include <Arduino.h>
 
#define LED_PIN 11
#define PERIODE 500 // miliseconds
 
void setup() {
  // put your setup code here, to run once:
  pinMode(LED_PIN,OUTPUT);
}
 
void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(LED_PIN,true);
  delay (PERIODE/2);
  digitalWrite(LED_PIN,false);
  delay (PERIODE/2);
}</syntaxhighlight>Ca marche bien j'ai la led à droit de la prise USB qui clignotte.

Dernière version du 22 mars 2026 à 21:20

ttyACM0: USB ACM deviceUne fois n'est pas coutume je vais utiliser un Raspberry PI en mode graphique. Un bel écran HDMI branché sur HDMI N°1.

Une installation simple avec toutes les valeurs de bases et seulement un ou deux delta:

sudo apt update
sudo apt upgrade
sudo apt full-upgrade
sudo apt install gnome-screenshot #C'est pas necessaire mais pour enrichier ce wiki je mets ca sur tous mes postes de dev
  • Passer Chromium en français pour pouvoir éditer ce site tranquilement.

Préparer le Raspberry Pi

Normalement c'est inutile sur une installation par défaut mais au cas ou...

sudo apt install python3 python3-pip python3-venv git build-essential

Installer Visual Studio Code (version ARM64/ARMHF)

Visual studio code n'est pas dans les repo par défaut. Il fout faire toute le sequence suivante:

sudo apt install wget gpg # Pour moi sur une insall par défaut ça n'a rien fait
# On télécharge la clé gpg de microsoft
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
# On installe cette clé
sudo install -o root -g root -m 644 microsoft.gpg /usr/share/keyrings/
# On ajoute une source pour apt
sudo sh -c 'echo "deb [arch=arm64 signed-by=/usr/share/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list'
# On synchronise
sudo apt update
# On installe (c'est que ca fait le boulot)
sudo apt install code

Installer PlatformIO dans VS Code

On ouvre Visual Studio Code sagement avec le menu "Framboise | Programmation | Visual Studio Code".

Aller dans "extension" : Icone

On recherche platformIO

Et on installe. (Si ça demande si on y crois "Trust" on dit oui)

Ça prend quelques minutes et ça affiche la page de garde PlatformIO.

Installer les toolchains ESP32 (automatique)

Il n'y a rien a installer en tant que tel. Ça se fait à la création du projet. On passe donc à la suite.

Créer un projet ESP32 avec PlatformIO

Par défaut ca vas être créé dans (ça doit pouvoir se changer mais je sais pas encore faire):

/home/$USER/Documents/PlatformIO/Projects/

On clique sur l'icône Platform IO dans la barre d'icône de gauche:

On attends un moment (surtout le première fois)...

Et dans la fenêtre : PlatformIO:

On clique sur Create new Project.

On clique sur "+ New Project"

Choisir la "carte".

La il faut savoir quelle carte on a et surtout quelle est son interface.

Si on branche la carte sur le PI et que l'on examine dmesg.

[ 6757.122196] usb 1-1.1: new full-speed USB device number 10 using xhci_hcd
[ 6757.217480] usb 1-1.1: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.01
[ 6757.217498] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 6757.217503] usb 1-1.1: Product: USB JTAG/serial debug unit
[ 6757.217508] usb 1-1.1: Manufacturer: Espressif
[ 6757.217512] usb 1-1.1: SerialNumber: AC:A7:04:83:55:70
[ 6757.226869] cdc_acm 1-1.1:1.0: ttyACM0: USB ACM device

Ici j'ai une interface en ttyACM0. J'aurais pu avoir :

[ 6757.226869] usb 1-1.3: ch341-uart converter now attached to ttyUSB0

On choisit la carte en fonction de ça :

Type de carte
dmesg carte
cdc_acm 1-1.1:1.0: ttyACM0: USB ACM device esp32-c3-devkitc-02
usb 1-1.3: ch341-uart converter now attached to ttyUSB0 esp32-c3-devkitm-1
Doit y en avoir d'autres ...

Donc pour moi :

Dans un premier temps le framework Arduino c'est plus simple.

On clique sur Finish et on attends...

Attention
Cette partie doit se faire connecté à internet la première fois puisque, comme vu plus haut, c'est là que l'on va chercher les éléments de la toolchain manquants.

On a successivement les infos suivantes  :


A la fin (moi ca a pris 15 min mais je suis loin du Point D'acces Wifi) on a un beau projet :

Le code de "main.cpp" est par défaut :

#include <Arduino.h>

// put function declarations here:
int myFunction(int, int);

void setup() {
  // put your setup code here, to run once:
  int result = myFunction(2, 3);
}

void loop() {
  // put your main code here, to run repeatedly:
}

// put function definitions here:
int myFunction(int x, int y) {
  return x + y;
}

Connectivité USB

En fonction de la carte (voir ci dessus) on a un "device" que le système crée au branchement :

crw-rw----+ 1 root plugdev 166, 0 22 mars  18:49  /dev/ttyACM0  # C'est mou cas
crw-rw----+ 1 root dialout 166, 0 22 mars  18:49  /dev/ttyUSB01 # Ca pourait être ça

Il faut vérifier que l'utilisateur que vous utilisez pour le dev soit bien membre du groupe (plugdev ou dialout)

uid=.... gid=.... groupes=20(dialout),24(cdrom),29(audio),44(video),46(plugdev),60(games),100(users),102(netdev),986(gpio),992(render),996(input)

Moi je suis bien : plugdev donc ça va marcher sinon un petit :

sudo usermod -aG dialout $USER
sudo usermod -aG plugdev $USER

et ça marche!

Compiler et flasher

On arrive au cœur du sujet!

Moi j'ai du modifier platformio.ini:

; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[env:esp32-c3-devkitc-02]
platform = espressif32
board = esp32-c3-devkitc-02
framework = arduino
upload_protocol = esptool
upload_port = /dev/ttyACM0
monitor_port = /dev/ttyACM0
monitor_speed = 115200
debug_tool = custom
debug_server =

On sauvegarde et ensuite, sur la petite barre du bas:

On clique sur la coche pour compiler: Ce doit se terminer par un beau SUCCESS en vert.

On clique ensuite sur le flèche (entre la coche et la poubelle) : On voit les logs de esptool :

Compressed 228800 bytes to 128556...
Writing at 0x00010000... (12 %)
Writing at 0x0001aa3d... (25 %)
Writing at 0x0002180e... (37 %)
Writing at 0x00027993... (50 %)
Writing at 0x0002df5c... (62 %)
Writing at 0x00033c3b... (75 %)
Writing at 0x0003b93d... (87 %)
Writing at 0x00042705... (100 %)
Wrote 228800 bytes (128556 compressed) at 0x00010000 in 0.8 seconds (effective 2163.5 kbit/s)...
Hash of data verified.

Et aussi un beau SUCCESS en vert.

C'est fait on a flashé avec un beau programme... qui fait rien.

Exemple

Avec la carte avec écran et ESP32-C3 j'ai testé:

#include <Arduino.h>

#define LED_PIN 11
#define PERIODE 500 // miliseconds

void setup() {
  // put your setup code here, to run once:
  pinMode(LED_PIN,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(LED_PIN,true);
  delay (PERIODE/2);
  digitalWrite(LED_PIN,false);
  delay (PERIODE/2);
}

Ca marche bien j'ai la led à droit de la prise USB qui clignotte.