Projekt steht nicht zum kostenlosen Download zur Verfügung! Wenn Sie den Softwareteil des Projekts mit den auf der angegebenen Seite beschriebenen Funktionen erwerben möchten, wenden Sie sich an: martinius96@gmail.com
OPC-UA HTTP Webserver Arduino Ethernet ESP8266 ESP32 HTML Publish Subscribe

OPC UA - ESP8266


  • OPC UA existiert seit 2008. Es handelt sich um eine Client-> Server-Architektur, die Multiplattform-Anwendungen unterstützt.
  • Die Implementierung bietet die Verbindung von Clients zum Webserver. Clients kommunizieren mit der HTTP-POST-Methode und verkaufen die Daten im XML-Format (SOAP) an den Server.
  • Der Webserver kann auch auf Clientanforderungen mit einem verwendbaren Wert antworten.
  • Architektur hat Anwendungen in der Mikroprozessorkommunikation, in Automatisierungssystemen mit SPS und in einfachen Sensornetzwerken.
  • In einer erweiterten Implementierung ist es auch möglich, eine HTTPS-Verbindung zum Überprüfen des WebServer / Client / Server-Zertifikats zu verwenden.
  • Die Demonstrationsimplementierung zeigt die einfache Konnektivität zwischen Karten auf der ESP8266-Plattform mithilfe eines HTTP-Webservers.
  • Die ESP8266-Serverplatine verwendet auch die AP-Zugriffspunktimplementierung. Die angeschlossenen Geräte befinden sich somit in einem Netzwerk mit dem Server und das Netzwerk ist nach dem WPA / WPA2-PSK-Protokoll verschlüsselt.
  • ESP8266 sendet ein WiFi-Netzwerk mit dem Namen ESP_WiFi und dem Kennwort thereisnospoon . Die Serveradresse lautet: 192.168.4.1 an Port 80, wobei eine Adresse aus dem Bereich 192.168.4.X s zugewiesen wird 24-Bit-Netzwerkmaske.
  • Serverseiten:
  • / - Der Stammspeicherort (192.168.4.1), die Seite kann von einem Client auf einem Computer oder einem anderen Gerät verwendet werden, um Echtzeitwerte von Clients anzuzeigen.
  • /send_data/ - Seite zum Empfangen von Daten, die XML-Daten von Clients erwarten
  • /get_data/ - Spezifische Seite für Informationsanfragen - Der Webserver antwortet mit einem Wert auf Anfrage
  • Im Projekt implementierte Clienttypen:
  • Publish_Client - sendet Daten vom ADC-Konverter an den Server, druckt die empfangene Serverantwort aus - bestätigt den Empfang der gesendeten Daten
  • Publish_Client_UDP - Daten vom ADC-Konverter an den Server senden, Serverantwort überspringen (verarbeiten, empfangene Antwort nicht schreiben, nicht damit arbeiten)
  • Subscriber_Client - führt eine HTTP-Abfrage an den Server durch - der Server antwortet mit einem vom Client empfangenen Wert, der Wert kann beispielsweise eine Temperatur sein. Es ist möglich, damit zu arbeiten und sie zu verwenden (Belüftung, Kesselumschaltung, Heizung, Bewässerung, Maschinensteuerung)
  • Blockdiagramm der OPC-UA-Implementierung:

    (SOAP) XML ENCODED HTTP PAYLOAD - OPC-UA

    Der Webserver-Quellcode auf der Seite enthält keinen XML-Parser (SOAP). XML-Parser-Softwareversionen und erweiterte Implementierungen sind nicht kostenlos verfügbar. Ich biete Software-Versionen für ESP8266 / ESP32 / Arduino + Ethernet an. Wenn Sie ein Projekt kaufen möchten, wenden Sie sich bitte an: martinius96@gmail.com

    ESP8266 OPC-UA Webserver



    ESP8266 OPC-UA SOAP (XML) Webserver - AP MODE - NO XML SOAP PARSER


    //ESP8266 (NodeMCU) - OPC-UA (SOAP) webserver (NO XML parser) AP MODE
    //Autor: martinius96
    //Web: https://arduino.php5.sk
    
    #include <ESP8266WiFi.h>
    #include <ESP8266WebServer.h>
    ESP8266WebServer server(80);
    const char* ssid = "ESP_WiFi";
    const char* password = "thereisnospoon";
    
    void setup() {
      Serial.begin(115200);
      WiFi.softAP(ssid, password);
      IPAddress myIP = WiFi.softAPIP();
      Serial.println(myIP);
      server.on("/body", handleBody);
      server.begin();
      Serial.println("Server listening");
    }
    
    void loop() {
      server.handleClient();
    }
    
    void handleBody() {
      if (server.hasArg("plain") == false) {
        server.send(200, "text/plain", "Body not received");
        return;
      }
      String message = "Body received:\n";
      message += server.arg("plain");
      message += "\n";
      server.send(200, "text/plain", message);
      Serial.println(message);
    }
    

    ESP8266 OPC-UA SOAP (XML) Webserver - STA MODE - NO XML SOAP PARSER


    //ESP8266 (NodeMCU) - OPC-UA (SOAP) webserver (NO XML parser)
    //Autor: martinius96
    //Web: https://arduino.php5.sk
    
    #include <ESP8266WiFi.h>
    #include <ESP8266WebServer.h>
    ESP8266WebServer server(80);
    const char* ssid = "WIFI_NAME";
    const char* password =  "WIFI_PASSWORD";
    
    void setup() {
      Serial.begin(115200);
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.println("Waiting to connect...");
      }
      Serial.print("IP address: ");
      Serial.println(WiFi.localIP());
      server.on("/body", handleBody);
      server.begin();
      Serial.println("Server listening");
    
    }
    
    void loop() {
      server.handleClient();
    }
    
    void handleBody() {
      if (server.hasArg("plain") == false) {
        server.send(200, "text/plain", "Body not received");
        return;
      }
      String message = "Body received:\n";
      message += server.arg("plain");
      message += "\n";
      server.send(200, "text/plain", message);
      Serial.println(message);
    }
    

    ESP8266 OPC-UA Client



    ESP8266 OPC-UA SOAP Client


    //ESP8266 (NodeMCU) - OPC-UA Client - XML (SOAP) data payload
    //Autor: martinius96
    //Web: https://arduino.php5.sk
    
    #include <ESP8266WiFi.h>
    const char * ssid = "WIFI_NAME";
    const char * password = "WIFI_PASSWORD";
    //const char * host = "192.168.4.1"; //IP address of OPC-UA webserver in AP mode
    const char * host = "192.168.1.19"; //IP address of OPC-UA webserver in STA mode - example
    const int httpPort = 80; //http port
    WiFiClient client;
    void setup() {
      Serial.begin(115200);
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println("");
      Serial.println("WiFi uspesne pripojene");
      Serial.println("IP adresa: ");
      Serial.println(WiFi.localIP());
      Serial.println("Ready");
    }
    
    void loop() {
      if (WiFi.status() != WL_CONNECTED) {
        WiFi.begin(ssid, password);
      }
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      client.stop();
      String mac = WiFi.macAddress();
      String data = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
      data += "<ServiceRequest>\n";
      data += "<ID_BOARD>" + mac + "</ID_BOARD>\n";
      data += "<BME280_VALUE_PRESSURE>1013.48</BME280_VALUE_PRESSURE>\n";
      data += "<BME280_VALUE_TEMPERATURE>-20.34</BME280_VALUE_TEMPERATURE>\n";
      data += "<BME280_VALUE_HUMIDITY>48.55</BME280_VALUE_HUMIDITY>\n";
      data += "</ServiceRequest>\n";
      String url = "/body";
      if (client.connect(host, httpPort)) {
        client.println("POST " + url + " HTTP/1.0");
        client.println("Host: " + (String)host);
        client.println("User-Agent: ESP8266");
        client.println("Connection: close");
        client.println("Content-Type: application/x-www-form-urlencoded;");
        client.print("Content-Length: ");
        client.println(data.length());
        client.println();
        client.println(data);
        while (client.connected()) {
          String line = client.readStringUntil('\n');
          if (line == "\r") {
            break;
          }
        }
        String line = client.readStringUntil('\n');
      } else {
        Serial.println("Problem connecting to webserver");
      }
      delay(5000);
    }