blogy logo
login PRIHLÁS SA
BLOG deadawp
ČLÁNKY
DISKUSIE
2
SLEDOVAŤ BLOG
PHP, Arduino programátor
deadawp



OPC UA - (ESP8266, ESP32, Arduino + Ethernet)
pridal deadawp 21.12. 2019 o 22:24



Architektúru OPC UA som bližšie predstavil v minulom publikovanom článku. Dnes by som pôvodný článok rád rozšíril o informácie a postrehy pri vlastnej implementácii. Implementácia obsahuje štandardne klient --> server komunikáciu, pričom využíva rôzne typy klientov.

Čo sa týka serverov, fungujú na štandardnom HTTP protokole 80, líšia sa predovšetkým v módoch prevádzky, pričom môžu fungovať na existujúcej LAN sieti ako STATION, alebo môžu vysielať vlastnú šifrovanú WiFi sieť - AP mód - pod WPA/WPA2 - PSK (Platí iba pre ESP8266 a ESP32).

Na demonštráciu takejto OPC UA architektúry som zvolil až tri platformy, ktoré môžu byť vzájomne do tejto architektúry kombinované. Jedná sa o WiFi čipy ESP8266 a ESP32, ktoré poskytujú WiFi konektivitu a pre Ethernet zástupcu Arduino s najznámejšími Ethernet modulmi Wiznet W5100, W5500.

Vo vlastnej implementácii som sa snažil o vytvorenie plnohodnotného OPC UA senzorického systému. Webserver prijíma dáta od klienta - hodnotu ADC prevodníka, pričom tieto údaje distribuuje ďalej - iným klientom, tzv. Subscriberom, ktorý si danú informáciu vhodnou požiadavkou vypýtajú. Systém je veľmi zaujímavý, nakoľko môže byť implementovaný aj do senzorických sietí, automatizácii.

Všetky dáta v systéme sú prístupné v reálnom čase. Dáta sa neukladajú, bežia na webserveri v jeho RAM pamäti. Webserver slúži aj na interakciu s človekom, nakoľko je možné sa naň pripojiť aj z prehliadača, pričom je možné prehliadať dáta, prípadne aj ovládať výstupy prostredníctvom HTML stránky a jej elementov. Do HTML stránky je možné zakomponovať aj jednoduchú SCADA vizualizáciu s možnosťou ovládania prostredníctvom tejto vizualizácie.

Pri implementácii som využil jednoduché príklady pre HTTP webserver pre každú mikroprocesorovú architektúru. Príklady som neskôr rozšíril pre očakávané "požiadavky" (ich formu) na konkrétne podstránky s metódou GET. Implementáciou pre všetky platformy sa mi poradilo zostaviť jednoduchú komunikačnú sieť, ktorá je multiplatform. Tj. Ak je webserver Arduino s Ethernet shieldom, môžeme ako klientov využiť vývojové dosky ESP8266, či ESP32 a taktiež aj opačne s webserverom na ESP platformách. 

Jednoduchá bloková schéma reprezentuje navrhnutú architektúru:

Dopyty na server:

URL Funkcia
/  (Root) Prehľad posledných dát + automatický refresh dát na stránke
/data/?sensor_data=NUMBER Predanie dát serveru GET metódou s hodnotou NUMBER (Publisher)
/get_data/ Vyžiadanie dát klientom (Subscriberom) od servera --> hodnota NUMBER

Typy webserverov:

Typ Funkcia
 AP Vysiela vlastnú SSID sieť pod WPA/WPA2 (môže byť aj nezabezpečená bez hesla), spracuje DHCP, statická IP
STATION Pripája sa na existujúcu WiFi/LAN sieť. Môže mať dynamickú IP, možno využiť mDNS pre doménové meno

Typy klientov:

Typ Funkcia
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 (Publish) klienta, hodnota môže predstavovať napríklad teplotu. S hodnotou je možné pracovať, ďalej ju použiť (ventilácia, spínanie kotla, relé)

V pokročilej implementácii OPC UA architektúry je možné využiť aj HTTPS pre zabezpečené pripojenie na webserver. Zaviesť autentizáciu klientov prostredníctvom klientského certifikátu, ktorý predkladajú serveru. Arduino s Ethernet modulmi nie je možné použiť pre HTTPS, nakoľko to nepodporuje.

 OPC UA implementáciu je taktiež možné používať aj pre odosielanie viacerých údajov od klientov na server prostredníctvom HTTP požiadavky, musia byť oddlené oddelovačom -  &. Architektúru je možné rozšíriť aj o pripojenie PLC, či iných systémov využívaných v automatizácii, prípadne Arduino, či ESP implementovať už do existujúcej OPC UA siete. 

Problémy pri implementácii:
Najľahšou z implementácii bolo zostavenie OPC UA webservera pre ESP8266. Priamo v príkladoch pre túto platformu je spomenuté a vopred implementované aj prijatie GET požiadavky na stránku s daným parametrom. 

Platforma ESP32 sa po softvérovej stránke líši iba málo. Existuje iný hlavičkový súbor knižnice, pričom serverové funkcie sú takmer totožné. Implementácia na platforme ESP32 sa trochu líši, nakoľko nemá funkciu pre očakávaný parameter ako je tomu u ESP8266. Dokáže iba prebrať napevno zadaný parameter v zdrojovom kóde. 

Najťažšou implementáciou bolo naprogramovanie webservera pre Arduino s Ethernet shieldom W5100, respektíve modulom W5500. Každý z modulov využíva iný hlavičkový súbor knižnice, pre Wiznet W5100 je to Ethernet.h a pre W5500  je to Ethernet2.h. Implementácie pre webserver neobsahujú preberanie parametrov, dokážu prebrať iba celý prijatý reťazec v štýle:
GET /data/?sensor_data=NUMBER. Túto adresu treba rozparsovať, napríklad C funkciou strok(), prípadne substring funkciou objektu String s vhodnými terminátormi.

Následne overiť jednotlivú hĺbku a text URL adresy, prijatý parameter a v poslednom rade aj hodnotu, ktorú má webserver prebrať. Arduino je značne obmedzené, čo sa týka rýchlosti a operačnej pamäte. Pri využití Arduina Uno je k dispozícii iba 2kB použiteľnej pamäte RAM. ESP32 disponuje 500kB pamäte RAM a ESP8266 cca 96kB. Program pre Arduino s Ethernet modulom je dosť špecifický, no je možné naprogramovať webserver ekvivalený s použitými pre ESP8266, či ESP32, rovnako tak dokáže od týchto mikrokontróler prijímať aj HTTP požiadavky.

Edit: 16. Jan 2019

Na implementácii som pracoval ďalej tak, aby som sa dostal na konkrétny štandard dát, ktoré sa používajú. Využil som POST HTTP request s vhodným encodingom pre dáta - XML (SOAP). Tieto dáta môžem následne na mikrokontorléri, na ktorom beží webserver prijať, rozparsovať a uložiť do poľa, SPIFFS pamäte, či odoslať niekam ďalej.
Encoding dát pre XML môže vyzerať napríklad takto (Payload z klienta, ktorý prijal webserver:

Viac o projekte je možné nájsť na adrese: https://arduino.php5.sk/opc-ua-esp8266.php

Ukážka funkčnosti a komunikácie po HTTP protokole na OPC-UA architektúre:



Prístupov 3176
Kvalita článku
hlasov 0

PRÍSPEVKY
SLEDUJETE
Prosím prihláste sa pre možnosť pridania komentáru.
Prihláste sa, alebo použite facebook login facebook login
ĎALŠIE ČLÁNKY V BLOGU
Ovládanie Arduina cez UART z počítača
[ 19.11.2020] (príspevkov 0)
ArduinoJson - knižnica pre parsovanie JS...
[ 15.11.2020] (príspevkov 0)
Overenie kradnutých vozidiel - Arduino +...
[ 11.11.2020] (príspevkov 0)
Hladinomer + Zrážkomer - Arduino / ESP82...
[ 2.11.2020] (príspevkov 0)
RFID vrátnik - update Október 2020
[ 29.10.2020] (príspevkov 0)
Digitálny potenciometer, prerušenie, deb...
[ 28.10.2020] (príspevkov 0)
Integrácia zrážkomera RG-11 do projektu ...
[ 22.10.2020] (príspevkov 0)
WiFi Termostat - ESP8266 - WiFiManager -...
[ 28.9.2020] (príspevkov 0)
Izbový termostat - Portovanie programu -...
[ 22.9.2020] (príspevkov 0)
RFID vrátnik - Ukončenie projektu
[ 9.9.2020] (príspevkov 0)