Où sommes nous ?

Retour

Installation de l'IDE Arduino pour ESP8266

Il est possible de programmer un ESP-8266 dans différents langages : Lua, Python, Javascript. Mais il est aussi possible de le programmer en C++ comme on le ferait avec un Arduino.
C'est ce que je vais décrire dans cette page.

L'exercice se fera avec un ESP-12 NodeMCU qui a l'avantage de simplifier grandement les choses : il peut être alimenté directement par un câble micro USB qui permettra aussi de téléverser nos programmes et de les déboguer par les messages qu'on enverra sur leur sortie série. Comme son nom l'indique, 12 GPIO sont aussi disponibles. Tout ça pour un peu plus de 2€, que demander de plus (bon, ok, avec la possibilité d'y connecter une antenne externe, ca aurait été encore mieux )

Configuration de Linux

Système

Le NodeMCU apparaitra côté nunux comme un adaptateur USB -> Série à base de CH341 (et non CP120x comme on peut le voir parfois) : il faut donc vérifier que USB_SERIAL_CH341 est bien compilé dans notre kernel.

laurent@PSet ~ $ grep USB_SERIAL_CH341 /usr/src/linux/.config
CONFIG_USB_SERIAL_CH341=m

Question de Driver

CH341, CP120x, FDTI, ... il existe foison de convertisseurs USB/Série, mais le kernel donne généralement des indications. Par exemple, pour FT232R, il m'affiche.

May  5 11:38:30 mouai kernel: usb 7-1: New USB device found, idVendor=0403, idProduct=6001, bcdDevice= 6.00
May  5 11:38:30 mouai kernel: usb 7-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
May  5 11:38:30 mouai kernel: usb 7-1: Product: FT232R USB UART
May  5 11:38:30 mouai kernel: usb 7-1: Manufacturer: FTDI
May  5 11:38:30 mouai kernel: usb 7-1: SerialNumber: A50285BI

Le driver est ftdi_sio.

Si on ne veut pas s'embêter, la solution est de générer tous les drivers qui se trouvent dans "USB Serial Converter support" en tant que module, le kernel les chargera lorsque nécessaire.

Une fois connecté, il apparait en tant que ttyUSBx (où le x dépend évidemment du nombre d'autres adaptateurs du même genre présent sur la machine).

Oct  8 14:28:26 pset kernel: usb 3-2: new full-speed USB device number 3 using xhci_hcd
Oct 8 14:28:26 pset kernel: usb 3-2: New USB device found, idVendor=1a86, idProduct=7523
Oct 8 14:28:26 pset kernel: usb 3-2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
Oct 8 14:28:26 pset kernel: usb 3-2: Product: USB2.0-Serial
Oct 8 14:28:26 pset mtp-probe[5356]: checking bus 3, device 3: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-2"
Oct 8 14:28:26 pset mtp-probe[5356]: bus: 3, device: 3 was not an MTP device
Oct 8 14:28:26 pset kernel: usbcore: registered new interface driver ch341
Oct 8 14:28:26 pset kernel: usbserial: USB Serial support registered for ch341-uart
Oct 8 14:28:26 pset kernel: ch341 3-2:1.0: ch341-uart converter detected
Oct 8 14:28:26 pset kernel: usb 3-2: ch341-uart converter now attached to ttyUSB0
laurent@PSet ~ $ ls -l /dev/ttyUSB?
crw-rw---- 1 root uucp 188, 0 8 oct. 14:28 /dev/ttyUSB0

Pour y avoir accès, notre utilisateur doit faire partie du groupe uucp d'où un classique

usermod -a -G uucp laurent

(vous relogger pour que ce soit pris en compte).

Java

L'IDE arduino est (malheureusement) en Java qui doit être installée sur votre système. Il faut donc une machine avec pas mal de mémoire et un CPU véloce : ça swappe sur une de mes machines de teste avec seulement 1Go de RAM.

laurent@PSet ~ $ java -version
openjdk version "1.8.0_144"
OpenJDK Runtime Environment (IcedTea 3.5.1) (Gentoo icedtea-3.5.1)
OpenJDK 64-Bit Server VM (build 25.144-b01, mixed mode)

Installation de l'IDE

Téléchargez l'archive de l'IDE arduino depuis cette page puis décompressé la : chez moi, ça se fera dans /usr/local

Puis lancer le script install.sh (en tant que root) qui créera une entrée dans le menu électronique et liera les fichiers .ino avec cette IDE.

Configurons

Menu > Fichiers > Préférence : il faut indiquer à l'IDE où trouver les définitions de l'ESP (le cadre rouge).

http://arduino.esp8266.com/stable/package_esp8266com_index.json

L'éditeur interne est certes suffisant, il m'y manque cependant les raccourcis de Vim : c'est pourquoi, j'ai coché (en vert) "Editeur externe". Dans ce mode, l'interface passe en mode "lecture seule" et l'édition se fait directement dans le fichier projet.

Outils > Type de carte > Gestionnaire de carte : sélectionnez "esp8266" et installer ... patientez quelques minutes, minutes qui dépendront de la rapidité de votre ligne ADSL et de votre machine (ha, java).

Il ne reste plus qu'à sélectionner notre carte (NodeMCU 1.0 dans mon cas) et le port série virtuel dans outils > Ports. Si /dev/ttyUSB0 n'apparaît pas, c'est que le kernel n'est pas correctement configuré. On laisse la vitesse par défaut. Voilà, nous en avons fini.

Premier test

Sur les ESPs, les LEDs sont allumées lorsque le GPIO est au niveau bas.

L'interface affiche le squelette d'un programme pour Arduino, que l'on nomme Croquis en Français, ou Sketch dans la langue de Shakespeare.

Pour ceux qui ne connaissent pas, il s'agit d'un dérivé du C++, mais un peu déroutant, car il n'y a pas de main(), juste

Le menu Fichier > Exemples contient, ho surprise, des exemples de programmation. Nous choisissons Blink qui fera clignoter la LED incluse sur l'ESP.

Il y a visiblement plusieurs modèles d'ESP-12 : sur le mien, la LED est connectée sur le GPIO 2 et non le 15 tel que défini dans les includes. Il suffit de rajouter la ligne suivante pour que le programme fonctionne :

#define LED_BUILTIN 2

Téléversons par l'appuis sur le 2nd bouton en forme de flèche : le code se compile, l'IDE indique la place prise

Archiving built core (caching) in: /tmp/arduino_cache_599688/core/core_esp8266_esp8266_nodemcuv2_CpuFrequency_80,UploadSpeed_115200,FlashSize_4M3M_d9dc56dc5851248c94f446b80837086d.a
Le croquis utilise 222145 octets (21%) de l'espace de stockage de programmes. Le maximum est de 1044464 octets.
Les variables globales utilisent 31512 octets (38%) de mémoire dynamique, ce qui laisse 50408 octets pour les variables locales. Le maximum est de 81920 octets.

houlala, 21% juste pour faire clignoter une LED ???? Ben oui, n'oublions pas la place prise par les librairies standards. Mais il reste largement suffisamment de place pour faire des trucs sympa.

Puis il est téléversé en quelques secondes : la LED se met à clignoter.

Astuces diverses avec l'IDE

L'IDE ne contient qu'une petite partie des options qui peuvent être changées, d'autres peuvent être modifiées directement dans le fichier preferences.txt dont l'emplacement est indiqué en bas du popup de préférence (attention, il faut que l'IDE soit stoppée pour que les modifications soient prises en compte).
Voici quelques astuces qui me facilitent grandement la vie avec cette IDE.

Cette page évoluera donc en fonction de mes expérimentations .

Créer son propre include globale

L'IDE Arduino a une façon toute personnelle de gérer les includes : ainsi, si l'on souhaite créer un fichier Maison.h qui pourra être utilisé par tous les projets ... il faut lui créer une librairie .

C'est bien entendu un peu stupide, voir même chiant lorsqu'on en a beaucoup ... mais visiblement, il n'y a pas le choix. Enfin, jusqu'à ce que mécanisme change à nouveau ...

Eviter que les tabulations soient remplacées par des espaces

Remplacez true par false dans la ligne

editor.tabs.expand=

Visitez :
La liste de nos voyages
Nos sorties Ski et rando
Copyright Laurent Faillie 2001-2024
N'oubliez pas d'entrer le mot de passe pour voir aussi les photos perso.
Contactez moi si vous souhaitez réutiliser ces photos et pour les obtenir avec une plus grande résolution.
Visites durant les 7 derniers jours Nombre de visites au total.

Vous pouvez laissez un commentaire sur cette page.