Projekt nie je dostupný zdarma na stiahnutie! Pri záujme o kúpu softvérovej časti projektu s funkčnosťou, ktorá je na danej stránke rozpísaná kontaktovať na adrese: martinius96@gmail.com
OPC-UA HTTP Webserver Arduino Ethernet ESP8266 ESP32 HTML Publish Subscribe

OPC UA - ESP8266


  • Architektúra OPC UA existuje už od roku 2008. Je to klient--> serverová architektúra, ktorá podporuje multiplatform aplikácie.
  • Implementácia ponúka spojenie klientov s webserverom. Klienti komunikujú HTTP POST metódou a dáta predávajú serveru v XML (SOAP) formáte.
  • Webserver rovnako na požiadavku klienta môže odpovedať aj hodnotou, ktorá môže byť ďalej použitá.
  • Architektúra má využitie v mikroprocesorovej komunikácii, v automatizáčných systémoch s PLC, jednoduché senzorové siete.
  • V pokročilej implementácii je možné využiť aj HTTPS spojenie s overením certifikátu webservera, klienta voči serveru.
  • Ukážková implementácia poukazuje na ľahkú možnosť konektivity medzi doskami na platforme ESP8266 s využitím HTTP webservera.
  • Serverová doska ESP8266 využíva aj implementáciu AP - prístupového bodu. Pripojené zariadenia sú tak v jednej sieti so serverom, pričom je šieť šifrovaná pod protokolom WPA/WPA2 - PSK.
  • ESP8266 vysiela WiFi sieť s názvom ESP_WiFi s heslom thereisnospoon, adresa servera je: 192.168.4.1 na porte 80, klientom priradzuje adresu z rozsahu 192.168.4.X s 24-bitovou maskou siete.
  • Serverové stránky:
  • / - Koreňové umiestnenie (192.168.4.1), stránku môže použiť klient na počítači, inom zariadení, vizualizuje v reálnom čase posledné hodnoty od klientov
  • /send_data/ - stránka pre prijatie dát, očakáva XML dáta od klientov
  • /get_data/ - stránka pre dopyt o špecifickú informáciu - webserver odpovie s hodnotou na základe požiadavky
  • Typy klientov implementovaných v projekte:
  • Publish_Client - odosiela dáta z ADC prevodníka na server, vypíše prijatú odpoveď servera - potvrdí prijatie odoslaných dát
  • Publish_Client_UDP - odosiela dáta z ADC prevodníka na server, odpoveď servera preskočí (spracuje ju, nevypíše prijatú odpoveď, nepracuje s ňou)
  • Subscriber_Client - vykoná HTTP dopyt na server - server odpovie s prijatou hodnotou od klienta, hodnota môže predstavovať napríklad teplotu. S hodnotou je možné pracovať, ďalej ju použiť (ventilácia, spínanie kotla, vykurovania, zavlažovania, ovládanie stroja)
  • Bloková schéma OPC-UA implementácie:

    (SOAP) XML ENCODED HTTP PAYLOAD - OPC-UA

    Zdrojové kódy pre webserver na stránke neobsahujú XML (SOAP) parser. Verzie softvéru s XML parserom a pokročilé implementácie nie sú dostupné zdarma. Ponúkam verzie softvéru pre ESP8266 / ESP32 / Arduino + Ethernet. Pri záujme o kúpu projektu kontaktujte pre viac informácii: 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);
    }