Zigduino et module Ethernet 2

Posted on July 3, 2018

Le monde d’Arduino est merveilleux, avec des gens gentils qui répondent à toutes vos questions, avec un site où tout est bien écrit comme il faut, où tout est à jour et quoi que vous souhaitiez faire devient simple grâce aux fabuleuses documentations en ligne !

… c’est ce que j’aurais aimé me dire en démarrant mon petit projet, mais on est loin de la réalité.

J’ai un Zigduino, un module “Ethernet Shield 2”, et un mal fou pour faire fonctionner tout ça, donc voici un récapitulatif de ce qu’il faut faire pour réussir à lancer ne serait-ce que les sketchs d’exemple.

En premier, on télécharge les bibliothèques arduino ainsi que les fichiers zigduino (pour indiquer des paramètres liés à cette plateforme spécifique, les pins, etc).

zigduinopath=~/zigduino
arduinopath=~/arduino

git clone https://github.com/logos-electromechanical/Zigduino-1.0 $zigduinopath
wget https://downloads.arduino.cc/arduino-1.8.5-linux64.tar.xz && tar xf arduino-1.8.5-linux64.tar.xz && mv arduino-1.8.5 $arduinopath

# on n'a plus besoin de ce fichier là, on va le remplacer
mv $arduinopath/hardware/arduino/avr/boards.txt $arduinopath/hardware/arduino/avr/boards.txt.000

# série de lien symboliques pour indiquer à Arduino qu'on gère une autre plateforme
ln -s $zigduinopath/hardware/arduino/cores/zigduino        $arduinopath/hardware/arduino/avr/cores/
ln -s $zigduinopath/hardware/arduino/boards.txt            $arduinopath/hardware/arduino/avr/
ln -s $zigduinopath/hardware/arduino/variants/zigduino_r2/ $arduinopath/hardware/arduino/avr/variants/

Maintenant nous avons les fichiers Arduino (avec les bibliothèques) et les fichiers liés à la plateforme Zigduino, il nous faut les fichiers spécifiques pour le module Ethernet 2. Oui hein, bien que ça fasse des années que le module est sorti (aux alentours de 2015?), ils allaient pas l’inclure dans les bibliothèques fournies de base !

git clone https://github.com/adafruit/Ethernet2.git $arduinopath/librairies/

Fantastique. Maintenant on s’occupe de compiler nos programmes, et les makefile sont faits pour ça. Il existe un makefile parfait pour gérer les projets Arduino : Arduino mk.

arduinomk=~/arduinomk
git clone git@github.com:sudar/Arduino-Makefile.git $arduinomk

Pour finir, il faut indiquer dans les makefile de nos projets qu’il faut les étendre avec le makefile d’Arduino, et indiquer quelques paramètres comme la plateforme à utiliser, où se trouvent les bibliothèques et quelles sont les bibliothèques que nous souhaitons inclure, où se trouvent les bibliothèques de l’utilisateur, etc. Donc nous allons au plus simple :

ARDMK_DIR		= ~/arduinomk
ARDUINO_DIR		= ~/arduino
AVR_TOOLS_DIR		= $(ARDUINO_DIR)/hardware/tools/avr

USER_LIB_PATH		= $(realpath ../../libraries) # all my libs here

TARGET			= .

#### For Zigduino r2 platform and 802.15.4
BOARD_TAG		= zigduino_r2
ARDUINO_CORE_PATH	= $(ARDUINO_DIR)/hardware/arduino/avr/cores/zigduino
MONITOR_PORT		?= /dev/ttyUSB0
ARDUINO_LIBS		= SPI Ethernet2 # and yours ;)

include $(ARDMK_DIR)/Arduino.mk

CPPFLAGS		+= -Wall -std=c++11
CPPFLAGS		+= -D__ARDUINO_BUILD
CPPFLAGS		+= -U__PROG_TYPES_COMPAT__

testcflags:
	echo $(CPPFLAGS)

test : all upload monitor

retest: reset monitor

Et voilà, vous pouvez compiler… et voir qu’il y a deux belles erreurs, liées aux fichiers Zigduino qui n’ont pas tout ce qu’il faut. Déjà, il faut créer une fonction inutile (fonction yield totalement vide) histoire que la compilation se fasse bien.

Fichier $arduinopath/hardware/arduino/cores/zigduino/Arduino.h

void yield (void);

Fichier $arduinopath/hardware/arduino/cores/zigduino/Arduino.cpp

void yield (void) {}

Voilà voilà voilà… et on va dé-commenter une ligne dans le fichier $arduinopath/hardware/arduino/variants/zigduino_r2/pins_arduino.h, voici un petit diff :

-/*const static uint8_t SS   = 10*/
+const static uint8_t SS   = 10;

Comme on peut le voir, c’est une ligne qui existait déjà, mais que les développeurs ont cru bon de commenter… et pour finir il faut remplacer Ethernet.h par Ethernet2.h et EthernetUdp.h par EthernetUdp2.h dans nos programmes et voilà, on peut compiler nos fichiers d’exemple ! Youhou !

Tags: zigduino, arduino