Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
arduino:webserver [2022/05/18 09:46] – [Der NodeMCU] khirlingarduino:webserver [2022/06/27 22:42] (aktuell) khirling
Zeile 1: Zeile 1:
 +====== Webseiten ======
 +Internetseiten werden mit Hilfe von HTML (Hypertext Markup Language (Hypertext-Auszeichnungssprache)) dargestellt. Eine typische HTML ist ein reine Textdatei mit der Dateiendung .html. HTML ist eine Seitenbeschreibungssprache. Neben den Inhalten wird auch die Struktur (Art der Überschrift, Absatz, Aufzählung, Bild, Link, Tabelle etc. ) beschrieben. Da die Darstellung nicht nur auf normalen PCs, sondern auch abhängig von den unterschiedlichsten Darstellungsgeräten (Handy, Smartwatch, Displays unterschiedlichster Auflösung) funktionieren sollte, wird die Darstellung (Design) mit Hilfe von Stylesheets separat in einem CSS - Block oder einer separaten  CSS- Datei geschehen, die rein für die Darstellung, das Aussehen des Textes verantwortlich ist.
 + 
 +Alle Inhalte (HTML- Seie, CSS -Seite, Javascript - Seite, Bilder, Videos, ...) werden mit Hilfe des Protokolls HTTP (Hypertext Transfer Protokoll) bzw. HTTPS (HyperText Transfer Protocol Secure)  übertragen. 
 +
 +Der Browser fordert die Seite von einem Webserver an, dieser überträgt diese dann an den Client und wird dann nach und nach angezeigt. Datei erfolgt die Darstellung im Browser, abhängig von Voreinstellungen, die konfiguriert worden sind.
 +
 +Normalerweise sind die Seiten statisch auf der Festplatte des Servers abgelegt. Oftmals sollen die HTML-Seiten aber erst dynamisch erstellt werden, wie z.B. bei einer Suchanfrage. Der Server erkannt an der Dateiendung (.php), dass diese nicht direkt, sondern zusätzlich bearbeitet werden sollen. PHP ist eine Scriptsprache, die im Webserver integriert ist und mit dessen Hilfe auf externe Seiten oder Datenbanksysteme zugegriffen werden, sowie umfangreiche Berechnungen gemacht werden können.
 +
 +PHP kann auch gut auf Datenbanken zugreifen. MySQL ist eine Datenbankverwaltungssystem, welches die Grundlage für viele dynamische Webseiten bildet. Der Zugriff auf die Datenbank erfolgt mit Hilfe der von SQL (Structured Query Language).
 +
 +
 +
 ====== Der NodeMCU ====== ====== Der NodeMCU ======
  
-Das ESP8266 WiFi-Modul kann in 2 verschiedenen Modi betrieben werden:+Das ESP8266 WiFi-Modul kann in 2 verschiedenen Modi betrieben werden: Der Station- und dem AccessPoint - Modus.  Im AP - Modus er arbeitet selbst als Access Point, spannt ein eigenes WLAN auf und andere Stationen können darüber kommunizieren. Es ist dann allerdings kein Zugriff auf das Internet möglich. Im Station-Modus kann der Mikrocontroller  mit einem bereits bestehenden Wi-Fi-Netzwerk (Access Point) verbunden werden. 
  
-=== der STA - Modus === +Für den Station-Modus wird die ''ESP8266WiFi.h'' Bibliothek benötigt.  Die Netzwerkverbindung mit mit ''Wifi.begin(ssid, password)'' gestartet. Außerdem wird die IP - Adresse standardmäßig über DHCP vergeben. 
-  + 
-  der Mikrocontroller kann mit einem bereits bestehenden Wi-Fi-Netzwerk (Access Point) verbunden werden. Man benötigt die   +Oftmals ist es allerdings notwendig, wenn der Mikrocontroller z.B. durch eine Firewall muss, dass eine feste IP- Adresse und sogar eine fest vorgegebene MAC- Adresse definiert wird 
-''ESP8266WiFi.h'' Bibliothek.  Die Netzwerkverbindung mit mit ''begin(ssid, password, channel, bssid, connect)'' gestartet, wobei nur die ersten zwei Parameter dringend zwingend sind. + 
-Außerdem wird die IP - Adresse standardmäßig über DHCP vergeben. Oftmals ist es günstiger, wenn der Mikrocontroller eine feste IP- Adresse und sogar eine fest vorgebenen MAC- Adresse hatDann kann man mit der Funktion ''config()'' die Verbindung mit einer festen IP-Adresse versehen. +Mit der Funktion ''config()'' wird die Verbindung mit einer festen IP-Adresse versehen. 
  
 ''config(local_ip, gateway, subnet, dns)''  ''config(local_ip, gateway, subnet, dns)'' 
   * local_ip : IP-Adresse, die wir der zuweisen möchten   * local_ip : IP-Adresse, die wir der zuweisen möchten
-  * Gateway : IP-Adresse des Gateways / Router +  * gateway : IP-Adresse des Gateways / Router 
-  * Subnet : Subnetzmaske+  * subnet : Subnetzmaske
   * dns : IP-Adresse des DNS-Servers (Domain Name Server).   * dns : IP-Adresse des DNS-Servers (Domain Name Server).
  
  
 Mit  Mit 
-''uint8_t newMACAddress[] = {0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xf2};  + 
-wifi_set_macaddr(STATION_IF, &newMACAddress[0]);''+'' uint8_t newMACAddress[] = {0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xf2};''  
 + 
 +'' wifi_set_macaddr(STATION_IF, &newMACAddress[0]);'' 
 kann man die MAC - Adresse neu definieren.  kann man die MAC - Adresse neu definieren. 
 +
 +Beim Aufruf einer Webseite überprüft der Browser das Sicherheitszertifikat (SSL - Zertifikat) des Servers. Hierzu hat er eine Liste vertrauenswürdiger Zertifizierungsstellen, deren Zertifikaten der Browser vertraut. Auch im ESP8266 wäre dies möglich, allerdings ist der Aufwand (zur Konfiguration und des Rechenaufwandes) groß, v.a. da diese immer wieder erneuert werden muss. Deshalb wird mit  ''wifiClient.setInsecure();''  die Sicherheitsüberprüfung abgeschalten.
 +
  
  
-=== der AP - Modus === 
  
-er arbeitet selbst als Access Point und andere Stationen können miteinander kommunizieren. Es ist dann allerdings kein Zugriff auf das Internet möglich. 
  
  
Zeile 110: Zeile 127:
  
 ====== Messwerterfassung und  Verbindungsaufbau mit einem WEB-Server ====== ====== Messwerterfassung und  Verbindungsaufbau mit einem WEB-Server ======
-<code C>+<sxh cpp;>
 #include <ESP8266WiFi.h> #include <ESP8266WiFi.h>
 #include <ESP8266HTTPClient.h> #include <ESP8266HTTPClient.h>
Zeile 245: Zeile 262:
 } // ende loop() } // ende loop()
  
-</code>+</sxh> 
 + 
 +Nur CO2 
 +<sxh cpp> 
 + 
 +#include <ESP8266WiFi.h> 
 +#include <ESP8266HTTPClient.h> 
 +#include <Arduino.h> 
 +#include <SoftwareSerial.h> 
 +     
 + 
 +HTTPClient sender; 
 +WiFiClientSecure wifiClient; 
 +  
 +// WLAN-Daten 
 +const char* ssid = "Handy"; 
 +const char* password = "12345678"; 
 +// uint8_t newMACAddress[] = {0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xf2};  
 + 
 +  
 +SoftwareSerial softwareSerial(D7, D8); 
 +byte abfrage[] = { 0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79 }; // Befehl zur Abfrage des CO2 Sensors 
 +char antwort[9]; 
 +  
 +  
 +void setup() { 
 +  Serial.begin(9600); 
 +  softwareSerial.begin(9600); 
 + 
 +// Beginn Netzwerk und WLAN - Konfiguration  
 +  //WiFi.mode(WIFI_STA); 
 +  //wifi_set_macaddr(STATION_IF, &newMACAddress[0]); 
 +  //IPAddress ip(10, 144, 5, 2); 
 +  //IPAddress dns(10, 144, 1, 1); 
 +  //IPAddress gateway(10, 144, 1, 2); 
 +  //IPAddress subnet(255, 255, 0, 0); 
 +  //WiFi.config(ip, dns, gateway, subnet); 
 + // ende der Netzwerkkonfiguration 
 + 
 + 
 + 
 +WiFi.begin(ssid, password); 
 +while (WiFi.status() != WL_CONNECTED) { 
 +    delay(200); 
 +    Serial.print("."); 
 +  } 
 +   
 +  Serial.println("Mit dem WLAN verbunden!"); 
 +  Serial.println(); 
 +  wifiClient.setInsecure();  // sichere Verbindung wird nicht überprüft 
 +   
 +} // ende setup 
 +  
 +  
 +void loop() { 
 + delay(600000); 
 + Serial.println(" "); 
 + softwareSerial.write(abfrage, 9); 
 + softwareSerial.readBytes(antwort, 9); 
 + int resHigh = (int) antwort[2]; 
 + int resLow  = (int) antwort[3]; 
 + int CO2_ppm = (256*resHigh)+resLow; 
 + String str_CO2_ppm = String(CO2_ppm); 
 + Serial.print(CO2_ppm); 
 + Serial.println(" CO2 ppm"); 
 + Serial.println("einzelne Werte: ");   
 +  for(int i=0; i<9 ; i++){ 
 +    Serial.print((int)antwort[i]); 
 +    Serial.print("   "); 
 +  } 
 +  Serial.println(" ");  
 +  if(antwort[0]!=255){ 
 +    Serial.println("RESET ........................................................................................................................."); 
 +    delay(500); 
 +    ESP.restart(); 
 +  } 
 + 
 +// Netzwerkverbindung aufbauen 
 +//GET Data + Link 
 +  String getData = "?wert4=" + str_CO2_ppm + "&beschreibung=2022_06_28_5b"; 
 +  String Link = "https://www.info-checker.de/raumklima/MesswertAbspeichern.php"; 
 +  Link = Link + getData; 
 +   Serial.println(Link); 
 +  if (sender.begin(wifiClient, Link)) { 
 +    int httpCode = sender.GET();       
 +    if (httpCode > 0) { 
 +      if (httpCode == 200) { 
 +        String antwort = sender.getString(); 
 +        Serial.println(antwort); 
 +      }else{ 
 +        Serial.print("HTTP-Error: " +  String(httpCode)); 
 +      } 
 +    } 
 +    sender.end(); 
 +  }else { 
 +    Serial.printf("HTTP-Verbindung konnte nicht hergestellt werden!"); 
 +  } 
 + 
 + 
 + 
 + 
 + 
 +   
 +} // ende loop 
 +</sxh>
  • arduino/webserver.1652859995.txt.gz
  • Zuletzt geändert: 2022/05/18 09:46
  • von khirling