Dies ist eine alte Version des Dokuments!


Der NodeMCU

Das ESP8266 WiFi-Modul kann in 2 verschiedenen Modi betrieben werden:

der STA - Modus

der Mikrocontroller kann mit einem bereits bestehenden Wi-Fi-Netzwerk (Access Point) verbunden werden. Man benötigt die ESP8266WiFi.h Bibliothek. Die Netzwerkverbindung mit mit Wifi.begin(ssid, password) gestartet. Außerdem wird die IP - Adresse standardmäßig über DHCP vergeben.

Oftmals ist es notwendig, wenn der Mikrocontroller z.B. durch eine Firewall muss, dass eine feste IP- Adresse und sogar eine fest vorgegebene MAC- Adresse definiert wird.

Mit der Funktion config() wird die Verbindung mit einer festen IP-Adresse versehen.

config(local_ip, gateway, subnet, dns)

  • local_ip : IP-Adresse, die wir der zuweisen möchten
  • Gateway : IP-Adresse des Gateways / Router
  • Subnet : Subnetzmaske
  • dns : IP-Adresse des DNS-Servers (Domain Name Server).

Mit

uint8_t newMACAddress[] = {0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xf2};

wifi_set_macaddr(STATION_IF, &newMACAddress[0]);

kann man die MAC - Adresse neu definieren.

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.

Einfacher Aufbau einer Internet-Verbindung und Abfrage

netzwerk_aufruf.pdf

  1. Welche IP-Adresse hat der Mikrocontroller?
  2. Dem Mikrocontroller wird eine MAC -Adresse zugewiesen: Informiere dich im Internet, welche Bedeutung eine MAC - Adresse hat und wie sie aufgebaut ist.
  3. Wie lautet das WLAN und das Passwort?
  4. Was passiert in Zeile 24- 27?
  5. Vergleiche die Zeile 35 mit 42;
  6. Informiere dich im Internet über den httpCode. Welche Bedeutung hat der httpCode 400?
  7. In Zeile 46 - 59 sind mehrere if - else - Verschachtelungen. Kennzeichne farblich zusammengehörende Klammern.

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
 
HTTPClient sender;
WiFiClientSecure wifiClient;

// WLAN-Daten
const char* ssid = "TP-LINK_AP_AF32";
const char* password = "geheim";
uint8_t newMACAddress[] = {0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xf2}; 
  
void setup() {
  Serial.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
}
 
void aufruf(){
  // String getData = "?vorname=klaus&wert1=23,5&wert2=78";
  
  String vorname = "Klaus";
  String temperatur = "23.5";
  String luftfeuchtigkeit = "78";

  //GET Data + Link
  String getData = "?vorname=" + vorname + "&wert1=" + temperatur + "&wert2=" + luftfeuchtigkeit ;
  String Link = "https://www.info-checker.de/raumklima/uhrzeit.php";
  Link = Link + getData;
  
  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!");
  }
}
 
void loop() {
  aufruf();
  delay(2000);
}

Messwerterfassung und Verbindungsaufbau mit einem WEB-Server

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
 
#include <Wire.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"
 
#include "DHT.h"
#define DHTPIN 12 //Der Sensor wird an PIN 12 angeschlossen    
#define DHTTYPE DHT22    // Es handelt sich um den DHT22 Sensor
 
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit „dth“ angesprochen
 
float temperatur;
float luftfeuchtigkeit;
String Str_luftfeuchtigkeit="";
String Str_temperatur ="";
SSD1306AsciiWire oled;
 
HTTPClient sender;
WiFiClientSecure wifiClient;
 
// WLAN-Daten
const char* ssid = "Name";
const char* password = "geheim";
 
 
int anzahl=0;
String  getData ="";
String Link="";
String AnalogData="";
String station ="Station";
 
void setup() {
  Serial.begin(9600);
 
  Wire.begin();
  Wire.setClock(400000L);
  oled.begin(&Adafruit128x32, 0x3C);
  oled.setFont(System5x7);
  oled.clear();
 
 
  dht.begin(); //DHT22 Sensor starten
 
 
  // folgendes ist nur wichtig, wenn man dem Mikrocontroller eine feste IP und MAC zuweisen möchte
  // neue MAC - Adresse  https://randomnerdtutorials.com/get-change-esp32-esp8266-mac-address-arduino/
 
  uint8_t newMACAddress[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55};
  WiFi.mode(WIFI_STA);
 
  // For Soft Access Point (AP) Mode
  //wifi_set_macaddr(SOFTAP_IF, &newMACAddress[0]);
  // For Station Mode
  wifi_set_macaddr(STATION_IF, &newMACAddress[0]);
 
  Serial.print("[NEW] ESP8266 Board MAC Address:  ");
  Serial.println(WiFi.macAddress());
 
  IPAddress ip(192, 168, 178, 53);
  IPAddress dns(192, 168, 178, 1);
  IPAddress gateway(192, 168, 178, 1);
  IPAddress subnet(255, 255, 255, 0);
  WiFi.config(ip, dns, gateway, subnet);
 // ende der Netzwerkkonfiguration
 
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print("-");
  } 
  Serial.println("WLAN- Verbindung aufgebaut.");
  Serial.println(WiFi.localIP()); 
  wifiClient.setInsecure(); // Zertifkat wird nicht abgefragt
 
//OLED anschließen https://www.14core.com/wiring-nodemcu-esp8266-12e-with-i2c-16x2-lcd-screen/
 
}
 
 void anfrage(){
// DHT abfragen
luftfeuchtigkeit = dht.readHumidity();
temperatur = dht.readTemperature();
Str_luftfeuchtigkeit= String(luftfeuchtigkeit);
Str_temperatur = String(temperatur);  
 
  // Analogen Eingang abfragen:
  int analog_wert=analogRead(A0);  
  AnalogData = String(analog_wert);   //Wert in String umwandeln
 
  //GET Data
  getData = "?Wert1=" + AnalogData + "&Wert2=" + Str_luftfeuchtigkeit+ "&Wert3=" + Str_temperatur ;
  Link = "https://www.info-checker.de/raumklima/MesswertAbspeichern.php" + getData;
 
  if (sender.begin(wifiClient, Link)) {
    int httpCode = sender.GET(); 
 
    if (httpCode > 0) {
      // Anfrage wurde gesendet und Server hat geantwortet
      // Info: Der HTTP-Code für 'OK' ist 200
      if (httpCode == 200) {
        // Hier wurden die Daten vom Server empfangen
        // String vom Webseiteninhalt speichern
        String payload = sender.getString();
        // Hier kann mit dem Wert weitergearbeitet werden
        // ist aber nicht unbedingt notwendig
        Serial.println(payload);
      }else{
        // Falls HTTP-Error
        Serial.print("HTTP-Error: " +  String(httpCode));
      }
    }
    // Wenn alles abgeschlossen ist, wird die Verbindung wieder beendet
    sender.end();
  }else {
    Serial.printf("HTTP-Verbindung konnte nicht hergestellt werden!");
  }
 }  // ende void anfrage()
 
 
 
void loop() {
anfrage();
  oled.clear();
  oled.print("Luft: ");
  oled.println(AnalogData);
  oled.print("Feuchte: ");
  oled.println(Str_luftfeuchtigkeit);
  oled.print("Temperatur: ");
  oled.println(Str_temperatur);
  delay(120000);  // alle 2 Minuten
} // ende loop()
  • arduino/webserver.1652860857.txt.gz
  • Zuletzt geändert: 2022/05/18 10:00
  • von khirling