platerformIO est un IDE2) qui permet de programmer de nombreuses cartes à microcontrôleurs et autres bêtes à poils raz.
On peut simplement installer le coeur du système platformIOCore, qui fournit des outils en ligne de commande pour simplifier les transferts et autres opérations vers les microcontôleurs.
C'est un programme en Python 2.7, non packagé pour Debian. Comme il utilise quelques modules dans des versions différentes de celles de Debian Stretch, on va utiliser un Environnement virtuel pour bien séparer tout ça, et l'installer via pip
.
On verra ensuite3) pour l'intégration dans ce script dans un éditeur de texte, vim par exemple, puisque il fait parti de ceux supportés.
Si vous ne l'avez pas encore, installons virtualenv
apt install python-virtualenv
On peut ensuite créer l'environnement virtuel dans l'emplacement de votre choix (~/prog/arduino
par exemple), en demandant l'utilisation des bibliothèques systèmes avec l'option –system-site-packages
. Ainsi, seront installées par pip
seulement celles qui sont nécessaires. Ce n'est pas un obligation ceci-dit.
mkdir -p ~/prog/arduino cd ~/prog/arduino virtualenv platformio --system-site-packages
On peut ensuite activer l'environnement virtuel, *avant d'installer platformIO
*.
source platformio/bin/activate cd platformio
On voit apparaître le nom de l'environnement avant le prompt lorsqu'il est activé. Dans notre cas, le prompt va ressembler à ça
(platformio) user@host:~/prog/arduino/platformio
pip-install platformio
Afin que le système sache quoi faire avec les cartes lorsqu'elles sont branchées en USB, il faut installer des règles UDEV. Pour ce faire, il suffit de télécharger ce fichier
# Copyright (c) 2014-present PlatformIO <contact@platformio.org> # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # INSTALLATION # # UDEV Rules for PlatformIO supported boards, http://platformio.org/boards # # The latest version of this file may be found at: # https://github.com/platformio/platformio-core/blob/develop/scripts/99-platformio-udev.rules # # This file must be placed at: # /etc/udev/rules.d/99-platformio-udev.rules (preferred location) # or # /lib/udev/rules.d/99-platformio-udev.rules (req'd on some broken systems) # # To install, type this command in a terminal: # sudo cp 99-platformio-udev.rules /etc/udev/rules.d/99-platformio-udev.rules # # Restart "udev" management tool: # sudo service udev restart # or # sudo udevadm control --reload-rules # sudo udevadm trigger # # Ubuntu/Debian users may need to add own “username” to the “dialout” group if # they are not “root”, doing this issuing a # sudo usermod -a -G dialout $USER # sudo usermod -a -G plugdev $USER # # After this file is installed, physically unplug and reconnect your board. # CP210X USB UART SUBSYSTEMS=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0666" # FT232R USB UART SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE:="0666" # Prolific Technology, Inc. PL2303 Serial Port SUBSYSTEMS=="usb", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", MODE:="0666" # QinHeng Electronics HL-340 USB-Serial adapter SUBSYSTEMS=="usb", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0666" # Arduino boards SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="[08][02]*", MODE:="0666" SUBSYSTEMS=="usb", ATTRS{idVendor}=="2a03", ATTRS{idProduct}=="[08][02]*", MODE:="0666" # Arduino SAM-BA ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", ENV{ID_MM_DEVICE_IGNORE}="1" ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", ENV{MTP_NO_PROBE}="1" SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", MODE:="0666" KERNEL=="ttyACM*", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", MODE:="0666" # Digistump boards SUBSYSTEMS=="usb", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666" KERNEL=="ttyACM*", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666", ENV{ID_MM_DEVICE_IGNORE}="1" # STM32 discovery boards, with onboard st/linkv2 SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374?", MODE:="0666" # USBtiny SUBSYSTEMS=="usb", ATTRS{idProduct}=="0c9f", ATTRS{idVendor}=="1781", MODE="0666" # USBasp V2.0 SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", MODE:="0666" # Teensy boards ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789]?", ENV{ID_MM_DEVICE_IGNORE}="1" ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789]?", ENV{MTP_NO_PROBE}="1" SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789]?", MODE:="0666" KERNEL=="ttyACM*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789]?", MODE:="0666" #TI Stellaris Launchpad SUBSYSTEMS=="usb", ATTRS{idVendor}=="1cbe", ATTRS{idProduct}=="00fd", MODE="0666" #TI MSP430 Launchpad SUBSYSTEMS=="usb", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="f432", MODE="0666" # CMSIS-DAP compatible adapters ATTRS{product}=="*CMSIS-DAP*", MODE="664", GROUP="plugdev" # Black Magic Probe SUBSYSTEM=="tty", ATTRS{interface}=="Black Magic GDB Server" SUBSYSTEM=="tty", ATTRS{interface}=="Black Magic UART Port"
Recharger ensuite les règles
service udev restart # ou udevadm control --reload-rules udevadm trigger
Pour qu'il soit possible d'utiliser les ports série sans être root.
adduser $USER dialout
On peut faire beaucoup de chose avec ce programme. On va prendre un simple petit exemple : charger l'exemple blink
sur un Arduino Uno (c'est largement inspiré de la doc officielle )
Dans notre cas, il va toujours falloir se trouver dans notre environnement virtuel. Un petit rappel pour l'activer
source ~/prog/arduino/platformio/bin/activate
Commençons par créer un dossier qui va accueillir notre projet
mkdir -p ~/prog/arduino/platformio/blink cd blink
On lance ensuite une commande qui va créer la structure du projet
platformio init --board uno
Copions simplement l'exemple blink
qui va faire clignoter la LED intégrée raccordée au pin 13 dans le dossier src
créé par la commande précédente
void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second }
cd src
Il ne reste plus qu'a compiler et téléverser dans l'Arduino raccordé en USB
platformio run --target upload
Lors de la première utilisation, platformio
télécharge les différents outils nécessaire (avrdude
par exemple). Cela ne sera plus le cas ensuite.
Certains microcontrolleurs AVR nécessite l'utilisation d'un programmateur spécial. C'est intégré dans la définition des cartes, mais il faut lancer la commande avec l'option indiquant d'utiliser ce programmateur. Ce n'est donc plus upload
mais program
platformio run --target program
On peut ouvrir un moniteur série avec la commande platformio device monitor
. Cette commande dispose de différentes options. Par exemple, pour obtenir un comportement se rapprochant de la console série de l'IDE Arduino
platformio device monitor --echo --eol LF
--- Miniterm on /dev/ttyACM0 9600,8,N,1 --- --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
Et voilà, vous pouvez utiliser un Arduino sans l'IDE Arduino