attivare pin arduino yun da web

Salve a tutti.
Ho un codice per un progetto con arduino yun, così com'è impostato prevede l'utilizzo di pulsanti per accendere o spegnere i pin ma io volevo provare a controllarlo da web digitando sulla barra degli indirizzi: ip/arduino/digital/ ecc ecc.

Ho visto che si può impostare lo skecth in modo da ottenere dei pulsanti sulla pagina web di arduino che viene creata a quell'indirizzo

#include <Adafruit_MCP23017.h>

#include <Wire.h>

Adafruit_MCP23017 mcp;


int pulsante1 = A0;
int statorelay0 = 1;
int statorelay1 = 1;
int statorelay2 = 0;
int statorelay3 = 0;
int statoled0 = 0;
int statoled1 = 1;
int statoled2 = 0;
int statoled3 = 1;
int statoled4 = 1;
int statoled5 = 0;
int statoled6 = 1;
int statoled7 = 0;




void setup() {
  // put your setup code here, to run once:
  mcp.begin(0);

  pinMode(pulsante1, INPUT); //

  pinMode(1, INPUT_PULLUP); //
  pinMode(4, INPUT_PULLUP); // 
  pinMode(5, INPUT_PULLUP); // 
  pinMode(6, OUTPUT); // relay 
  pinMode(7, OUTPUT); //relay 
  pinMode(8, OUTPUT); //relay 
  pinMode(9, OUTPUT); //relat 
  mcp.pinMode(9, OUTPUT); //led 
  mcp.pinMode(8, OUTPUT); // led 
  mcp.pinMode(11, OUTPUT); //led 
  mcp.pinMode(10, OUTPUT); // led 
  mcp.pinMode(12, OUTPUT); //led 
  mcp.pinMode(13, OUTPUT); //led 
  mcp.pinMode(14, OUTPUT); //led 
  mcp.pinMode(15, OUTPUT); //led
  pinMode(10, INPUT_PULLUP); //
  pinMode(11, INPUT_PULLUP); //pulsante 
  pinMode(12, INPUT_PULLUP); //pulsante 
  pinMode(13, INPUT_PULLUP); //pulsante 
  mcp.pinMode(7, OUTPUT); //relay 
  mcp.pinMode(6, OUTPUT); //relay 
  mcp.pinMode(5, OUTPUT); //relay 
  mcp.pinMode(4, OUTPUT); //relay 
  mcp.digitalWrite(7, 1);
  mcp.digitalWrite(6, 1);
  mcp.digitalWrite(5, 1);
  mcp.digitalWrite(4, 1);
 

  digitalWrite(6, statorelay0);
  mcp.digitalWrite(8, statoled0);
  mcp.digitalWrite(9, statoled1);
  digitalWrite(7, statorelay1);
  mcp.digitalWrite(10, statoled2);
  mcp.digitalWrite(11, statoled3);
  digitalWrite(8, statorelay2);
  mcp.digitalWrite(12, statoled4);
  mcp.digitalWrite(13, statoled5);
  digitalWrite(9, statorelay3);
  mcp.digitalWrite(14, statoled6);
  mcp.digitalWrite(15, statoled7);

}

void loop() {
  // put your main code here, to run repeatedly:

if (analogRead(pulsante1) == LOW )
 { 
  if (statorelay0 == 1) statorelay0 = 0;
  else                  statorelay0 = 1;
  if (statoled0 == 0) statoled0 = 1;
  else                   statoled0 = 0;
   if (statoled1 == 1) statoled1 = 0;
  else                   statoled1 = 1;
  digitalWrite(6, statorelay0);
  mcp.digitalWrite(8, statoled0);
  mcp.digitalWrite(9, statoled1);
  
  delay(400);
 }
 if (digitalRead(1) == LOW )
 { 
  if (statorelay1 == 1) statorelay1 = 0;
  else                  statorelay1 = 1;
  if (statoled2 == 0) statoled2 = 1;
  else                   statoled2 = 0;
   if (statoled3 == 1) statoled3 = 0;
  else                   statoled3 = 1;
  digitalWrite(7, statorelay1);
  mcp.digitalWrite(10, statoled2);
  mcp.digitalWrite(11, statoled3);
  
  delay(400);
 }
 if (digitalRead(4) == LOW )
 { 
  if (statorelay2 == 0) statorelay2 = 1;
  else                  statorelay2 = 0;
  if (statoled4 == 1) statoled4 = 0;
  else                   statoled4 = 1;
   if (statoled5 == 0) statoled5 = 1;
  else                   statoled5 = 0;
  digitalWrite(8, statorelay2);
  mcp.digitalWrite(12, statoled4);
  mcp.digitalWrite(13, statoled5);
  
  delay(400);
 }
  if (digitalRead(5) == LOW )
 { 
  if (statorelay3 == 0) statorelay3 = 1;
  else                  statorelay3 = 0;
  if (statoled6 == 1) statoled6 = 0;
  else                   statoled6 = 1;
   if (statoled7 == 0) statoled7 = 1;
  else                   statoled7 = 0;
  digitalWrite(9, statorelay3);
  mcp.digitalWrite(14, statoled6);
  mcp.digitalWrite(15, statoled7);
  
  delay(400);
 }
 if (digitalRead(10)==LOW)
{ mcp.digitalWrite(7, 0);
delay(400);
mcp.digitalWrite(7, 1);
}
 if (digitalRead(11)==LOW)
{ mcp.digitalWrite(6, 0);
delay(400);
mcp.digitalWrite(6, 1);
}
 if (digitalRead(12)==LOW)
{ mcp.digitalWrite(5, 0);
delay(400);
mcp.digitalWrite(5, 1);
}
 if (digitalRead(13)==LOW)
{ mcp.digitalWrite(4, 0);
delay(400);
mcp.digitalWrite(4, 1);
}
}

questo è il codice, cosa devo prevedere all'interno di questo per controllarlo da web?
ho aperto la porta 80 al router all'indirizzo ip di arduino.
scusate ma sono molto a digiuno di networking.

grazie a tutti

almax85:
ho aperto la porta 80 al router all'indirizzo ip di arduino.
scusate ma sono molto a digiuno di networking.

... date le tue scarse conoscenze di networking (... ed, evidentemente, dei pericoli che comporta il collegamento con la rete internet) ... io lascerei proprio stare.

Se apri al mondo esterno, come stai facendo aprendo le porte sul router, il tuo arduino Yún, in men che non si dica ci saranno un infinità di collegamenti da parte di "bot" hacker che renderanno inutilizzabile il tuo Yún e, peggio, metterai inutilmente a rischio la tua rete.

Mettere in "rete pubblica" un server web senza sapere quali meccanismi di protezione attivare, e come proteggersi è la peggiore idea che ci possa essere, poi ... fai tu ... ::slight_smile:

Guglielmo

Grazie mille

Ma come può un estraneo accedere alla mia scheda yùn se non conosce l'indirizzo ip pubblico del router?
La mia idea era quella di sviluppare una pagina web che possa controllare dei pin senza aver bisogno di un collegamento hardware, altrimenti a cosa serve una scheda arduino wifi?

se è troppo rischioso allora si potrebbe prevedere un utilizzo solo all'interno della mia rete e non da remoto?

grazie

almax85:
Ma come può un estraneo accedere alla mia scheda yùn se non conosce l'indirizzo ip pubblico del router?

:smiley: :smiley: :smiley: ... ecco, questo dimostra appunto la tua poca conoscenza dello specifico settore :wink:

Ci sono programmi che 24/24 7/7 scansionano la rete, tutti gli IP, tutte le porte alla ricerca di ... "ingenui" che aprono una porta sul router senza proteggere ciò che ci collega dietro :wink:

almax85:
se è troppo rischioso allora si potrebbe prevedere un utilizzo solo all'interno della mia rete e non da remoto?

Questo certamente si, e dovrebbe essere possibile già da ora ... la Yùn, se collegata al tuo access-point, dovrebbe essere già visibile a tutta la tua rete :slight_smile:

Guglielmo

Tanto è vero che sul router di casa ho "tolto" il reindirizzamento ai due server rdp che usiamo per lavoro e accedo esclusivamente tramite collegamento teamviewer a "comando" oppure come host quando siamo fuori sede.

ok, ammettiamo il secondo caso, tanto non ho bisogno di controllarlo da remoto quindi va bene anche sfruttandolo solo all'interno della rete wifi.
Come posso modificare lo sketch in modo da controllare i vari pin senza pulsanti ma con il comando da browser?
Mi conviene espandere l'esempio Bridge contenuto nell'ide o posso farlo direttamente dal mio codice postato?

grazie

Ti consiglio di studiarti molto bene la libreria Bridge, ed in particolare la parte che riguarda la Yún come server ...

... non dovrai fare altro che stare in attesa di una HTTP GET e fare il parsing di ciò che ricevi come richiesta (... a te decidere una sintassi da inviare nella richiesta HTTP per mettere HIGH/LOW il pin che vuoi).

L'esempio "Bridge" è un buon punto di partenza :slight_smile:

Guglielmo

Grazie davvero! Spero di riuscire a ricavarci qualcosa

a presto :wink: