Nota

Ciao, benvenuto nella Community degli appassionati di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Approfondisci Raspberry Pi, Arduino e ESP32 con altri appassionati.

Perché unirsi?

  • Supporto Esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra community e del team.

  • Impara & Condividi: Scambia consigli e tutorial per migliorare le tue competenze.

  • Anteprime Esclusive: Ottieni accesso anticipato alle nuove presentazioni di prodotto e anticipazioni.

  • Sconti Speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni Festive e Giveaway: Partecipa a giveaway e promozioni speciali per le festività.

👉 Pronto ad esplorare e creare con noi? Clicca [Qui] e unisciti oggi!

LED Controllato via WiFi (Punto di Accesso)

Questo progetto ti permette di controllare una luce LED attraverso un’interfaccia web. La scheda Arduino funge da punto di accesso WiFi, creando una propria rete locale a cui puoi connetterti con un browser web. Una volta connesso, puoi navigare all’indirizzo IP del dispositivo utilizzando il browser web, dove troverai opzioni per accendere e spegnere un LED (collegato al pin 13 della scheda). Il progetto fornisce un feedback in tempo reale sullo stato del LED tramite il Monitor Seriale, rendendo più facile il debug e la comprensione del flusso operativo.

1. Carica il codice

Apri il file 01-wifi_ap.ino nel percorso elite-explorer-kit-main\r4_new_feature\01-wifi_ap, oppure copia questo codice nell”Arduino IDE.

Nota

Il supporto Wi-Fi® è abilitato tramite la libreria integrata WiFiS3 che viene fornita con il nucleo Arduino UNO R4. Installando il nucleo si installa automaticamente la libreria WiFiS3.

È necessario ancora creare o modificare arduino_secrets.h, sostituendo SECRET_SSID e SECRET_PASS con il nome e la password del tuo punto di accesso WiFi. Il file dovrebbe contenere:

// File header arduino_secrets.h
#define SECRET_SSID "tuarete"
#define SECRET_PASS "tuo_password"

2. Spiegazione del codice

  1. Importazione delle Librerie Necessarie

    Importa la libreria WiFiS3 per le funzionalità WiFi e arduino_secrets.h per i dati sensibili come le password.

    #include "WiFiS3.h"
    #include "arduino_secrets.h"
    
  2. Configurazione e Inizializzazione delle Variabili

    Definisci SSID WiFi, password e indice della chiave insieme al pin del LED e allo stato WiFi.

    char ssid[] = SECRET_SSID;
    char pass[] = SECRET_PASS;
    int keyIndex = 0;
    int led =  LED_BUILTIN;
    int status = WL_IDLE_STATUS;
    WiFiServer server(80);
    
  3. Funzione setup()

    Inizializza la comunicazione seriale e configura il modulo WiFi.

    void setup() {
    
      // ... codice di setup ...
      // Crea il punto di accesso
      status = WiFi.beginAP(ssid, pass);
      // ... gestione degli errori ...
      // avvia il server web sulla porta 80
      server.begin();
    }
    

    Verifichiamo anche se la versione del firmware del WiFi uno R4 è aggiornata. Se non è l’ultima versione, verrà visualizzato un messaggio di aggiornamento. Puoi fare riferimento a Aggiorna il firmware del modulo radio sulla tua scheda UNO R4 WiFi per l’aggiornamento del firmware.

    ...
    String fv = WiFi.firmwareVersion();
    if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
        Serial.println("Please upgrade the firmware");
    }
    ...
    

    Potresti voler modificare il seguente codice per poter cambiare l’IP predefinito di Arduino.

    WiFi.config(IPAddress(192,48,56,2));
    
  4. Funzione Principale loop()

    La funzione loop() nel codice Arduino esegue diverse operazioni chiave, specificamente:

    1. Verifica se un dispositivo si è connesso o disconnesso dal punto di accesso.

    2. Ascolta i client in arrivo che effettuano richieste HTTP.

    3. Legge i dati del client ed esegue azioni basate su quei dati, come accendere o spegnere un LED.

    Qui, suddividiamo la funzione loop() per rendere questi passaggi più comprensibili.

    1. Verifica dello Stato WiFi

      Il codice verifica innanzitutto se lo stato WiFi è cambiato. Se un dispositivo si è connesso o disconnesso, il monitor seriale visualizzerà le informazioni di conseguenza.

      if (status != WiFi.status()) {
        status = WiFi.status();
        if (status == WL_AP_CONNECTED) {
          Serial.println("Device connected to AP");
        } else {
          Serial.println("Device disconnected from AP");
        }
      }
      
    2. Ascolto dei Client in Arrivo

      WiFiClient client = server.available(); attende i client in arrivo.

      WiFiClient client = server.available();
      
    3. Gestione delle Richieste del Client

      Ascolta i client in arrivo e fornisce loro la pagina HTML. Quando un utente clicca sui link «Clicca qui per accendere il LED» o «Clicca qui per spegnere il LED» sulla pagina web servita, viene inviata una richiesta GET HTTP al server Arduino. In particolare, gli URL «http://tuoIndirizzo/H» per accendere il LED e «http://tuoIndirizzo/L» per spegnerlo verranno utilizzati.

      WiFiClient client = server.available();
      if (client) {
        // ...
        client.println("HTTP/1.1 200 OK");
        client.println("Content-type:text/html");
        client.println();
        client.print("<p style=\"font-size:7vw;\">Click <a href=\"/H\">here</a> turn the LED on<br></p>");
        client.print("<p style=\"font-size:7vw;\">Click <a href=\"/L\">here</a> turn the LED off<br></p>");
        // ...
      }
      

      Il codice Arduino ascolta queste richieste GET in arrivo. Quando rileva GET /H alla fine di una riga in ingresso (intestazione HTTP), imposta il LED collegato al pin 13 su HIGH, accendendolo effettivamente. Allo stesso modo, se rileva GET /L, imposta il LED su LOW, spegnendolo.

      while (client.connected()) {            // loop mentre il client è connesso
        delayMicroseconds(10);                // Questo è necessario per Arduino Nano RP2040 Connect - altrimenti loopa così velocemente che SPI non verrà mai servito.
        if (client.available()) {             // se ci sono byte da leggere dal client,
          char c = client.read();             // leggi un byte, quindi
          Serial.write(c);                    // stampalo sul monitor seriale
          if (c == '\n') {                    // se il byte è un carattere di nuova riga
            ...
            }
            else {      // se hai ricevuto una nuova riga, cancella currentLine:
              currentLine = "";
            }
          }
          else if (c != '\r') {    // if you got anything else but a carriage return character,
            currentLine += c;      // add it to the end of the currentLine
          }
      
          // Check to see if the client request was "GET /H" or "GET /L":
          if (currentLine.endsWith("GET /H")) {
            digitalWrite(led, HIGH);               // GET /H turns the LED on
          }
          if (currentLine.endsWith("GET /L")) {
            digitalWrite(led, LOW);                // GET /L turns the LED off
          }
        }
      

Reference