Arduino per domotica, collegato in rete come client/server parte 2

Proseguendo col mio progetto di domotica/antifurto, aggiungo un secondo arduino con ethernet per prendere i vari sensori dall’altra parte della casa e inviarli al server via UDP.

Questo è il link dell’articolo precedente

 

I messaggi che manda sono nel formato “NUMERO SCHEDA” + “NUMERO SENSORE” + “STATO”

ad esempio la scheda 4 arduino con il sensore 6 e lo stato 00001 = 040600001

Come porte UDP ho utilizzato la solita 5055 per la trasmissione utilizzando il protocollo sopra indicato.

Al contrario della scheda illustrata prima questa non riceve comandi ma invia soltanto i dati dei vari sensori collegati

Nel mio caso ho utilizzato:

  • un arduino nano
  • un ENC28J60 Ethernet Shield V1.0 per scheda di rete
  • zoccolo per arduino (shield)

 

enc28j60-shield-variations base ArduinoNanoFront_3_sm
/* 
 * pin 10 -11 -12 -13 occupati da ethernet
 * pin 2 -3 -4 -5 -6 -7 -8 -9 digitali
 * da A0 ad A7 analogici
 */

#include <UIPEthernet.h>

EthernetUDP udpserver;
EthernetUDP udp;

int success;
char IRF;
int counter; //lo utilizzo per il conteggio del client per mandare i messaggi al server


void setup() {
  
  pinMode(2, INPUT); //
  pinMode(3, INPUT); //
  pinMode(4, INPUT); //
  pinMode(5, INPUT); //
  pinMode(6, INPUT);  //
  pinMode(7, INPUT);  //
  pinMode(8, INPUT);  //
  pinMode(9, INPUT);  //
  
  
  Serial.begin(9600); //imposto la porta seriale per debug
  uint8_t mac[6] = {0x02,0x03,0x04,0x05,0x06,0x07}; //imposto mac address

  Ethernet.begin(mac,IPAddress(10,0,0,254)); //imposto ip

  success = udpserver.begin(5056); // apro la porta udp
  }

void loop() {

// qui parto con le letture dei sensori
     
    delay(200);
    
    for (int i=2; i < 10; i++){
       success = udp.beginPacket(IPAddress(10,0,0,1),5055);
       String Messaggio = "060" + String(i-1) + "0000" + String(!digitalRead(i));
       success = udp.print(Messaggio);
       success = udp.endPacket();
       delay(100);
    } 
      
     for (int i=0; i < 8; i++){
       success = udp.beginPacket(IPAddress(10,0,0,1),5055);
       String Scheda;
       if ((i+9)>9) {
         Scheda="06";
       } else {
         Scheda="060";
       }
       String Messaggio = Scheda + String(i+9) + String(analogRead(i));
       success = udp.print(Messaggio);
       success = udp.endPacket();
       delay(100);
     } 
       

}