Je me suis déniché un microcontrôleur ESP32 de la marque Whadda [??] anciennement Velleman [Ah, ok, les trucs en kit: toute ma jeunesse ;-)] dans la boutique au coin de la rue.
Fiche produit: Whadda ESP32 Development Board.
Nous avons là un chipset ESPRESSIF ESP-WROOM-32 avec un microprocesseur Xtensa double cœur 32bits LX6, fonctionnant à 160 ou 240MHz et jusqu’à 600DMIPS, 520Lo de SRAM et 448Ko de ROM, du Wi-Fi: 802.11 b/g/n, du Bluetooth et BLE.
La plaquette, excepté sa couleur, ressemble comme deux gouttes d'eau au ESP32_DevKitC d'Espressif. Peut-être le mien est un clône... ou le fruit de l'électronique open-source, je sais pas. Bon, je suppose que c'est compatible, voyons ça:
esp-idf - l'official framework d'Espressif
Prenons la méthode du producteur de l'ESP32.
sudo apt-get install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
mkdir -p ~/esp
cd ~/esp
git clone -b v5.4.1 --recursive https://github.com/espressif/esp-idf.git
cd ~/esp/esp-idf/
./install.sh all
. ./export.sh
cd ..
cp -r $IDF_PATH/examples/get-started/hello_world/ .
cd hello_world/
idf.py set-target esp32
# idf.py menuconfig # Component config ---> ESP System Settings ---> Channel for console output (Default: UART0) ---> (X) USB CDC save quit
idf.py build
idf.py -p /dev/ttyUSB0 flash monitor # ctrl-] to quit
... Francement, c'est ch|@n7 !
IDE Arduino
Ca a l'air beaucoup plus simple et intuitif, et pas besoin du esp-idf :-)
Initiation à l'ESP32 grâce aux vidéos de Tommy Desrochers: d'abord ESP32 #1, puis ESP32 #2, ensuite ESP32 #3, et encore ESP32 #4, pour finir par ESP32 #5
Tommy fini par utiliser une autre interface. Ca a l'air un peu usine à gaz, je vais rester sous l'IDE Arduino.
Installation sous Linux (Debian 12)
Lors de la première utilisation de L'API Arduino, j'ai reçu deux messages d'erreur:
-
ModuleNotFoundError: No module named 'serial'
: L'API ne trouve pas le module Serial (pour l'affichage de messages du microcontrôleur vers l'API). On va devoir installer le module Serial de Python (Pourquoi Python ??). -
Failed uploading: no upload port provided
: Faute de droit d'écriture sur le port, l'API ne peux pas écrire sur le microcontrôleur. Il faudra donner accès à /dev/ttyUSB0 en ajoutant l’utilisateur au groupe dialout.
Du coup, l'installation sous Linux (Debian 12) ressemble à:
- Download module Serial de Python
# apt install python3-serial
- Ajout de l'utilisateur au groupe dialout:
# /sbin/usermod -aG dialout <USERNAME>
+ reboot. - Download Aduino IDE: https://www.arduino.cc/en/software
- Unzip:
$ unzip arduino[…]
- Launch:
$ cd arduino[…]
, suivi de$ ./arduino-ide
- Menu File → Preferences → Additional boards manager URLs: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
- Menu Tools → Board → Board Manager… → recherche par mot clef ESP32, sélection de la version la plus récente de ESP32 by Espressif Systems [3.3.0], puis Install
- Menu Tools → Board → Esp32 → ESP32 Dev Module
- Menu Tools → Port → /dev/ttyUSB0
1er test:
- Menu File → example → ESP32 → ChipID → GetChipID
- Téléversement vers l'ESP32: Menu Sketch → Upload
- Menu Tools → Serial Monitor
- Change to 115200 Baud
Résultat:
ESP32 Chip model = ESP32-D0WDQ6 Rev 101 This chip has 2 cores Chip ID: 11493932
Stop language server
L'appli fait continuellement appel au "language server" pour l'aide à la programmation (autocomplétion), ce qui ralenti considérablement l'IDE → On le supprime en tapant: Ctrl
+ Shift
+ p
puis Arduino: Stop Language Server
(à effectuer à chaque ouverture de l'IDE) → Peut-être qu'un jour cette option sera désactivée par défaut.
https://forum.arduino.cc/t/how-to-disable-language-server-in-arduino-ide-2-3-2/1291420/2
Serial Output
void setup() {
Serial.begin(115200);
while (!Serial) continue;
Serial.println("Ready.");
}
void loop() {
}
GPIO
Pour allumer une LED, il faut initialiser un pin en output pinMode(<numero du pin>, OUTPUT);
puis on va écrire dedans: digitalWrite(<numero du pin>, HIGH)
ou LOW
pour l'éteindre.
Suite illogique des pins GPIO sur la carte à corriger par software.
GPIO-1 en OUTPUT → conflit avec sortie serial → on prend un autre.
#include <math.h>
const float pi = 3.14159;
const int ledPin[7] = {5,18,19,21,3,22,23};
void setup() {
for (int i=0; i<7; i++) {
pinMode (ledPin[i], OUTPUT);
}
}
void loop() {
for (float ang=-pi; ang<pi; ang=ang+(2*pi/700)) {
int led = (1+std::sin(ang))*7/2;
digitalWrite (ledPin[led], HIGH);
delay(1);
digitalWrite (ledPin[led], LOW);
}
}
Bien entendu, on peut aussi faire des choses utiles :-)
To be contiuned....