nimag42 J'écris des trucs ici.
15 janv. 2019

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.

Mes billets archivés