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)
/*
* 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);
}
}