Skip to content
ICT Fusion Knowledgebase

Wi-fi

Wat de ESP32 (en ESP8266) tot een geweldig IoT-apparaat maakt, is de mogelijkheid om via Wi-fi verbinding te maken met het internet. In het Arduino-platform voor de ESP32 zijn al enkele bibliotheken inbegrepen die je hiervoor eenvoudig kunt gebruiken.

De eenvoudigste sketch die je kunt gebruiken is de volgende:

#include <WiFi.h>

#define WIFI_SSID      "The name of your Wi-fi network"
#define WIFI_PASSWORD  "the password of your Wi-fi network"

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  // Make sure the built-in LED is off on start-up.
  digitalWrite(LED_BUILTIN, HIGH);

  // Let the ESP32 connects to an access point
  WiFi.mode(WIFI_STA);

  // Your WeMos tries to connect to your Wi-fi network
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);

  // Keep the while-statement alive as long as we are NOT connected
  // to the Wi-fi network.
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
  }

  // If we get out of the while-loop it means that we have a connection!
  // Now move on to the loop-function to blink the LED.
}

void loop() {
  digitalWrite(LED_BUILTIN, LOW); // LED on
  delay(500);
  digitalWrite(LED_BUILTIN, HIGH); // LED off
  delay(500);
}

Van boven naar beneden gebeurt het volgende:

  • Include het header‑bestand ‘WiFi.h’, een standaard bibliotheek van de ESP32 met functies om met internet te verbinden.
  • De WiFi-modus wordt ingesteld op ‘WIFI_STA’, dit betekent dat de ESP32 als station werkt en een access point zal zoeken.
  • De WiFi.begin(…, …) functie maakt verbinding met het internet met de opgegeven SSID en wachtwoord.
  • De while‑lus blijft het programma wachten totdat de Wi‑fi verbinding werkt.
  • En tenslotte de loop()-functie:
    • LED aan
    • Wacht…
    • LED uit
    • Wacht…

Omdat de while‑lus in de setup()-functie blijft herhalen zolang er geen verbinding is, heb je alleen een knipperende LED wanneer er daadwerkelijk verbinding is.

GET-request

Wanneer je verbonden bent met het internet kun je, net als een webbrowser, requests uitvoeren om data op te halen of te versturen.

Dit voorbeeld toont de ontvangen data van de server via de seriële interface, vergelijkbaar met tekst printen in Java/Python/… Tijdens het uitvoeren van de sketch kun je de ‘Serial Monitor’ openen om de tekst te zien:

Open Serial Monitor in Arduino IDE

Zorg dat je ‘115200 baud’ als snelheid hebt geselecteerd:

Select baudrate in Arduino IDE

Nu kun je een GET-request uitvoeren met de volgende sketch:

#include <WiFi.h>
#include <HTTPClient.h>
#include <WiFiClient.h>

#define WIFI_SSID      "The name of your Wi-fi network"
#define WIFI_PASSWORD  "the password of your Wi-fi network"

void setup() {
  // Initialize the Serial-connection on a speed of 115200 b/s
  Serial.begin(115200);

  // Let the ESP32 connects to an access point
  WiFi.mode(WIFI_STA);

  // Your ESP32 tries to connect to your Wi-fi network
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);

  // Keep the while-statement alive as long as we are NOT connected
  // to the Wi-fi network.
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
  }
}

void loop() {
  // Initialize a Wi-fi client & http client
  WiFiClient client;
  HTTPClient httpClient;

  // Set the URL of where the call should be made to.
  httpClient.begin(client, "http://koffiepunthva.nl/api");

  // Make the GET-request, this returns the HTTP-code.
  int httpCode = httpClient.GET();

  // Check if the response is fine.
  if(httpCode == HTTP_CODE_OK) { // HTTP_CODE_OK == 200
    // Print the body of the GET-request response.
    String payload = httpClient.getString();
    Serial.println(payload);
  } else {
    Serial.println("Unable to connect :(");
  }

  delay(5000);
}

Wat je in deze code ziet:

  • De setup()-functie is bijna hetzelfde als het vorige voorbeeld, alleen is de LED‑initialisatie verwijderd.
  • In de loop()-functie:
    • WiFiClient en HTTPclient worden gebruikt om de request op te zetten.
    • httpClient.begin(): maakt de request naar http://koffiepunthva.nl/api/
      • Het uivoeren naar een https-server is ingewikkelder, daarom is dit een voorbeeld met een http-server.
    • httpClient.GET(): ontvangt en controleert de HTTP‑statuscode.
    • httpClient.getString(): haalt de data (payload) van de request op.

JSON parsing

Wanneer je met API endpoints werkt, moet je vaak met opgemaakte tekst omgaan, een veelgebruikt formaat van tekst is JSON. Een voorbeeld van JSON is:

{
    "coffee": 0,
    "tea": 0,
    "others": 0,
    "chocolate": 0,
    "choco_creme": 0,
    "water": 0
}

Om deze tekst te parseren naar iets nuttigs is een bibliotheek beschikbaar. Je kunt deze installeren door naar het menu in de Arduino IDE ‘Sketch’ > ‘Include library’ > ‘Manage libraries…’ te gaan en ‘ArduinoJson’ te zoeken en deze bibliotheek te installeren:

Installing the ArduinoJSON library

Volg deze stappen om de JSON-parser in de GET-request sketch te integreren:

Include de bibliotheek:

#include <ArduinoJson.h>

Declareer een buffer in je programma die de data opslaat, zorg ervoor dat deze groot genoeg is voor de inhoud:

DynamicJsonDocument jsonBuffer(1024);

Deserialiseer (parse) de payload van de GET-request in de jsonBuffer:

deserializeJson(jsonBuffer, payload);

Haal een waarde uit de JSON, bijvoorbeeld coffee:

int coffeeCupsCount = jsonBuffer["coffee"];
Serial.print("Cups of coffee: ");
Serial.println(coffeeCupsCount);

Of tea:

int teaCupsCount = jsonBuffer["tea"];
Serial.print("Cups of tea: ");
Serial.println(teaCupsCount);