Dans ce tutoriel, je vais vous montrer comment programmer un AVR (ATmega328) et un Arduino UNO en utilisant le GPIO sur le Raspberry Pi.
L’ajout d’un Arduino ou d’un AVR à vos projets vous donnera beaucoup plus de flexibilité.
L’image ci-dessous montre comment connecter un Raspberry Pi 2 et un Arduino UNO. cliquez sur l’image pour l’agrandir
L’image ci-dessous montre comment connecter un ATmega328 (package DIP) à un Raspberry Pi 2. cliquez sur l’image pour l’agrandir
Installer avrdude
Une fois vos appareils connectés, il est temps d’installer avrude. Avrdude est un programmeur AVR pour Linux, ce qui nous permet d’utiliser les broches GPIO du Raspberry Pi pour programmer un AVR ou un Arduino.
Vous devez d’abord installer quelques prérequis
pi@raspberrypi ~ $ sudo apt-get mise à jour
pi@raspberrypi ~ $ sudo apt-get install bison flex -y
Installez maintenant avrdude à partir des sources ;
pi@raspberrypi ~ $ wget http://download.savannah.gnu.org/releases/avrdude/avrdude-6.2.tar.gz
pi@raspberrypi ~ $ tar xfv avrdude-6.2.tar.gz
pi@raspberrypi ~ $ cd avrdude-6.2/
Activez linuxgpio dans les sources avrdude, créez puis installez ;
pi@raspberrypi avrdude-6.2/~ $ ./configure – -enable-linuxgpio
pi@raspberrypi avrdude-6.2/~ $ make
pi@raspberrypi avrdude-6.2/~ $ sudo make install
Non, nous devons dire à avrdude d’utiliser le GPIO et nous devons lui faire savoir quelles broches GPIO utiliser. Cela peut être fait en éditant le fichier de configuration ;
pi@raspberrypi avrdude-6.2/~ $ sudo nano /usr/local/etc/avrdude.conf
Recherchez « linuxgpio » et vous devriez voir cette section ;
#programmer # id = "linuxgpio"; # desc = "Use the Linux sysfs interface to bitbang GPIO lines"; # type = "linuxgpio"; # reset = ?; # sck = ?; # mosi = ?; # miso = ?; #;
Et changez-le en ceci;
programmer id = "linuxgpio"; desc = "Use the Linux sysfs interface to bitbang GPIO lines"; type = "linuxgpio"; reset = 4; sck = 11; mosi = 10; miso = 9; ;
Si tout est correctement connecté, vous devriez maintenant être sur le point de communiquer entre le Raspberry Pi et Arduino/AVR.
Le temps d’un test rapide ;
pi@raspberrypi avrdude-6.2/~ $ sudo avrdude -c linuxgpio -p atmega328p -v
-c Spécifiez le type de programmeur
-p Numéro d’article. Utilisez atmega328p pour l’Arduino UNO
-v Sortie verbeuse
Ci-dessous est d’un test réussi;
avrdude: Version 6.2, compiled on Mar 9 2016 at 11:41:53 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2014 Joerg Wunsch System wide configuration file is "/usr/local/etc/avrdude.conf" User configuration file is "/root/.avrduderc" User configuration file does not exist or is not a regular file, skipping Using Port : unknown Using Programmer : linuxgpio AVR Part : ATmega328P Chip Erase delay : 9000 us PAGEL : PD7 BS2 : PC2 RESET disposition : dedicated RETRY pulse : SCK serial program mode : yes parallel program mode : yes Timeout : 200 StabDelay : 100 CmdexeDelay : 25 SyncLoops : 32 ByteDelay : 0 PollIndex : 3 PollValue : 0x53 Memory Detail : Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00 signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00 Programmer Type : linuxgpio Description : Use the Linux sysfs interface to bitbang GPIO lines Pin assignment : /sys/class/gpio/gpio{n} RESET = 4 SCK = 11 MOSI = 10 MISO = 9 avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0x1e950f (probably m328p) avrdude: safemode: hfuse reads as DE avrdude: safemode: efuse reads as FD avrdude: safemode: hfuse reads as DE avrdude: safemode: efuse reads as FD avrdude: safemode: Fuses OK (E:FD, H:DE, L:FF) avrdude done. Thank you.
Il est temps de télécharger notre premier croquis.
Tout d’abord, installez l’IDE Arduino ;
pi@raspberrypi ~ $ sudo apt-get install arduino
Ouvrez l’IDE Arduino, puis nous devons apporter une modification avant de faire quoi que ce soit d’autre. Allez le Déposer menu et sélectionnez Préférences. Dans la boîte de dialogue des préférences, cochez la case « Afficher la sortie détaillée lors de la compilation »
Nous pouvons maintenant charger l’esquisse Blink à partir du dossier des exemples. Cela fera clignoter la LED sur la broche 13.
Compilez maintenant le croquis.
Comme nous avons activé la sortie détaillée, nous pouvons maintenant voir ce que fait l’IDE lorsqu’il compile et où il place les fichiers.
Le fichier que nous devons télécharger sur l’Arduino/AVR est le .hex fichier, je l’ai souligné dans l’exemple ci-dessous.
Nous utiliserons avrdude pour télécharger le fichier ;
pi@raspberrypi ~ $ sudo avrdude -c linuxgpio -p atmega328p -v -U flash:w:/tmp/build1387616020539064052.tmp/Blink.cpp.hex:i
Vous pouvez créer et compiler des croquis sans l’IDE Arduino en utilisant le Arduino Make fichier. Cela vous permet de modifier le code dans votre éditeur de texte préféré et la compilation est beaucoup plus rapide. C’est la méthode que j’utilise.
Vous devez toujours installer l’IDE Arduino comme indiqué ci-dessus.
Installer le makefile Arduino
pi@raspberrypi ~ $ sudo apt-get install arduino-mk
Nous allons maintenant créer un autre exemple de clignotement, mais nous utiliserons l’arduino Makefile pour compiler notre code.
pi@raspberrypi ~ $ mkdir clignoter
pi@raspberrypi ~ $ cd clignoter
pi@raspberrypi blink/~ $ nano blink.ino
Copiez l’intégralité du contenu de l’exemple blink.ino.
Nous devons maintenant créer un Makefile qui référencera le Makefile Arduino.
pi@raspberrypi blink/~ $ nano Makefile
Et ajouter
include /usr/share/arduino/Arduino.mk
Compilez ensuite l’exemple blink.ino
pi@raspberrypi blink/~ $ make
Make va créer un autre dossier appelé build-uno C’est là qu’il place le fichier .hex que nous devons télécharger sur l’Arduino/AVR.
Pour télécharger ce fichier hexadécimal ;
pi@raspberrypi blink/~ $ sudo avrdude -c linuxgpio -p atmega328p -v -U flash:w:build-uno/blink.hex:i
J’ai mis les commandes make et avrdude sur une seule ligne, afin qu’il compile le code, puis qu’il se télécharge tout de suite.
pi@raspberrypi blink/~ $ make && sudo avrdude -c linuxgpio -p atmega328p -v -U flash:w:build-uno/blink.hex:i
Vous remarquerez qu’il s’agit par défaut de la carte UNO. Cela peut être modifié dans le Makefile que nous avons créé. Ici, vous entreriez quelque chose de différent des valeurs par défaut.
Le fichier make ci-dessous serait utilisé pour un ATmega1284p fonctionnant à 20Mhz
MCU = atmega1284p F_CPU=20000000L include /usr/share/arduino/Arduino.mk
Lisez /usr/share/arduino/Arduino.mk pour d’autres options qui peuvent être définies. Le dossier est très bien documenté.
Les références
Compiler des croquis Arduino à l’aide de Makefile
Arduino Makefile sur github
Makefile Arduino sur Hackaday.com
Arduino depuis la ligne de commande #1
Arduino depuis la ligne de commande #2