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 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 hat. Dann kann man mit der Funktion config() 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.1652860024.txt.gz
  • Zuletzt geändert: 2022/05/18 09:47
  • von khirling