WAKE ON WIRELESS (WIFI WOL)

Salve a tutti,

ragazzi se scrivo qui è perché ho bisogno di aiuto da qualcuno che ne sa più di me evidentemente…
è un sacco di tempo che cerco di far funzionare questo benedetto sketch che mi dovrebbe inviare un magic packet all’ indirizzo stabilito tramite arduino wifi shield r3 (originale e aggiornata ultimo firmware) su MEGA 2560 ADK. Per evitarvi perdite di tempo premetto che l’hardware è ad-hoc
e tutto funziona correttamente tranne lo step più importante cioé l’invio del pachetto UDP contenente il magic packet da parte dell’ arduino, mentre ricezione da parte del target forma del MAC e così via è tutto ok. Inoltre usando wireshark ho fatto un doublecheck che effettivamente il pc target non riceve alcun pachetto tranne che gli ARP quando l’arduino fa il boot. Quindi nonostante arduino riceva il comando tramite seriale e lo registri via serialprint non invia alcun pacchetto al target predisposto ne tantomeno nella sottorete.
Ovviamente la compilazione e il caricamento non danno errori e nonostante la porta 9 che è quella predefinita per il WOL ho provato a cambiarle con altre compatibili senza mai riuscire a vedere niente in arrivo su 192.168.1.101 (target).

Ecco lo sketch, grazie a tutti in anticipo!

#include <SPI.h>
#include <WiFi.h>
#include <WiFiUdp.h>



int status = WL_IDLE_STATUS;
char ssid[] = "ssid"; //  your network SSID (name)
char pass[] = "password";    // your network password (use for WPA, or use as key for WEP)
int keyIndex = 0;            // your network key Index number (needed only for WEP)
int portaLocale = 7;
byte broadCastIp[] = { 192,168,1,101 };
byte remote_MAC_ADD[] = { 0x90, 0xe6, 0xba, 0x06, 0xef, 0x8f };
int wolPort = 9;


WiFiUDP Udp;

void setup(){  

  //Initialize serial and wait for port to open:
Serial.begin(9600);
while (!Serial) {
  ; // wait for serial port to connect. Needed for Leonardo only
}

// check for the presence of the shield:
if (WiFi.status() == WL_NO_SHIELD) {
  Serial.println("WiFi shield not present");
  // don't continue:
  while (true);
}

String fv = WiFi.firmwareVersion();
if ( fv != "1.1.0" )
  Serial.println("Please upgrade the firmware");

// attempt to connect to Wifi network:
while ( status != WL_CONNECTED) {
  Serial.print("Attempting to connect to SSID: ");
  Serial.println(ssid);
  // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
  status = WiFi.begin(ssid, pass);

  // wait 2 seconds for connection:
  delay(2000);
}
Serial.println("Connected to wifi");
printWifiStatus();
Serial.println("Wake on Lan (WOL) Demo");
Serial.println("Send 'w' to initiate WOL"); 
 Udp.begin(portaLocale);
 

}


void loop()
{
// When 'w' is received, send a magic packet to wake the remote machine. 
if(Serial.available() > 0) 
  if(Serial.read() == 'w') 

{
  inviaMagicPacket();
   Serial.println("Magic packet sent");
}
}

//funzione per la creazione e l'invio
//del magic packet
void inviaMagicPacket()
{
//definisco un array da 102 byte
byte magicPacket[102];
//variabili per i cicli
int Ciclo = 0, CicloMacAdd = 0, IndiceArray = 0;

for( Ciclo = 0; Ciclo < 6; Ciclo++)
{
  //i primi 6 byte dell'array sono settati al valore 0xFF
  magicPacket[IndiceArray] = 0xFF;
  //incremento l'indice dell'array
  IndiceArray++;
}

//eseguo 16 cicli per memorizzare il mac address del pc
//da avviare
for( Ciclo = 0; Ciclo < 16; Ciclo++ )
{
  //eseguo un ciclo per memorizzare i 6 byte del
  //mac address
  for( CicloMacAdd = 0; CicloMacAdd < 6; CicloMacAdd++)
  {
    magicPacket[IndiceArray] = remote_MAC_ADD[CicloMacAdd];
    //incremento l'indice dell'array
    IndiceArray++;
  }
}
//spedisco il magic packet in brodcast sulla porta prescelta
Udp.beginPacket(broadCastIp, wolPort);
Udp.write(magicPacket, sizeof magicPacket);
Udp.endPacket();

}

void printWifiStatus() {
// print the SSID of the network you're attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());

// print your WiFi shield's IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);

// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}