Skip to content

Instantly share code, notes, and snippets.

@janhajk
Last active February 14, 2018 20:54
Show Gist options
  • Save janhajk/c998e10ef5db31e24a9ac25af482bf99 to your computer and use it in GitHub Desktop.
Save janhajk/c998e10ef5db31e24a9ac25af482bf99 to your computer and use it in GitHub Desktop.
ESP8266 HTTP GET-Abfrage
#include <ESP8266WiFi.h>
// Mit oder ohne Verschlüsselung wählen (Zeile ausklammern die nicht gebraucht wird)
// Für Verbindungen über Port 80
#include <WiFiClient.h>
// Für Verbindung über Verschlüsselten (SSL) Port z.B. 443
//#include <WiFiClientSecure.h>
// den Fingerprint (SHA1) kann man im Browser der entsprechenden Webseite
// innerhalb des Sicherheitszertifikates abfragen
//const char* fingerprint = "D0 26 AB 06 64 07 BC 88 56 6D 83 BE 0A 29 00 B5 10 E5 27 D2";
// W-Lan Zugansdaten
const char WIFI_SSID[] = "MEIN_WLAN_SSID";
const char WIFI_PSK[] = "MEIN_WLAN_PASSWORT";
// Die Adresse, zu welcher eine GET-Abfrage gemacht werden soll
const char* host = "www.beispiel.ch";
const int port = 80; // 80 oder 443 für SSL
// Pin Definitionen
const int LED_PIN = LED_BUILTIN;
// Client
// Unverschlüsselt oder Verschlüsselt
WiFiClient client;
//WiFiClientSecure client;
// Setup wird beim Programmstart einmal ausgeführt
void setup() {
// Set up serial console to read web page
Serial.begin(115200);
Serial.print("Starte GET Versuch...");
// LED Pin wird auf OUTPUT gesetzt, damit wir sie ein und ausschalten können
pinMode(LED_PIN, OUTPUT);
// Mit dem WLAN verbinden
connectWiFi();
// Versuchen, sich mit der Webseite zu verbinden
if ( !getPage() ) {
Serial.println("Fehler bei GET Abfrage");
}
}
// Loop wird bei jedem "Systemtakt" der ESP8266 ausgeführt
void loop() {
// Wenn der Client läuft, dann werden die Daten eingelesen und ausgegeben
if ( client.available() ) {
while (client.connected()) {
String line = client.readStringUntil('\n');
if (line == "\r") {
Serial.println("Header empfangen.");
break;
}
}
String line = client.readStringUntil('\n');
Serial.println("Antwort von host:");
Serial.println("==========");
Serial.println(line);
Serial.println("==========");
}
// Wenn der Client für die Abfrage getrennt wurde (also Abfrage beendet), dann
// wird das Wlan wieder ausgeschaltet (Strom sparen)
if ( !client.connected() ) {
Serial.println();
// Client beenden und Wlan ausschalten
client.stop();
if ( WiFi.status() != WL_DISCONNECTED ) {
WiFi.disconnect();
}
// LED ausschalten
digitalWrite(LED_PIN, HIGH);
Serial.println("GET Request beendet");
// Nach jedem "Systemtakt" eine Sekunde warten
// Anderfalls macht wird loop so schnell wie
// möglich wieder ausgeführt; das macht keinen
// Sinn da so viel Strom für nichts verbraucht wird
while(true){
delay(1000);
}
}
}
// Mit WLAN verbinden
void connectWiFi() {
byte led_status = 0; // LED ausschalten
// WLAN Modus auf Client-Modus setzten
WiFi.mode(WIFI_STA);
// Verbindung mit WLAN initieren mittels SSID und WLAN-Passwort
WiFi.begin(WIFI_SSID, WIFI_PSK);
// Versuchen mit dme WLAN zu verbinden
// Während dem Verbindungsversuch die LED Blinken lassen
while ( WiFi.status() != WL_CONNECTED ) {
digitalWrite(LED_PIN, led_status);
led_status ^= 0x01; // XOR Operation zum umschalten zwischen 0 und 1
delay(100); // Intervall in Millisekunden
}
// Wenn die Verbindung erfolgreich ist, dann LED einschalten
digitalWrite(LED_PIN, LOW);
}
// Eine HTTP GET Abfrage ausführen
bool getPage() {
Serial.print("Verbindung zu ");
Serial.println(host);
// Versuchen mit der Adresse zu verbinden
if ( !client.connect(host, port) ) {
return false;
}
// Wird nur bei SSL verwendet
//if (client.verify(fingerprint, host)) {
// Serial.println("Zertifikate stimmen überein");
//} else {
// Serial.println("Zertifikate stimmen nicht überein!");
// return false;
//}
// HTTP GET request ausführen
// index.html kann man mit dem Pfad ersetzen, z.B. /api/v1/temperatur
client.println("GET /index.html HTTP/1.1");
client.print("Host: ");
client.println(host);
client.println("Connection: close");
client.println();
return true;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment