Bidouiller un appareil photo numérique Canon A720IS avec CHDK sous GNU/Linux

Version française de l'article Hacking a Canon A720IS numeric camera with CHDK on GNU/Linux, paru dans la Gazette Linux numéro 154 de septembre 2008

Adaptation française: Renaud Flavigny

Relecture de la version française: Deny

Résumé

Tout ceci a commencé avec un article de Slashdot qui décrivait les possibilités étonnantes de CHDK (Canon Hacking Development Kit). Cet article ralluma la flamme de mon ambition d'acheter un appareil photo et d'explorer pleinement son potentiel. Je me suis décidé pour un Canon A720IS qui supporte CHDK. Dans cet article, je voudrais vous faire partager le travail fait pour compiler CHDK sous GNU/Linux, l'installer et examiner ses capacités de script.


Table des matières

Procédure d'installation
Écrire des scripts
Référence

Procédure d'installation

J'ai téléchargé les derniers sources de CHDK depuis son référentiel SVN dans un répertoire chdk de mon répertoire personnel :

cd chdk
svn co https://tools.assembla.com/svn/chdk/trunk

Puisque CHDK s'exécute sur une plate-forme différente de celle où il est compilé, nous avons besoin d'un compilateur croisé. Pour cela, j'ai téléchargé binutils (version 2.17) et le compilateur GCC (version 3.4.6) ; j'ai ensuite créé un répertoire nommé arm-elf et un répertoire nommé chdk_cross_compiler dans mon répertoire personnel, j'ai ensuite désarchivé binutils et GCC dans ce dernier.

Compiler binutils nécessite les étapes suivantes :

  1. cd ~/chdk_cross_compiler/binutils-2.17

  2. ./configure --srcdir=../binutils-2.17 --target=arm-elf --prefix=${HOME}/arm-elf

  3. make

  4. make install

Ensuite, j'ai ajouté ~/arm-elf/bin à mon chemin d'accès (PATH)

export PATH=${HOME}/arm-elf/bin:${PATH}

Maintenant, compilons GCC

cd ~/chdk_cross_compiler/gcc-3.4.6

Ensuite, j'applique une retouche correctif depuis chdk, qui se situe dans ~/chdk/trunk/tools/patches/gcc-3.4-arm.diff

   patch -p0 < ~/chdk/trunk/tools/patches/gcc-3.4-arm.diff

À présent, je crée un répertoire nommé gcc-3.4.6-arm-elf dans ~/chdk_cross_compiler et je construis GCC de sorte qu'il compile pour le processeur ARM en tant que cible par défaut:

cd /home/sujith/chdk_cross_compiler/gcc-3.4.6-arm-elf
../gcc-3.4.6/configure --srcdir=../gcc-3.4.6 --target=arm-elf \
    --enable-multilib --enable-languages=c --enable-clocale=gnu \
    --disable-libm --disable-libc --disable-threads \
    --disable-nls --disable-libssp --disable-intl --disable-libiberty \
    --with-cpu=arm9 --with-newlib --prefix=${HOME}/arm-elf
unset LIBRARY_PATH 
unset CFLAGS
make
make install

Maintenant que le compilateur croisé est prêt, il est temps de compiler CHDK

cd ~/chdk/trunk

Puisque mon appareil photo est un Canon A720IS, j'ai décommenté les deux lignes du fichier makefile.inc

PLATFORM=a720
PLATFORMSUB=100c

et je le compile avec

make fir

Cela crée un fichier DISKBOOT.BIN dans mon répertoire ~/chdk/trunk/bin, que j'ai dû copier sur la carte mémoire de l'appareil photo. Pour cela j'ai dû formater la carte SD en FAT-16 avec la commande suivante :

mkdosfs -F 16

L'étape finale consiste à rendre la carte bootable en modifiant la partition FAT. J'ai fait cela avec hexedit (assurez-vous que la carte SD n'est pas montée avant d'exécuter la commande). Avant de faire ça, cependant, nous devons trouver quel périphérique était monté en utilisant la commande mount ; pour moi, c'était /dev/sda1

umount /dev/sda1
hexedit /dev/sda1

Dans hexedit, je suis passé en mode ASCII et j'ai écrit BOOTDISK à l'offset 0x40 ; ensuite j'ai remonté la carte et j'ai copié le fichier DISKBOOT.BIN dans le réperoire racine de la carte SD ; j'ai verrouillé la carte en écriture (il y a un petit bouton de verrouillage sur la carte elle-même) et j'ai inséré la carte dans l'appareil photo. L'appareil photo a démarré sur le CHDK et a affiché un message montrant le niveau de micro-programme de CHDK. J'étais maintenant l'heureux propriétaire d'un appareil photo motorisé par CHDK. Je trouve intéressant, toutefois, que, bien que la carte soit verrouillée en écriture, les photos sont toujours écrites dessus.

Maintenant, allumer l'appareil photo en mode alternatif et presser le bouton Menu (mon appareil photo a un bouton Menu, ça peut être différent pour d'autres modèles) affiche les options de CHDK : Jouer à un jeu, Charger un fichier, Image Raw, Histogrammes, etc.

Écrire des scripts

Il y a un petit interpréteur avec CHDK appelé UBasic. Commençons avec un script «  Bonjour tout le monde  ». Les noms de fichier doivent avoir une extension .bas (par exemple file1.bas)

@title Hello World
print "Hello World" 

Ici @title fait référence au titre du programme, s'il n'est pas fourni, le nom de fichier sera créé par CHDK. Copiez le programme dans le répertoire chdk/scripts sur la carte SD et chargez-le. Sur mon appareil photo, je dois presser le déclencheur pour exécuter le script. Vous pouvez voir la sortie sur l'écran :

Pour faire clignoter le voyant DEL orange de mon appareil photo, j'ai écrit le code suivant :

for n=1 to 5
    print "Led blink ",n
    gosub "ledblink"
next n
		     
:ledblink
set_led 7 1 60
sleep 1000
set_led 7 0
set_led 8 1 60
sleep 1000
set_led 8 0
return 

gosub est utilisé pour aller à une sous-routine ; ici la sous-routine est ledlink. set_led est l'instruction qui permet d'allumer et d'éteindre la DEL, 7 est l'argument pour la DEL orange. De la même façon, 8 désigne la DEL bleue.

La DEL bleue est allumée :

Pour prendre des photos à un intervalle moyen de 5 secondes, j'ai écrit ce petit bout de code :

for n=1 to 6
    sleep 5000
    print "shoot ",n, "of ",6
    shoot
next n

Pour mettre l'appareil photo en mode 'raw', utilisez l'instruction set_raw. Le code peut être utilisé pour mettre la caméra en mode 'raw' puis prendre une photo.

set_raw 1
sleep 1000
shoot
sleep 1000
set_raw 0

Vous pouvez vérifier la tension de la batterie avec le code suivant ; la tension est exprimée en millivolts.

for n=1 to 10
    a=get_vbatt
    print "The V is ",a/1000, "V"
    print "The V is ",a, "mV"
    sleep 9000
    a=0
next n

Voici quelques unes des bidouilles que j'ai faites en utilisant GNU/Linux et mon appareil photo Canon. Si vous êtes prêt à faire des expériences avec votre appareil photo compatible avec CHDK, allez-y, c'est le moment. Un avertissement amical : ces bidouilles ne sont pas pour les cardiaques !

Référence

Le Wiki CHDK m'a été trés utile lors de mes bidouilles et pour l'écriture de cet article. Vous pourrez le consulter ici

Sujith H. : J'ai rejoint la communauté du logiciel libre il y a cinq ans et j'ai toujours apprécié la liberté apportée par les logiciels libres. Je remercie mon gourou M. pradmode C.E. de m'avoir présenté dans la communauté du logiciel libre. J'ai terminé mon B. Tech au Government Engineering College Palakkad (Kerala, India). Je travaille chez ElinaNetworks Ltd., Bangalore comme ingénieur R&D. Mon blog est à http://sujith-h.livejournal.com. Mes centres d'intérêts comprennent Python et le C.

Adaptation française de la Gazette Linux

L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux.

Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site : http://www.traduc.org/Gazette_Linux.

Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.