Node01 : Gateway

Aggiornato il:  01 Feb, 2019 @ 23:51

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.

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