Точно така - искам да направя Tcp сървър в контролера и да предавам състоянието на входовете и изходите, а и на няколко вътрешни променливи към TcpClient написан на C# или C++.
Няма да ползвам никакви протоколи от по-високо ниво - чиста Tcp сокет връзка искам. Искам като се случи някакво събитие в контролера, той да предаде по Tcp някаква информация. Например ще чета един от аналоговите входове, ще правя някакво усредняване на стойностите - например ще изчислявам средната стойност за една минута и в края на минутата ще изпращам тази средна стойност по Tcp-то.
Ако отсреща има закачен клиент (а то ще има - C# програмата), той ще получи тези данни и ще прави каквото трябва с тях.
Съответно само когато се промени състояние на някой от цифровите изходи - само тогава (ивентно) това състояние ще се изпрати към Tcp клиента.
С UDP не съм работил и не знам дали ми върши работа. С Tcp имам много опит.
Контролера ми е
Arduino UNO WiFi (
http://www.arduino.org/products/boards/arduino-uno-wifi).
Въпросната библиотека, която сега я пишат и още не е довършена и която ЩЕ има Tcp поддръжка някой ден е тази:
http://www.arduino.org/learning/tutorials/boards-tutorials/content/arduino-uno-wifi-tutorialТова по-точно са примери за използване на вече направената част от нея. Самата библиотека се казва
UnoWiFiDevEd.
Това го пише на разни места:
Instead if you are using the Arduino IDE 1.8.x then download the
UNOWiFiDev.Edition library from Library Manager and modify the code, replacing
#include <ArduinoWiFi.h> with
#include <UnoWiFiDevEd.h>Това е форумът, в който хората се възмущават как може да се продава този контролер, а софтуерът за него още да не е готов:
http://www.arduino.org/forums/uno/arduino-uno-wifi-arduinowifi-library-incomplete-540Там има и един, който се казва GeelHaarMonster, който обяснява как може проблемът да се реши (временно) с RestServer.
Аз взех, че го разбрах и го направих и тръгна. Използвах този пример за RestServer:
http://www.arduino.org/learning/tutorials/boards-tutorials/restserverТова е нещо като Web сървър, който чака някой да подаде заявка към него - все едно да пуснеш браузъра и да отвориш примерен линк:
192.168.1.100/arduino/digital/13
и в браузъра се отваря страница, в която пише състоянието на избрания цифров/аналогов вход/изход.
Само че аз не го отварям в браузър, а си направих една малка програмка, която имитира браузър, но вместо да покаже получената страница, взима данните и прави каквото иска с тях. Май не го обясних много добре...
Проблемът е, че така се губи ивентното предаване на данни от контролера към клиента. По този начин клиентът трябва периодично да казва на контролера "дай ми данните" и той да ги дава (подобно на Modbus). Ако не намеря друго решение ще го правя така, докато напишат Tcp-то. Но не ми харесва тази идея...