Développer un programme Arduino sans Arduino IDE
Bon, j'ai quelques bricolages à faire avec mon arduino, comme je suis un expert pro gamer master en C++ ça va aller vite. En plus j'ai récemment réappris à coder des Makefile, super. Je pensais que développer un petit code et le mettre sur mon arduino se ferait sans soucis, mais à priori non, ils ont quand même rendu le truc un peu compliqué sans l'IDE. Mon objectif est quand même de m'en passer, leur IDE est vraiment pourri et mes raccourcis vont trop me manquer.
Installer les outils de compilation et les librairies du développement
On peut trouver les librairies à jour sur le site d'Arduino. Mais ils ont aussi eu le bon goût de créer un paquet Debian. Personnellement je préfère cette approche, même si ça implique d'avoir quelques versions de retard, m'en fous, je suis pas dans la team Arch.
apt install arduino-core arduino-mk
On va retrouver les librairies dans /usr/share/arduino (à confirmer avec un coup de dpkg -L arduino-core
).
Écriture du code the makefile
On peut écrire un hello world Arduino, le code est disponible sur n'importe quel site. Petite arnaque, votre code doit être suffixé avec un .ino, sinon le Makefile de défaut fourni va planter, puisqu'il ne va pas chercher les headers et faire le linkage correctement.
void setup() { pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); }
Makefile associé :
BOARD_TAG = atmega328 ARDUINO_PORT = /dev/ttyUSB0 ARDUINO_DIR = /usr/share/arduino ARDMK_DIR = /usr/share/arduino AVR_TOOLS_DIR = /usr/share/arduino/hardware/tools/avr ARDUINO_LIBS = SoftwareSerial include /usr/share/arduino/Arduino.mk
Assurez vous de remplacer le ARDUINO_PORT
par le fichier de block que
va créer votre OS. En général c'est celui là.
Si vous n'avez pas une board arduino conventionnelle, changez le
BOARD_TAG
pour mettre le processeur du votre.
Pour build :
make
Pour uploader le programme :
sudo make upload
Communiquer avec le serial
Ça peut être pratique de communiquer en série avec la carte, pour déboguer par exemple. Il faut commencer par appliquer les bon paramètres au port, puis minicom permet de lire :
stty -F /dev/ttyUSB0 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts minicom -b 9600 -D /dev/ttyUSB0
Installer firmata
J'ai besoin d'utiliser la lib firmata.
Je récupére le .ino dans /usr/share/arduino/librairies/Firmata/examples/StandardFirmata/StandardFirmata.ino
J'ai écris un makefile avec Servo, Wire et Firmata comme librairies.
Attention les exemplesde code fournies dans la doc ne fonctionnent que si on utilise l'IDE arduino car il rajoute à la volée les headers des fonctions, il faut rajouter les headers des fonctions définies après être appelés.