http-get.ino

Arduino MKR WiFi 1010 · Archivo : http-get.ino · Lenguaje : Arduino · Uso : Consulter une API HTTP depuis le WiFi

Recuperar datos web con la MKR WiFi 1010: conectarse al punto de acceso, abrir un socket TCP en el puerto 80, hacer un GET a una API meteorológica gratuita y volcar la respuesta al puerto serie. La plantilla de todo cliente HTTP embarcado sobrio.

Hardware

Una Arduino MKR WiFi 1010 (microcontrolador SAMD21, módulo Wi-Fi WINC1500, sin Bluetooth, alimentación USB o LiPo en J6). MKR WiFi 1010 en una red con salida a Internet; sin registro para la API usada.

Cableado

Sin cableado; comprueba que el WiFi permite el puerto de salida (80); algunos portales cautivos lo bloquean.

Funcionamiento

WiFiClient implementa Print/Stream: la cabecera HTTP se escribe a mano y se lee hasta cierre o timeout. La respuesta JSON cruda se imprime tal cual, lista para parsear.

Ejecución

Instala Arduino SAMD Boards y la librería WiFi101, selecciona la placa y carga. El Wi-Fi funciona solo en 2,4 GHz: comprueba que tu punto de acceso no sea solo de 5 GHz.

Variantes

Pásate a WiFiSSLClient en el puerto 443 para HTTPS (necesita el certificado raíz en flash) o añade un parser JSON mínimo tipo ArduinoJson.

http-get.ino

// Client HTTP sur le reseau local/WAN (MKR WiFi 1010, WiFi101).
#include <SPI.h>
#include <WiFi101.h>

const char SSID[] = "MonReseau";
const char PASS[] = "motdepassewifi";
const char HOTE[] = "api.open-meteo.com";
const char CHEMIN[] = "/v1/forecast?latitude=45.5&longitude=4.8&current=temperature_2m";

WiFiClient client;

void connexion() {
  WiFi.begin(WPA_PASS_PHRASE, SSID, PASS);
  unsigned long t = millis();
  while (WiFi.status() != WL_CONNECTED && millis() - t < 20000) delay(100);
}

void setup() {
  Serial.begin(9600);
  while (!Serial);
  connexion();
  if (WiFi.status() != WL_CONNECTED) {
    Serial.println(F("WiFi indisponible"));
    while (true);
  }
  Serial.println(WiFi.localIP());
  if (client.connect(HOTE, 80)) {
    client.print(String("GET ") + CHEMIN + " HTTP/1.1\r\n" +
                 "Host: " + HOTE + "\r\nConnection: close\r\n\r\n");
    unsigned long t = millis();
    while (client.connected() && millis() - t < 10000)
      while (client.available()) Serial.write(client.read());
    client.stop();
  } else Serial.println(F("TCP KO"));
}

void loop() {}

← Volver a la ficha