Cerca codice

Utilizzare un ESP32 come Client HTTP per inviare informazioni via WiFi a un server remoto

Utilizzare un ESP32 come Client HTTP per inviare informazioni via WiFi a un server remoto

In questo tutorial esploreremo come utilizzare il microcontrollore ESP32 come client HTTP per inviare dati a un server remoto tramite WiFi. L'ESP32 è una potente scheda di sviluppo che combina capacità WiFi e Bluetooth, rendendola ideale per applicazioni IoT. Alla fine di questo tutorial, sarai in grado di inviare richieste HTTP con parametri definiti dall'utente e ricevere risposte da un server.

ESP32-38pin-1

Utilizzeremo l'IDE di Arduino per programmare l'ESP32 e ti guiderò attraverso i passaggi necessari per impostare il tuo ambiente. Per una passeggiata visiva, ti consiglio di dare un'occhiata al video associato (nel video a :00).

Hardware spiegato

Il componente principale di questo progetto è il microcontrollore ESP32, specificamente il modulo WROOM32. Questo modulo dispone di 38 pin che possono essere utilizzati per varie operazioni di input/output. Funziona a 3,3 volt e include capacità WiFi e Bluetooth integrate. L'ESP32 è versatile e può essere utilizzato in molte applicazioni, grazie ai suoi pin GPIO e ai protocolli di comunicazione.

ESP32-3

Oltre all'ESP32, potresti avere bisogno di un convertitore USB-seriale per la programmazione e il debugging. Il modulo contiene anche un regolatore di tensione, che garantisce che il microcontrollore riceva un'alimentazione stabile di 3.3V da una sorgente di tensione più alta. In generale, l'ESP32 è un microcontrollore ben equipaggiato adatto a vari progetti.

Dettagli della scheda tecnica

Produttore Espressif Systems
Numero di parte ESP32-WROOM-32
Tensione logica/IO 3,3 V
Tensione di alimentazione 5 V (max)
Corrente di uscita (per canale) 12 mA
Corrente di picco (per canale) 160 mA
Guida sulla frequenza PWM 1 kHz
Soglie logiche di ingresso 0,3 * VDD(basso), 0,7 * VDD(alto)
Caduta di tensione / RDS(on)/ saturazione 0,5 V
Limiti termici 125 °C
Pacchetto QFN
Note / varianti Disponibile in varie dimensioni di flash.
ESP32-2
  • Assicurati di avere livelli di tensione corretti (3.3V) per evitare di danneggiare l'ESP32.
  • Utilizzare condensatori di accoppiamento appropriati vicino ai pin di alimentazione per un funzionamento stabile.
  • Implementa il raffreddamento se il modulo opera vicino ai suoi valori nominali di corrente massima.
  • Utilizza il WiFi integrato dell'ESP32 per una facile connettività di rete.
  • Fai attenzione alle configurazioni dei pin GPIO per prevenire i cortocircuiti.
  • Testa con schizzi semplici per confermare la funzionalità prima di integrazioni complesse.

Istruzioni di cablaggio

Per cablare l'ESP32 per questo progetto, inizia collegando il pin di terra dell'ESP32 alla terra della tua alimentazione. Successivamente, collega l'alimentazione 5V al pin Vin o V5 sull'ESP32, che alimenterà il regolatore di tensione interno e fornirà 3,3V al microcontrollore.

Per la funzionalità del client HTTP, assicurati che il tuo ESP32 sia connesso a una rete WiFi. Dovrai collegare i pin appropriati per eventuali componenti aggiuntivi che potresti utilizzare, come sensori o LED. Ad esempio, collega un LED al pin GPIO 2, con una resistenza in serie per limitare la corrente. Il gambo più lungo (anodo) del LED dovrebbe collegarsi al pin 2, mentre il gambo più corto (catodo) si collega a terra.

Esempi di codice e guida passo-passo

Nel frammento di codice fornito, inizializziamo il client HTTP e definiamo identificatori chiave comemainURL, che contiene l'URL a cui stiamo inviando la richiesta, euser, che contiene informazioni sugli utenti. Il codice configura anche l'ESP32 per connettersi a una rete WiFi specificata.

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

Qui,mainURLè il punto finale che stiamo mirando, mentreusercontiene il parametro utente che verrà inviato nella richiesta HTTP.

Nellasetup()funzione, iniziamo la comunicazione seriale e impostiamo la connessione WiFi. Prepariamo anche la richiesta HTTP creando un'istanza del client HTTP.

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

Questa sezione inizializza il monitor seriale per il debug e si connette alla rete WiFi. Le credenziali sono definite neladdAP()metodo.

Nellaloop()funzione, verifichiamo una connessione WiFi riuscita e procediamo a inviare la richiesta HTTP GET. I parametri includono l'utente e i valori di temperatura.

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

Questo codice costruisce l'URL completo con i parametri di query ed esegue la richiesta GET. Se ha successo, recupera la risposta del server.

Dimostrazione / Cosa Aspettarsi

Quando l'ESP32 è acceso e il programma è in esecuzione, dovrebbe connettersi alla rete WiFi specificata e inviare una richiesta HTTP GET al server. Puoi monitorare l'output nel Monitor Seriale, dove vedrai il codice di stato HTTP e il payload della risposta dal server. I problemi comuni potrebbero includere credenziali WiFi errate o un server non raggiungibile (nel video alle 12:30).

Timestamp video

  • 00:00 Inizio
  • 00:53 Introduzione
  • 05:04 pin 5V e 3.3V
  • 08:38 Caratteristiche spiegate
  • 14:03 Pin su Datasheet
  • 17:00 Esempio Blink
  • 19:14 Esempio di lampeggio con LED esterno
  • 21:00 Test del Client HTTP

Immagini

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
Lingua: 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);
}

Cose di cui potresti avere bisogno

Risorse e riferimenti

File📁

Scheda tecnica (pdf)