Poste de DEV ESP32 sur PI

De knowledge
Aller à la navigation Aller à la recherche

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>

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

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

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

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