Autore Topic: Centralina controllo GPIO con wrt54gl e openwrt  (Letto 33211 volte)

truthahn

  • Global Moderator
  • Hero Member
  • *****
  • Post: 1546
    • Mostra profilo
Centralina controllo GPIO con wrt54gl e openwrt
« il: Febbraio 03, 2010, 05:45:42 pm »
Riporto sinteticamente l'avventura del modding di un linksys wrt54gl v1.1 per gestire riscaldamento, luci interne ed esterne pi? l'apriporta di un centro sociale via wireless. Il centro, utilizzato per molte attivit? con orari fissi e variabili, presentava molti problemi di gestione soprattutto per il riscaldamento che, seppur programmato tramite termostato, veniva talvolta posto su manuale scaldando anche quando il centro era chiuso. Anche le chiavi erano spesso un problema: troppe copie in giro o chiamate da persone che ne erano prive e dovevano entrare. L'illuminazione poi, quella esterna soprattutto, rimaneva spesso accesa tutta notte. L'idea ? stata quella di gestire il tutto dalla sede comunale tramite wireless, non disponendo il centro di una linea adsl, con un'interfaccia semplice da poter essere usata da una impiegata. Il primo esperimento ? stato con una fonera 2100 che con i suoi GPIO ben in vista ? facile da modificare. Per poter trasferire l'esperimento in pi? sedi (palestra, biblioteca, scuole...) sempre da gestite dalla  sede comunale ho pensato di utilizzare i linksys wrt54gl che ho usato molte volte con tanta soddisfazione con openwrt. Son diventato matto con il trunk brcm47xx (8.09 kernel 2.6) come riportato qui http://www.nabuk.org/f/index.php?topic=2341.0 , ma questo funziona solo se si utilizza il linksys come "centralina" essendo il wifi inutilizzabile per problemi di sviluppo del driver b43. Son passato quindi al brcm-2.4 (8.09.2 kernel 2.4) che ha l'wifi pienamente supportato. Pensavo ci fossero per? problemi per la gestione GPIO invece qui http://downloads.openwrt.org/utils/gpio-uclibc-0.9.29.tar.gz si trova nel tgz sia il sorgente che il prog "gpio" con il quale si gestiscono molto facilmente le gpio del linksys. Modificando quindi il codice inserendo il prog "gpio" e altri piccoli accorgimenti tutto ? andato a meraviglia.
Per i rel? necessari ho acquistato tre di questi http://www.futurlec.com/Opto_Relay_4.shtml , che con le spese di spedizione e dogana (arrivati da Hong Kong dopo un mese dall'ordine) son costati circa 15 Euro all'uno contro i 35/37 trovati uguali in italia. Questa scheda va particolarmente bene in quanto chiude i rel? con logic 0 proprio come il wrt54gl (la fonera li chiude con logic 1 e quindi quando rebootta ti ritrovi con tutti i rel? chiusi). Quindi, con il prog "gpio", per accendere qualcosa bisogna disabilitare un GPIO (gpio disable x) e abilitarlo per spegnerlo (gpio abled x). L'altro vantaggio ? la presenza di tre connettori per il collegamento ai GPIO (5 volt, 1 2 3 4 , GRN: ai 5 volt va collegato un punto a 3,3 volt presente, ad esempio, sulla seriale del linksys), cos? mettendo in corto il GRN con un punto 1 2 3 4 si pu? attivare un rel? senza l'intervento dei GPIO. Questo per me sar? utilissimo per il riscaldamento in quanto per controllare l'antigelamento dell'ambiente installer? un semplice termostato che bypassa le GPIO e quando la temperatura scende sotto i 5 gradi attiva la pompa anche se fuori programma. Inoltre la scheda va alimentata a 12v, proprio come il linksys.

Sul wrt54gl si utilizzano i GPIO 2 3 (? molto pi? comodo girare la scheda e saldare nei punti corrispondenti... saldare sui led ? un casino)


e 4 7


servono poi i 12 V da prendere dal connettore principale e, come gi? detto i 3,3 dalla seriale.


I 12 vanno ad alimentare la scheda e i 3,3 servono per la TTL

Riposto le immagini dell'interfaccia web realizzata. Si tratta di semplici script .sh posti in /www/cgi-bin/webif/centralina, ho creato poi una cartella in /etc nominandola "centralina" dove vengono registrati i log e le configurazioni, e la cartella /bin/centralina per i comandi.
Ho utilizzato abbastanza "sed" e "awk" che comunque sono gi? installati con openwrt.
La prima pagina serve per comandare direttamente i rel?, si accendono e spengono semplicemente tranne per l'apriporta che accende per 3 secondi e poi stacca.


la seconda serve per programmare i comandi posti in /bin/centralina. Non fa altro che scrivere in /etc/crontab/root e riavviare il servizio ad ogni modifica. Oltre a cancellare un programma si pu? disabilitarlo e riabilitarlo (pone o toglie un # nella riga corrispondente.


La terza gestisce le chiamate telefoniche con pass da un asterisk e serve per aprire, per ora, la porta. Gli amministratori hanno pass "private" con le quali possono comandare tutti i rel? (riscaldamento, luci).


la quarta gestisce i log


ed ecco il pupo pronto. Ho gi? fatto un giorno di prove con un altro wrt54gl a 100 m di distanza con i suoi gommini... 1000 accensioni e spegnimenti e tutto va alla perfezione. Esiste un unico neo: il gpio7, quello del led DMZ, all'accensione resta acceso per circa mezzo minuto quindi nessun problema se il rel? corrispondente accende le luci o il riscaldamento in caso di mancata corrente e riavvio ma, naturalmente, non pu? essere associato all'apriporta che resterebbe aperta.
Ecco il pupo:




« Ultima modifica: Febbraio 04, 2010, 10:46:09 am da truthahn »

TechBek

  • Sr. Member
  • ****
  • Post: 782
    • Mostra profilo
Re: Centralina controllo GPIO con wrt54gl e openwrt
« Risposta #1 il: Febbraio 04, 2010, 01:00:05 am »
Veramente ottimo!!
Posteresti anche qualche esempio del codice?? Perch? non saprei proprio da dove partire se volessi fare qualcosa del genere!!

truthahn

  • Global Moderator
  • Hero Member
  • *****
  • Post: 1546
    • Mostra profilo
Re: Centralina controllo GPIO con wrt54gl e openwrt
« Risposta #2 il: Febbraio 04, 2010, 11:06:55 am »
questa ? la pagina comandi, la pi? semplice ma con la quale si pu? comandare al volo i rel?.

Codice: [Seleziona]
#!/usr/bin/webif-page
<?
. /usr/lib/webif/webif.sh
############################################################################
#
# Descrizione:
# Controllo GPIO - Accendi  - Spegni
#       Questa pagina controlla lo stato dei Gpio 3 4 7  e se lo trova "0"
# abilita lo spegnimento altrimenti l'accensione.
#
#       Per il GPIO 2 collegato all'apriporta propone solo apri.
#
#               truthahn - Nabuk Family
#############################################################################

header "Info" "System" "<img src=\"/images/telecomando.jpg\" alt=\"@TR<<>>\"/>@TR<< Comandi >>"

periferica7="Luci Esterne"
periferica3="Riscaldamento"
periferica4="Luci Interne"
periferica2="Apriporta"


for n in 3 4 7;do
        gpio=FORM_gpio$n
eval gpio=\$$gpio
if equal $gpio "ACCENDI" ; then
gpio disable $n > /dev/null
echo 0 > /etc/centralina/gpio$n
fi
if equal $gpio "SPEGNI" ; then
gpio enable $n > /dev/null
echo 1 > /etc/centralina/gpio$n
fi
done

if equal $FORM_gpio2 "APRI" ; then
           gpio disable 2 > /dev/null
           echo 0 > /etc/centralina/gpio2
           sleep 4
           gpio enable 2 > /dev/null
   echo 1 > /etc/centralina/gpio2
fi


if equal $FORM_generale "SPEGNI_TUTTO" ; then
for n in 2 3 4 7;do
gpio enable $n > /dev/null
echo 1 > /etc/centralina/gpio$n
done
fi

display_form <<EOF
start_form|@TR<<&nbsp;>>
end_form
EOF

cat <<EOF
    <form method="get" action="comandi.sh"><p><p><center>
        <table width="60%">
            <tr><td><strong>PERIFERICA</td><td><strong><center>STATO</td>
             <td><strong><center>COMANDO</strong></td></tr>
EOF

for n in 3 4 7;do
     gp="$(cat /etc/centralina/gpio$n)"
     per=periferica$n
    eval per=\$$per
    if equal $gp "0"; then
       cat <<EOF
            <tr><td>$per:</td><td><center><img src="/images/lamp.jpg"></td>
            <td><center><input type="submit" name="gpio$n" value=SPEGNI ></td></tr>
      EOF
   else
       cat <<EOF
           <tr><td>$per :</td><td><center><img src="/images/lamp1.jpg"></td>
           <td><center><input type="submit" name="gpio$n" value=ACCENDI ></td></tr>
       EOF
    fi
done

cat <<EOF
         <tr><td>$periferica2 :</td><td><center><center><img src="/images/chiave.jpg"></td>
         <td><center><input type="submit" name="gpio2" value=APRI
          onClick="javascript:return confirm('Vuoi veramente aprire la porta?');"></td></tr>
         <tr><td>Generale :</td><td></td><td><center><input type="submit" name="generale"    value="SPEGNI_TUTTO"          ></td></tr>
        </table></form>
&nbsp;<p>&nbsp;<p>
EOF

display_form <<EOF
start_form|@TR<<&nbsp;>>
end_form
EOF

footer
 
?>

TechBek

  • Sr. Member
  • ****
  • Post: 782
    • Mostra profilo
Re: Centralina controllo GPIO con wrt54gl e openwrt
« Risposta #3 il: Febbraio 04, 2010, 07:40:56 pm »
ottimo,
appena ho finito gli esami ci do un'occhiata....volendo ? possibile fare una cosa simile sulla fonera??

truthahn

  • Global Moderator
  • Hero Member
  • *****
  • Post: 1546
    • Mostra profilo
Re: Centralina controllo GPIO con wrt54gl e openwrt
« Risposta #4 il: Febbraio 04, 2010, 08:15:19 pm »
Certo. Ne ho due in funzione su fonera 2100 con openwrt 7.09. Non ho provato con l'8.09 ma non penso ci siano problemi.

TechBek

  • Sr. Member
  • ****
  • Post: 782
    • Mostra profilo
Re: Centralina controllo GPIO con wrt54gl e openwrt
« Risposta #5 il: Febbraio 04, 2010, 08:29:45 pm »
Certo. Ne ho due in funzione su fonera 2100 con openwrt 7.09. Non ho provato con l'8.09 ma non penso ci siano problemi.
interessante  :evil: :evil:

truthahn

  • Global Moderator
  • Hero Member
  • *****
  • Post: 1546
    • Mostra profilo
Re: Centralina controllo GPIO con wrt54gl e openwrt
« Risposta #6 il: Febbraio 05, 2010, 06:42:19 pm »
Oggi ho preparato un altro wrt54gl, quello che andr? a lavorare sul serio quindi sul tetto del centro mentre la scheda con i rel? andr? all'entrata del centro dove sta il quadro generale dell'impianto elettrico. Avevo un  dubbio sui  3,3 volt che dal linksys dovranno arrivare alla scheda da una distanza di circa 8 metri e come farli arrivare. Ho quindi fatto una prova decidendo di utilizzare un cavo di rete e di fissare, sia sul linksys che sulla scheda rel?, dei connettori rj45 femmina cos? da avere una maggior facilit? poi di connessione e di standardizzare il tutto. Quindi bianco/arancio Gpio2 - arancio gpio3 - bianco/verde gpio4 - verde gpio7 - marrone e bianco/marron 3.3V - azzurro e bianco/azzurro GRN. Allora con 12 metri di cavo il tutto funziona bene. Sto ora installando, con le opportune modifiche gli script su una fonera con openwrt 8.09.2... vediamo se funziona tutto... Vi tengo informati.
Ecco un paio di foto del linksys "da lavoro".



« Ultima modifica: Febbraio 05, 2010, 07:27:54 pm da truthahn »

TechBek

  • Sr. Member
  • ****
  • Post: 782
    • Mostra profilo
Re: Centralina controllo GPIO con wrt54gl e openwrt
« Risposta #7 il: Febbraio 05, 2010, 06:54:51 pm »
grandeee

continua cos?! ;)

Fabietto_DJ

  • Full Member
  • ***
  • Post: 209
    • Mostra profilo
Re: Centralina controllo GPIO con wrt54gl e openwrt
« Risposta #8 il: Febbraio 05, 2010, 07:31:57 pm »
I progetti artigianali cos? sono sempre i migliori... :wink:

truthahn

  • Global Moderator
  • Hero Member
  • *****
  • Post: 1546
    • Mostra profilo
Re: Centralina controllo GPIO con wrt54gl e openwrt
« Risposta #9 il: Febbraio 06, 2010, 03:36:02 pm »
Installati gli script anche su fonera 2100 e 2200 con kamikaze 8.09.2 - Xwrt (come gi? detto con il 7.09 l'avevo gi? sperimentato) e tutto funziona alla perfezione... si utilizza il comodo comando gpioctl presente nei packages. (con la 7.09 si utilizza il kmod-gpio e quindi il classico "echo 1> /proc/gpio1") L'unico problema, come gi? esposto e che bisogna costruire o acquistare una scheda rel? che chiuda con logic 1. Si pu? naturalmente mettere uno script in rc.local per aprire i rel? o in rd.d ma lo stesso un mezzo minuto all'accensione restano attivi. Pertanto per alcune applicazioni la scheda utilizzata non va bene (vedi l'apriporta). p
« Ultima modifica: Febbraio 06, 2010, 03:47:30 pm da truthahn »

truthahn

  • Global Moderator
  • Hero Member
  • *****
  • Post: 1546
    • Mostra profilo
Re: Centralina controllo GPIO con wrt54gl e openwrt
« Risposta #10 il: Febbraio 06, 2010, 09:25:22 pm »
Eh no ragazzi... mica vero che va tutto bene.. Anche sulla fonera con l'8.09.2 il driver della radio ? egoista e si tiene ben stretto il gpio2. Con la 7.09, se vi ricordate, il led wifi della fon non si accende proprio e quindi ? sempre libero.

TechBek

  • Sr. Member
  • ****
  • Post: 782
    • Mostra profilo
Re: Centralina controllo GPIO con wrt54gl e openwrt
« Risposta #11 il: Febbraio 07, 2010, 12:56:52 am »
Eh no ragazzi... mica vero che va tutto bene.. Anche sulla fonera con l'8.09.2 il driver della radio ? egoista e si tiene ben stretto il gpio2. Con la 7.09, se vi ricordate, il led wifi della fon non si accende proprio e quindi ? sempre libero.
ma stai parlando della 2200?

truthahn

  • Global Moderator
  • Hero Member
  • *****
  • Post: 1546
    • Mostra profilo
Re: Centralina controllo GPIO con wrt54gl e openwrt
« Risposta #12 il: Febbraio 07, 2010, 10:40:23 am »
Proprio quella.  :-(

TechBek

  • Sr. Member
  • ****
  • Post: 782
    • Mostra profilo
Re: Centralina controllo GPIO con wrt54gl e openwrt
« Risposta #13 il: Febbraio 07, 2010, 12:14:16 pm »
allora non ti so aiutare perch? non ho mai tentato di usare i GPIO della 2200 in quanto non ho mai capito bene dove andavano saldati e che modifiche andavano fatte :/

truthahn

  • Global Moderator
  • Hero Member
  • *****
  • Post: 1546
    • Mostra profilo
Re: Centralina controllo GPIO con wrt54gl e openwrt
« Risposta #14 il: Febbraio 07, 2010, 12:24:10 pm »
Poi vedo sulla 2100 sulla quale ho gi? installato tutto , ma non ho ancora fatto una prova "reale" con la scheda rel? attaccata... ma se il driver si comporta cos? sulla 2200 penso sia la stessa cosa, il firmware ? identico.