Bemerkung

Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.

  • Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [ hier ] und treten Sie heute bei!

WiFi-gesteuerte LED (Access Point)

Dieses Projekt ermöglicht es Ihnen, eine LED über eine Web-Oberfläche zu steuern. Das Arduino-Board fungiert als WiFi-Zugangspunkt und erstellt sein eigenes lokales Netzwerk, mit dem Sie sich über einen Webbrowser verbinden können. Einmal verbunden, können Sie im Webbrowser die IP-Adresse des Geräts aufrufen, wo Sie Optionen finden, um eine LED (an Pin 13 des Boards angeschlossen) ein- und auszuschalten. Das Projekt bietet Echtzeit-Feedback über den LED-Status über den seriellen Monitor, was das Debuggen und Verstehen des Ablaufs der Operationen erleichtert.

1. Laden Sie den Code hoch

Öffnen Sie die Datei 01-wifi_ap.ino im Pfad elite-explorer-kit-main\r4_new_feature\01-wifi_ap oder kopieren Sie diesen Code in die Arduino IDE.

Bemerkung

Wi-Fi® wird über die integrierte WiFiS3-Bibliothek aktiviert, die mit dem Arduino UNO R4 Core geliefert wird. Die Installation des Cores installiert automatisch die WiFiS3-Bibliothek.

Sie müssen auch arduino_secrets.h erstellen oder bearbeiten, ersetzen Sie SECRET_SSID und SECRET_PASS durch den Namen und das Passwort Ihres WiFi-Zugangspunkts. Die Datei sollte enthalten:

//arduino_secrets.h header file
#define SECRET_SSID "yournetwork"
#define SECRET_PASS "yourpassword"

2. Code-Erklärung

  1. Importieren erforderlicher Bibliotheken

    Importieren der WiFiS3-Bibliothek für Wi-Fi-Funktionalitäten und arduino_secrets.h für sensible Daten wie Passwörter.

    #include "WiFiS3.h"
    #include "arduino_secrets.h"
    
  2. Konfiguration und Variableninitialisierung

    Definieren Sie WiFi-SSID, Passwort und Schlüsselindex sowie den LED-Pin und den WiFi-Status.

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

    Initialisieren der seriellen Kommunikation und Konfigurieren des Wi-Fi-Moduls.

    void setup() {
    
      // ... setup code ...
      // Create access point
      status = WiFi.beginAP(ssid, pass);
      // ... error handling ...
      // start the web server on port 80
      server.begin();
    }
    

    Wir überprüfen auch, ob die Firmware-Version von Uno R4 WiFi auf dem neuesten Stand ist. Wenn nicht, wird eine Aufforderung zum Upgrade angezeigt. Sie können Aktualisieren der Radio-Modul-Firmware auf Ihrem UNO R4 WiFi-Board für das Firmware-Upgrade konsultieren.

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

    Sie möchten möglicherweise den folgenden Code ändern, um die Standard-IP von Arduino ändern zu können.

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

    Die Funktion loop() im Arduino-Code führt mehrere Schlüsseloperationen aus, insbesondere:

    1. Überprüfen, ob ein Gerät sich mit dem Zugangspunkt verbunden oder getrennt hat.

    2. Abhören von eingehenden Clients, die HTTP-Anfragen stellen.

    3. Lesen der Clientdaten und Ausführen von Aktionen basierend auf diesen Daten – wie das Ein- oder Ausschalten einer LED.

    Hier zerlegen wir die Funktion loop(), um diese Schritte verständlicher zu machen.

    1. Überprüfen des WiFi-Status

      Zuerst überprüft der Code, ob sich der WiFi-Status geändert hat. Wenn sich ein Gerät verbunden oder getrennt hat, wird die Information entsprechend auf dem seriellen Monitor angezeigt.

      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. Abhören von eingehenden Clients

      WiFiClient client = server.available(); wartet auf eingehende Clients.

      WiFiClient client = server.available();
      
    3. Behandlung von Clientanfragen

      Lauscht auf eingehende Clients und liefert ihnen die HTML-Webseite. Wenn ein Benutzer auf den Link „Hier klicken, um die LED einzuschalten“ oder „Hier klicken, um die LED auszuschalten“ auf der bereitgestellten Webseite klickt, wird eine HTTP-GET-Anfrage an den Arduino-Server gesendet. Speziell werden die URLs „http://yourAddress/H“ zum Einschalten der LED und „http://yourAddress/L“ zum Ausschalten aufgerufen.

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

      Der Arduino-Code lauscht auf diese eingehenden GET-Anfragen. Wenn er am Ende einer eingehenden Textzeile (HTTP-Header) GET /H erkennt, setzt er die mit Pin 13 verbundene LED auf HIGH und schaltet sie somit ein. Ähnlich wird die LED auf LOW gesetzt und somit ausgeschaltet, wenn GET /L erkannt wird.

      while (client.connected()) {            // loop while the client's connected
        delayMicroseconds(10);                // This is required for the Arduino Nano RP2040 Connect - otherwise it will loop so fast that SPI will never be served.
        if (client.available()) {             // if there's bytes to read from the client,
          char c = client.read();             // read a byte, then
          Serial.write(c);                    // print it out to the serial monitor
          if (c == '\n') {                    // if the byte is a newline character
            ...
            }
            else {      // if you got a newline, then clear 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
          }
        }
      

Referenz