Skip to content

Instantly share code, notes, and snippets.

@janhajk
Last active February 14, 2018 20:54

Revisions

  1. janhajk revised this gist Feb 14, 2018. 1 changed file with 43 additions and 10 deletions.
    53 changes: 43 additions & 10 deletions esp8266_http_get.ino
    Original file line number Diff line number Diff line change
    @@ -1,20 +1,34 @@
    #include <ESP8266WiFi.h>

    #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[] = "MEINE_WLAN_SSID";
    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 http_site[] = "www.beispiel.ch";
    const int http_port = 80;
    const char* host = "www.beispiel.ch";
    const int port = 80; // 80 oder 443 für SSL

    // Pin Definitionen
    const int LED_PIN = LED_BUILTIN;

    // Globale Variablen
    // Client
    // Unverschlüsselt oder Verschlüsselt
    WiFiClient client;
    //WiFiClientSecure client;


    // Setup wird beim Programmstart einmal ausgeführt
    void setup() {
    @@ -39,8 +53,18 @@ void loop() {

    // Wenn der Client läuft, dann werden die Daten eingelesen und ausgegeben
    if ( client.available() ) {
    char c = client.read();
    Serial.print(c);
    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
    @@ -94,17 +118,26 @@ void connectWiFi() {

    // Eine HTTP GET Abfrage ausführen
    bool getPage() {

    Serial.print("Verbindung zu ");
    Serial.println(host);
    // Versuchen mit der Adresse zu verbinden
    if ( !client.connect(http_site, http_port) ) {
    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(http_site);
    client.println(host);
    client.println("Connection: close");
    client.println();

  2. janhajk revised this gist Feb 14, 2018. 1 changed file with 6 additions and 6 deletions.
    12 changes: 6 additions & 6 deletions esp8266_http_get.ino
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,4 @@

    #include <ESP8266WiFi.h>
    #include <WiFiClient.h>

    @@ -10,15 +11,15 @@ const char http_site[] = "www.beispiel.ch";
    const int http_port = 80;

    // Pin Definitionen
    const int LED_PIN = 5;
    const int LED_PIN = LED_BUILTIN;

    // Globale Variablen
    WiFiClient client;

    // Setup wird beim Programmstart einmal ausgeführt
    void setup() {
    // Set up serial console to read web page
    Serial.begin(9600);
    Serial.begin(115200);
    Serial.print("Starte GET Versuch...");

    // LED Pin wird auf OUTPUT gesetzt, damit wir sie ein und ausschalten können
    @@ -54,7 +55,7 @@ void loop() {
    }

    // LED ausschalten
    digitalWrite(LED_PIN, LOW);
    digitalWrite(LED_PIN, HIGH);

    Serial.println("GET Request beendet");

    @@ -88,7 +89,7 @@ void connectWiFi() {
    }

    // Wenn die Verbindung erfolgreich ist, dann LED einschalten
    digitalWrite(LED_PIN, HIGH);
    digitalWrite(LED_PIN, LOW);
    }

    // Eine HTTP GET Abfrage ausführen
    @@ -108,5 +109,4 @@ bool getPage() {
    client.println();

    return true;
    }

    }
  3. janhajk created this gist Feb 13, 2018.
    112 changes: 112 additions & 0 deletions esp8266_http_get.ino
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,112 @@
    #include <ESP8266WiFi.h>
    #include <WiFiClient.h>

    // W-Lan Zugansdaten
    const char WIFI_SSID[] = "MEINE_WLAN_SSID";
    const char WIFI_PSK[] = "MEIN_WLAN_PASSWORT";

    // Die Adresse, zu welcher eine GET-Abfrage gemacht werden soll
    const char http_site[] = "www.beispiel.ch";
    const int http_port = 80;

    // Pin Definitionen
    const int LED_PIN = 5;

    // Globale Variablen
    WiFiClient client;

    // Setup wird beim Programmstart einmal ausgeführt
    void setup() {
    // Set up serial console to read web page
    Serial.begin(9600);
    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() ) {
    char c = client.read();
    Serial.print(c);
    }

    // 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, LOW);

    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, HIGH);
    }

    // Eine HTTP GET Abfrage ausführen
    bool getPage() {

    // Versuchen mit der Adresse zu verbinden
    if ( !client.connect(http_site, http_port) ) {
    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(http_site);
    client.println("Connection: close");
    client.println();

    return true;
    }