Last active
February 14, 2018 20:54
-
-
Save janhajk/c998e10ef5db31e24a9ac25af482bf99 to your computer and use it in GitHub Desktop.
ESP8266 HTTP GET-Abfrage
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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