Détection de pollution maritime avec GNU/Linux Eric Bénard - eric@eukrea.com - 08 juillet 2010
Conception de produits électroniques intégrant des logiciels libres : u-boot, barebox, linux Développement de BSP & drivers Transfert de compétences Linux embarqué 2/26 Fabricant de modules processeurs intégrés Effort d'intégration du support de nos cartes dans les sources officielles (mainlining) : u-boot, barebox, linux Sponsor et développeur OpenEmbedded
Laboratoire UMR 5805 EPOC CNRS Environnements et Paléoenvironnements OCéaniques GEMA Arcachon: 11 chercheurs et enseignants-chercheurs, 4 techniciens, 8 thésards. Un but, étudier les fonctionnements et les dysfonctionnements dans les écosystèmes aquatiques face aux contaminants principalement métalliques. Quatre spécialités majeures soutenues par 4 plateaux techniques forts. 3/26
Valvométrie Utilisation de bi-valves comme capteurs : 4/26 filtrent l'eau très sensibles à la modification de la qualité de l'eau comportement de référence en milieu non contaminé vs comportement réel = détection de modifications de la qualité de l'eau
Le principe général Développé par le GEMA 5/26
L'architecture électronique Ethernet USB SDCard 4Go 8Mo Flash ARM920T 16D TRIG ADC 16 bits 32Mo RAM Modem GPRS Trigger = timer hardware du CPU Fin de conversion ADC = IRQ directe à priorité élevée ~ 100ms temps de conversion = temps max de réponse à l'irq Conditionnement analogique Trigger V Data RDY Lecture valeur 6/26
L'intégration Boîtier au maximum étanche + électronique plongée dans l'huile = protection vis à vis d'une éventuelle fuite d'eau. 7/26
L'architecture logicielle Gestion de l'acquisition dans le noyau : Driver de configuration du timer hardware Driver d'acquisition de la mesure Gestionnaire d'interruption Méthode read Utilisation de kfifo 8/26 cf include/linux/kfifo.h
Applications 9/26 busybox, dropbear, pppd, zlib Gestion d'un fichier de configuration Acquisition Données environnementales Watchdog Gestion modem Gestion transfert de fichiers
Gestion d'un fichier de configuration Librairie de gestion de fichier de configuration : À partir de Libconfig, GPL, POSIX, C, C++ http://www.hyperrealm.com/main.php?s=libconfig version = "1.0"; reseau : { srv1_ip = ""; srv1_login = ""; srv1_pass = ""; srv1_port = 21; srv1_path = ""; srv_ntp = "pool.ntp.org"; srv_ntp2 = ""; txip_periode = 10; gsm_pin = "0000"; }; 10/26 alertes : { bat_100 = 12; bat_50 = 11; bat_25 = 10; bat_0 = 9; bat_100_act = true; bat_50_act = true; bat_25_act = true; bat_0_act = true; sd_free = 128; sd_act = true; }; acquisition : { std_periode = 10; debut_hh = 0; debut_mm = 0; debut_ss = 0; duree_hh = 24; duree_mm = 0; duree_ss = 0; v_act = [ true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true ]; };
Acquisition fifo de commande : 11/26 Modification du comportement thread d'acquisition : Poll sur le device du driver d'acquisition Récupération des données Stockage dans un fichier
Données environnementales 12/26 Température, niveau de tension de la batterie Lecture directe sur un ADC I2C au travers de i2cdev : cf linux-2.6/documentation/i2c/dev-interface ouverture du fichier /dev/i2c-0 ioctl pour configurer l'adresse du périphérique read et/ou write close Ex : niveau batterie
Watchdog 1 watchdog hardware, plusieurs raisons de le faire claquer... 1 daemon qui gère le watchdog : 13/26 open /dev/watchdog boucle ioctl WDIOC_KEEPALIVE, test des conditions Attention : option noyau WATCHDOG_NOWAYOUT
Gestion modem ON/OFF par une GPIO et donc un driver qui gère cette GPIO Séquence d'init et lancement de pppd Envoi de l'ip sur un serveur FTP Boucle de vérification de la connectivité 14/26 Appelle un script qui fera la vérification périodiquement
Gestion transfert de fichiers FTP : libcurl http://curl.haxx.se/libcurl/ API «Easy» permettant de faire un client ftp avec retry et/ou append en quelques lignes Retry : Append : 15/26 Pour les fichiers de données (1 à 2 Mo / jour) Pour les fichiers ascii (permet d'avoir un historique des connexions / déconnexions)
Le liant entre les applications Quelques scripts shell : cron.sh : fmonitor.sh : 16/26 envoie les séquences de commande dans la fifo du logiciel d'acquisition crontab généré à la volée à partir du fichier de conf Utilise inotifywait -e close_write /mnt/mmc http://wiki.github.com/rvoicilas/inotify-tools/ Bloque jusqu'à ce qu'un fichier soit fermé dans /mnt/mmc Compresse le fichier et l'envoie avec son md5sum
Les roues de secours Le garbage collector : 17/26 Parce que des fichiers peuvent ne pas avoir été transmis intégralement liste les fichiers non transmis et retente l'envoi Le status du système : Envoi des infos par ftp Exécuté par cron toute les 12 heures
Le logiciel de configuration 18/26 multiplateforme, en GTK
Au final 19/26 Un système assez simple à maintenir car constitué de scripts et applications aux fonctionnalités bien identifiées L'utilisation d'outils et de librairies réputés stables permet d'augmenter la fiabilité du système en se concentrant sur les points métiers clefs (ici la gestion de l'acquisition)
Résultats Arcachon : IORO : Fonctionne depuis 2007 A fonctionné de 08/2007 à 02/2009, la maintenance préventive de 2009 lui a été fatale Marenne : Système modifié car antenne immergée : ne devait émettre que pendant les marées basses. 20/26 web annuaire des marées script crontab A fonctionné pendant 2 saisons Dataloger : Sans émission, stockage sur carte SDCard
Les huîtres à Arcachon La 7 a été remplacée le 03/06 : noter la différence de comportement le 04/06 liée à l'acclimatation dans son nouvel environnement. Une semaine plus tard, tout va bien! Huître 6 le 04/06/2010 Huître 6 le 11/06/2010 Huître 7 le 04/06/2010 Huître 7 le 11/06/2010 21/26
Les bénitiers à Ioro (NC) Ouverts lorsqu'ils reçoivent le soleil, fermés le reste du temps. 22/26
Difficultés Electronique immergée dans l'huile Modem GPRS qui exécute du code (proprio) A la fâcheuse tendance de ne pas répondre à sa pin reset nécessite un power cycle Dérive de l'horloge 23/26 Un fusible 0.5 A est passé à 0.05 A au bout de 1 an moins pratique pour faire du GPRS! Resynchro NTP régulière
Difficultés Vérification de la connectivité ping souvent bloqué test par wget Prise de contrôle à distance par SSH réseau opérateur routable Ports < 1024 bloqués Pas de gsmmux 24/26 Pas de gestion du modem lorsque PPP est lancé
Perspectives En 2010 : projet valvomètre v2 soutenu par la région Aquitaine 2 cartes organisées différemment : Consommation totale moyenne sur 24h : 25/26 n «au fond» : analogique + acquisition et transfert par bus CAN (sur base micro-contrôleur ARM Cortex M3) une «en haut» : sur base module CPUIMX25 (ARM926EJ-S @ 400 MHz) avec tous les moyens de communication (bluetooth, RF 2.4GHz, GPRS, 3G+, satellite, Ethernet) Prise en compte de toutes les difficultés constatées sur le V1 entre 0.5 et 1W (contre 2W actuellement)
Merci pour votre attention Questions / réponses Le site du projet : http://www.domino.u-bordeaux.fr/molluscan_eye/ mots clefs moteurs de recherche : oeil du mollusque Merci à Jean Charles Massabuau et Pierre Ciret de l'équipe GEMA pour leurs photos et explications 26/26