Suchcode

Verwendung eines ESP32 als HTTP-Client, um Informationen über WiFi an einen entfernten Server zu senden

Verwendung eines ESP32 als HTTP-Client, um Informationen über WiFi an einen entfernten Server zu senden

In diesem Tutorial werden wir erkunden, wie man den ESP32-Mikrocontroller als HTTP-Client verwendet, um Daten über WiFi an einen entfernten Server zu senden. Der ESP32 ist eine leistungsstarke Entwicklungsplatine, die WiFi- und Bluetooth-Funktionen kombiniert und sich ideal für IoT-Anwendungen eignet. Am Ende dieses Tutorials werden Sie in der Lage sein, HTTP-Anfragen mit benutzerdefinierten Parametern zu senden und Antworten von einem Server zu empfangen.

ESP32-38pin-1

Wir werden die Arduino IDE zur Programmierung des ESP32 verwenden, und ich werde Sie durch die notwendigen Schritte führen, um Ihre Umgebung einzurichten. Für eine visuelle Anleitung empfehle ich, das zugehörige Video anzusehen (im Video bei 00:00).

Hardware erklärt

Die Hauptkomponente dieses Projekts ist der ESP32-Mikrocontroller, speziell das WROOM32-Modul. Dieses Modul verfügt über 38 Pins, die für verschiedene Eingabe-/Ausgabeoperationen verwendet werden können. Es arbeitet mit 3,3 Volt und umfasst integrierte WiFi- und Bluetooth-Funktionen. Der ESP32 ist vielseitig einsetzbar und kann dank seiner GPIO-Pins und Kommunikationsprotokolle in vielen Anwendungen verwendet werden.

ESP32-3

Zusätzlich zum ESP32 benötigen Sie möglicherweise einen USB-zu-Seriell-Converter zum Programmieren und Debuggen. Das Modul enthält auch einen Spannungsregler, der sicherstellt, dass der Mikrocontroller eine stabile 3,3 V Versorgung aus einer höheren Spannungsquelle erhält. Insgesamt ist der ESP32 ein gut ausgestatteter Mikrocontroller, der sich für verschiedene Projekte eignet.

Datenblattdetails

Hersteller Espressif Systems
Teilnummer ESP32-WROOM-32
Logik/I/O-Spannung 3,3 V
Versorgungsspannung 5 V (max)
Ausgangsstrom (pro Kanal) 12 mA
Spitzenstrom (pro Kanal) 160 mA
PWM-Frequenzrichtlinien 1 kHz
Eingangslogikschwellen 0,3 * VDD(niedrig), 0,7 * VDD(hoc)
Spannungsabfall / RDS(on)/ Sättigung 0,5 V
Thermische Grenzen 125 °C
Paket QFN
Hinweise / Varianten Mehrere Blitzgrößen verfügbar
ESP32-2
  • Stellen Sie sicher, dass die Spannungspegel korrekt sind (3,3 V), um eine Beschädigung des ESP32 zu vermeiden.
  • Verwenden Sie geeignete Entkopplungskondensatoren in der Nähe der Stromanschlüsse für einen stabilen Betrieb.
  • Implementieren Sie eine Wärmeableitung, wenn das Modul nahe seiner maximalen Strombelastung betrieben wird.
  • Nutzen Sie das integrierte WiFi des ESP32 für eine einfache Netzwerkverbindung.
  • Seien Sie vorsichtig mit den GPIO-Pin-Konfigurationen, um Kurzschlüsse zu vermeiden.
  • Teste mit einfachen Skizzen, um die Funktionalität vor komplexen Integrationen zu bestätigen.

Verdrahtungsanweisungen

Um das ESP32 für dieses Projekt zu verdrahten, beginnen Sie damit, den Massepin des ESP32 mit der Masse Ihrer Stromversorgung zu verbinden. Verbinden Sie anschließend die 5V-Stromversorgung mit dem Vin- oder V5-Pin des ESP32, der den internen Spannungsregler speist und 3,3V an den Mikrocontroller liefert.

Für die HTTP-Client-Funktionalität stellen Sie sicher, dass Ihr ESP32 mit einem WLAN-Netzwerk verbunden ist. Sie müssen die entsprechenden Pins für alle zusätzlichen Komponenten anschließen, die Sie möglicherweise verwenden, wie Sensoren oder LEDs. Schließen Sie beispielsweise eine LED an GPIO-Pin 2 an, mit einem Widerstand in Reihe, um den Strom zu begrenzen. Der längere Bein (Anode) der LED sollte mit Pin 2 verbunden werden, während das kürzere Bein (Kathode) mit Masse verbunden wird.

Codebeispiele & Anleitung

Im bereitgestellten Codeausschnitt initialisieren wir den HTTP-Client und definieren wichtige Kennzeichen wiemainURL, die die URL enthält, an die wir die Anfrage senden, unduser, das Benutzerdaten enthält. Der Code richtet außerdem den ESP32 ein, um sich mit einem bestimmten WLAN-Netzwerk zu verbinden.

String mainURL ="http://ddas.cc/httpTest/?";
String user="user=ahmad22";

Hier,mainURList der Endpoint, den wir anvisieren, währenduserhält den Benutzerparameter, der in der HTTP-Anfrage gesendet wird.

In dersetup()Funktion, wir beginnen die serielle Kommunikation und richten die WiFi-Verbindung ein. Wir bereiten auch die HTTP-Anfrage vor, indem wir eine Instanz des HTTP-Clients erstellen.

void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("Robojax", "Your password");
}

Dieser Abschnitt initialisiert den seriellen Monitor zur Fehlerbehebung und verbindet sich mit dem WiFi-Netzwerk. Die Anmeldedaten sind definiert in deraddAP()Methode.

In derloop()Funktion überprüfen wir eine erfolgreiche WiFi-Verbindung und fahren fort, die HTTP GET-Anfrage zu senden. Die Parameter umfassen die Benutzer- und Temperaturwerte.

if (http.begin(client, mainURL+user+"&temp="+temperature+"&type="+type)) {
  int httpCode = http.GET();}

Dieser Code erstellt die vollständige URL mit den Abfrageparametern und führt die GET-Anfrage aus. Bei Erfolg wird die Antwort des Servers abgerufen.

Demonstration / Was Sie erwarten können

Wenn der ESP32 eingeschaltet wird und das Programm läuft, sollte es sich mit dem angegebenen WiFi-Netzwerk verbinden und eine HTTP GET-Anfrage an den Server senden. Sie können die Ausgabe im Serial Monitor überwachen, wo Sie den HTTP-Statuscode und die Antwortpayload vom Server sehen werden. Häufige Probleme können falsche WiFi-Anmeldeinformationen oder ein unerreichbarer Server sein (im Video um 12:30).

Video-Zeiten

  • 00:00 Start
  • 00:53 Einführung
  • 05:04 5V- und 3,3V-Pins
  • 08:38 Funktionen erklärt
  • 14:03 Pins auf dem Datenblatt
  • 17:00 Blink Beispiel
  • 19:14 Blink-Beispiel mit externem LED
  • 21:00 HTTP-Client-Test

Bilder

ESP32-1
ESP32-1
ESP32-2
ESP32-2
ESP32-3
ESP32-3
ESP32-38pin-1
ESP32-38pin-1
ESP32-38pin-2
ESP32-38pin-2
241-ESP32 HTTP Client code example
Sprache: C++
/*
 * ESP32 HTTP Client example
 * This example is part of Introduction to ESP32 WiFi, Bluetooth Microcontroller board
📚⬇️ Download and resource page https://robojax.com/RJT211
watch full video https://youtu.be/--Fj8QDlGuQ
 * 
 * Updated/Written by Ahmad Shamshiri 
 * On August 25, 2019 in Ajax, Ontario, Canada
 * Watch video instruction for this code:
 * https://youtu.be/--Fj8QDlGuQ
 * 
 * 
 Get this code and other Arduino codes from Robojax.com
Learn Arduino step by step in a structured course with all material, wiring diagrams, and libraries
all in one place. 

If you found this tutorial helpful, please support me so I can continue creating 
content like this. 

or make a donation using PayPal http://robojax.com/L/?id=64

 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

#include <ESP8266HTTPClient.h>

#include <WiFiClient.h>

ESP8266WiFiMulti WiFiMulti;
String mainURL ="http://ddas.cc/httpTest/?";
String user="user=ahmad22";
float temperature=45.3;
char type='j';

void setup() {

  Serial.begin(115200);
  // Serial.setDebugOutput(true);

  Serial.println();
  Serial.println();
  Serial.println();

  for (uint8_t t = 4; t > 0; t--) {
    Serial.printf("[SETUP] WAIT %d...\n", t);
    Serial.flush();
    delay(1000);
  }

  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("Robojax", "YOur password");

}

void loop() {
  // wait for WiFi connection
  if ((WiFiMulti.run() == WL_CONNECTED)) {

    WiFiClient client;

    HTTPClient http;

    Serial.print("[HTTP] begin...\n");
    if (http.begin(client, mainURL+user+"&temp="+temperature+"&type="+type)) {  // HTTP


      Serial.print("[HTTP] GET...\n");
      // start connection and send HTTP header
      int httpCode = http.GET();

      // httpCode will be negative on error
      if (httpCode > 0) {
        // HTTP header has been send and Server response header has been handled
        Serial.printf("[HTTP] GET... code: %d\n", httpCode);

        // file found at server
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
          String payload = http.getString();
          Serial.println(payload);
        }
      } else {
        Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
      }

      http.end();
    } else {
      Serial.printf("[HTTP} Unable to connect\n");
    }
  }

  delay(10000);
}

Dinge, die Sie vielleicht brauchen

Ressourcen & Referenzen

Dateien📁

Datenblatt (pdf)