Node01 : Gateway
NOTA: IN CONTINUO AGGIORNAMENTO.
Casa domotica con arduino : Gateway Souliss
Nodo01
Nel progetto di casa domotica con Arduino, il Nodo01 veste la funzione di Gateway per il sistema Souliss. Questo ha il compito di leggere e pilotare tutti i nodi a lui associati e interfacciarsi con la Souliss App scaricabile dallo store di Google Play.
L'hardware utilizzato per questo nodo e una scheda Arduino Mega
con a bordo un micro Atmel ATmega2560 e per la comunicazione con gli altri nodi della rete ho utilizzato uno Ethernet shield W5100
Ethernet shield |
Nel seguente disegno viene illustrato lo schema della casa domotica con descritto le varie funzioni che svolgerà il Nodo01 o Gateway, verrà costantemente aggiornata all'ingrandirsi della rete compreso l'interfacciamento della restante rete di nodi attraverso un collegamento RS485.
Casa domotica con arduino : Nodo01 |
Hardware.
L'hardware necessario, come appena descritto, è composto dalla scheda Arduino Mega e dalla Ethernet shield ed è sufficiente montarle tra loro come in figura qui sotto, poi va collegata alla rete LAN del Router Adsl o Switch che sia, con un cavo Ethernet ed alimentata.
Mega + Ethernet |
Software.
Come iniziare e cosa avere installato su pc per programmare e sviluppare il progetto?
La prima cosa da fare è installare il software per programmare Arduino e lo trovate a questo link. Il mio consiglio ad oggi la versione da me provata e funzionante è la 1.6.3.
Secondo si deve installare la libreria di Souliss nel pacchetto di arduino e lo trovate a questo link e cliccate sul pulsante Download.
La prima cosa da fare è installare il software per programmare Arduino e lo trovate a questo link. Il mio consiglio ad oggi la versione da me provata e funzionante è la 1.6.3.
Secondo si deve installare la libreria di Souliss nel pacchetto di arduino e lo trovate a questo link e cliccate sul pulsante Download.
Ora scompattare il file scaricato(zip) e mettete tutti i file nella cartella ..\Arduino\libraries\Souliss\.
Ora si è pronti per programmare ed eseguire i vari test; oltre alle schede da me usate ci sono altre soluzioni possibili e la lista di hardware disponibili per Souliss la potete trovare in questa lista.
Codice
Di seguito il listato, in continuo aggiornamento, con la spiegazione del codice:
/************************************************************************** * * Progetto : Nodo01 Eth - Gateway - Arduino Mega 2560 + Ethernet W5100 * Autore : DromegaWeb * Data : Gennaio 2015 - Inizio - esito OK * 21 Marzo 2015 - Introdotto SpeakEasy - esito OK * 02 maggio 2015 - Aggiornato ad arduino 1.6.3 * 28 Dic 2015 - Aggiornato parametri MAC * 29/03/2016 - Attivazione interfaccia HTML/XML * 08 Aprile 2017 - Aggiornamento sistema di compilazione * 05 Nov 2017 - Disabilitato tutto , Uso solo come Gateway per test h24 * e NODO_03 * 01 Feb 2019 - Ristruttirazione sistema * ****************************************************************************/ // Let the IDE point to the Souliss framework #include "SoulissFramework.h" // Configure the framework #include "bconf/StandardArduino.h" // Use a standard Arduino #include "conf/ethW5100.h" // Ethernet through Wiznet W5100 #include "conf/Gateway.h" // The main node is the Gateway #include <SPI.h> #include "Souliss.h" #include "DromegaWebConf.h" int WachDog_LED_pin = 7; // Led di verifica funzionamento CPU int value = 1; void setup() { pinMode(WachDog_LED_pin,OUTPUT); digitalWrite(WachDog_LED_pin, value); // Accende il LED di WachDog nela fase di setup Initialize(); INIT_Nodo01(); } void loop() { EXECUTEFAST() { UPDATEFAST(); FAST_1110ms() { value = !value; digitalWrite(WachDog_LED_pin, value); //Lampeggio di WachDog_LED nela fase di lavoro } FAST_GatewayComms(); //Elaborazione di tutte le comunicazioni con altri nodi la Souliss App } // EXECUTESLOW() { UPDATESLOW(); SLOW_10s() { } } }
Spiegazione del codice in breve:
Setup
012 - Stabilisce che l'hardware usato è la scheda di Arduino
013 - Comunica al compilatore che lo shield montato su Arduino è in scheda Ethernet
014 - Definisce questo nodo come il nodo gateway del sistema Souliss con il quale si interfaccia la Souliss App sullo smartphone o tablet. Questo settaggio nella rete Souliss deve comparite una sola volta in quanto la Souliss App si aggancia ad un solo gateway.
016-017 - Libreria Souliss da inserire sempre.
020 - Definisco l'indirizzo IP del Nodo01, Arduino Gateway, questo nodo per intenderci.
021 - Definisco l'indirizzo IP del Nodo02 altra scheda arduino con modulo shield Ethernet.
022 - Definisco l'indirizzo IP del Nodo03 altra scheda arduino con modulo shield Ethernet.
023 - Definizione della subnet mask, tipico parametri presente in tutte le reti dati ethernet.
024 - Definisco l'indirizzo IP del Router o modem router che funge da gateway sulla propria rete per l'accesso a internet.
026-033 - Definizione indirizzi vNet.
035 - Definisco l'indirizzo del ponte per la prima linea di RS485 sul Nodo02
036 - Definisco l'indirizzo del peer Nodo04 per la prima linea di RS485
037 - Definisco l'indirizzo del peer Nodo05 per la prima linea di RS485
039 - Definisco l'indirizzo del ponte per la seconda linea di RS485 sul Nodo03
040 - Definisco l'indirizzo del peer Nodo06 per la seconda linea di RS485
041 - Definisco l'indirizzo del peer Nodo07 per la seconda linea di RS485
042 - Definisco l'indirizzo del peer Nodo08 per la seconda linea di RS485
047 - Definisco il MAC nello sketch.
049-054 - Definisco i 6 LED come slot
058 - inizializza la mappa di memoria degli slot Souliss
060 - Setta l'indirizzo IP del Nodo01, Arduino Gateway.
061 - Setto questo nodo come Gateway di Souliss App, da fare solo su questo nodo della rete( va settato solo una volta.)
062-063 - In queste righe vengono settati i nodi peer di tutta le rete Souliss, in questo caso sono presenti solo i 3 nodi (Nodo02,Nodo04 e Nodo05) quelli in uso ora, in futuro verranno aggiunti anche gli altri quando pronti.
067-072 - Dei vari slot viene settato il tipico.
075-080 - Vengono definiti gli ingressi.
082-087 - Vengono definite le uscite.
Loop
La base del ciclo di sistema per i vari nodi è la seguente:
[sourcecode language="cpp"] void loop() { EXECUTEFAST() { UPDATEFAST(); FAST_30ms() { -------------Definire intrusioni di in e out per Soulis--------------- } FAST_50ms() { -------------Definire intrusioni di in e out per Soulis--------------- } } EXECUTESLOW() { UPDATESLOW(); SLOW_10s() { // Gestiamo il timer degli slot -------------Definire timer--------------- } } }
Questo è il ciclo che viene ripetuto all'infinto del nostro nodo e sono presenti nei "FAST_XXms()" le istruzioni che vengono ripetute con maggiore frequenza e nei "SLOW_xxs()" le istruzioni che vengono ripetute con un lasso di tempo più lungo settabile anche una volta al giorno, secondo quanto descritto nel file SpeakEasy.h.
Quindi:
097-102 - La funzione DigIn rileva il cambiamento di stato dell'ingresso (2,3,4,5,6,7 di Arduino) e cambia lo stato dello SLOT (LED_0_N1, LED_1_N1, LED_2_N1, LED_3_N1, LED_4_N1, LED_5_N1).
105-110 - Esegue la logica inerente allo stato dello SLOT e al tipico.
113-118 - La funzione DigOut setta il relativo pin di Arduino (8, 9 ,10, 11, 12, 13) a livello logico alto o basso in relazione allo sto dello slot, in parole povere accende o spegne il LED connesso tra GND e il pin di Arduino.
120 - In questa dichiarazione vengono gestite parecchie cose:
- Elabora più canali di comunicazione gestiti in round-robin, i dati di uscita sono situati nella mappa di memoria e sono pronti per essere letti dall'interfaccia utente.
- Recupera i dati dei canali di comunicazione
- Ottenere le definizioni dei tipici dai dispositivi remoti in caso di riavvio del gateway
123-131 - Vengono gestite le temporizzazioni (timer).
Commenti
Posta un commento