[LA-discussions] Fonera avec open-wrt et bus I2C - Appel à l'aide !!

[ Thread Index | Date Index | More linuxarverne.org/discussions Archives ]


Bonjour à tous,

dans mes "amusements", je cherche à modifier un routeur wifi pour en
faire un petit serveur d'interface avec le monde extérieur....
D'autres l'on déjà fait, mais même en me basant sur les pages web que
j'ai trouvé, je n'arrive à rien !

La liste L.A n'est peut-être pas la plus adaptée, mais comme mes
problèmes sont essentiellement logiciels, j'aurais peut-être des
pistes :D


Le but de mes bidouillages est d'assurer la régulation de T° d'un
chauffage, dans un premier temps juste piloter un moteur qui actionne
la vanne de régulation en fonction de la T°. D'autres fonctionnalités
seront envisagées quand le prototype sera fonctionnel. (gestion à
distance, régulation T° en fonction de l'heure, de la température
extérieure.....)

Dans la pratique, je me base sur un routeur Fonera dont le firmware
est remplacé par Open-WRT ( http://fr.wikipedia.org/wiki/OpenWrt )
Pour ce qui est d'OpenWRT pur, ça se passe bien, compilation,
injection du firmware dans la fonera, paramétrage....

Dans la fonera, on peut accéder à directement à certaines broches du
microcontrolleur que l'on peut piloter logiciellement.
Ces bornes, dénommées General Purpose Input/Output - GPIO, sont
normalement définies/contrôlées/lues avec un module du kernel, et
c'est là que ça coince.

Dans la Fonera, je peux utiliser les GPIO 3 , 4 , 1 et 7 et il faut
que je les contrôle pour en faire un bus de communication à la norme
I2C.
L'avantage du bus I2C c'est qu'avec 2 lignes de bus, on peut utiliser
plusieurs composants, tel que des 'convertisseurs Entré/Sortie' avec 8
lignes, et que l'on peut en placer plusieurs sur el même bus, on peut
avoir par exemple en plus 3 sondes de T° ... ce qui assure de
possibles évolutions.

Dans mon application ensuite, à travers les couches logicielles I2C,
je doit normalement lire et écrire sur le bus I2C à des adresses
définies pour interagir avec le monde extérieur.

Grossièrement, ça devrait ressembler à quelque chose comme ça :
Pour lire la valeur de la sonde de température située à l'adresse Ox00000048
echo Ox00000048 >> /proc/I2C/bus0/adresse
/proc/I2C/bus0/valeur >> $temp

L'expérience des autres :
Principalement celle de Denis Bodor :
http://www.lefinnois.net/wp/index.php/2007/05/05/un-bus-i2c-pour-la-fonera/
http://dd-wrt.com/wiki/index.php/LaFonera_Hardware_i2c

Un Bus I2C utilisant les GPIO (ce que je veux faire), mais sur
matériel Linksys (microcontrolleur Boadcom)
http://wiki.openwrt.org/OpenWrtDocs/Customizing/Hardware/I2C_RTC

Contrôle des GPIO directement (limité, mesure T° impossible) :
http://dd-wrt.com/wiki/index.php/LaFonera_Hardware_Controlling_AC-Loads

Utilisation GPIO pour rajouter une SD card:
http://dd-wrt.com/wiki/index.php/LaFonera_Hardware_SD-Card


Dans Open-WRT, j'ai la possibilité d'inclure des modules qui sont en
principe la solution, mais impossible de trouver de la doc pour les
exploiter !
De plus, depuis les expérimentations de Denis Bodor, les paquet et
modules ont changés, donc, ses pages ne sont plus applicables....
Je n'ai pas le niveau suffisant pour comprendre les sources et
analyser le fonctionnement.

Par exemple, dans le module
https://dev.openwrt.org/browser/trunk/package/i2c-gpio-custom/src une
ligne décrit les arguments à passer, mais aucune info détaillées
d'utilisation du module :s

J'ai beau chercher, un peu partout sur ternet, impossible de trouver
une documentation ou au moins des exemples d'usage pour comprendre
comment ça fonctionne précisément !

Par exemple, dans le montage de Denis Bodor, pour chaque ligne du bus
(Sda et Scl) qui doivent être bidirectionnelles, il utilise un GPIO en
entrée, et un autre en sortie, mais a priori, avec les nouveaux
modules ce n'est plus le cas !

Nous avons donc :
Module GPIOCTL - https://dev.openwrt.org/browser/trunk/package/gpioctl/src
Module i2c-gpio-custom -
https://dev.openwrt.org/browser/trunk/package/i2c-gpio-custom/src
'Application' i2c-tools
https://dev.openwrt.org/browser/packages/utils/i2c-tools/ qui pointe
vers http://dl.lm-sensors.org/i2c-tools/releases/

Du peu que je comprend, en le mettant en relation avec
http://wiki.openwrt.org/OpenWrtDocs/Customizing/Hardware/I2C_RTC ,
j'imagine, mais j'aimerais une confirmation, qu'il faut :
1 : déclarer les GPIO 3 et 1 en sorties et les GPIO 4 et 7 en entrées
avec gpioctl
2 : déclarer les SDA/SCL avec i2c-gpio-custom qui devrait créer des
bus I2C dans /dev ou /proc avec i2c-tools ou i2c-gpio-custom ..

Si quelqu'un qui sache lire le C peut m'apporter un peu d'aide, je
suis preneur, parce que je tourne en rond !

Alex.

---
Liste de discussions de LinuxArverne
http://wiki.linuxarverne.org/listes_de_diffusion


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/