Контролери > Ардуино (Arduino)

Arduino UNO WiFi проблем ("WiFi shield not present")

(1/2) > >>

mat:
Преди няколко дни си закупих Arduino UNO WiFi (http://www.arduino.org/products/boards/arduino-uno-wifi). Абсолютно нов съм.

Вече три дни не мога да го пусна. Изчетох целия интернет и не и не.

Какво правя:

Свързах го към мрежата. Зададох му IP (направих всичко написано тук: http://www.arduino.org/learning/getting-started/getting-started-with-arduino-uno-wifi).
Пингва се. Отваря се страницата му за настройки от браузър. Превключил съм го в WiFi Mode STA.
Всичко е перфектно, но като заредя коя да е от примерните програми за работа с WiFi, програмата стига до тук:


--- Код: ---if (WiFi.status() == WL_NO_SHIELD) {
  Serial.println("WiFi shield not present");
  while (true);

--- Край на кода ---

И ми изкарва съобщението "WiFi shield not present".
Наистина се побърках!
Моля ви някой да ми каже къде бъркам.

Рутерът е настроен на WPA2 Personal с парола. Пробвах с два рутера, да не би да е от него, но не.

Крайната ми цел е да направя WiFiServer скеч, с който да реализирам Tcp връзка и да получавам данни от I/O-тата по мрежата на всяка секунда. Не се интересувам от Web историите (не ми вършат работа).

mat:
До колкото разбрах, тази библиотека, която ползвам - WiFi не е за този контролер, а тази, която е за него (UnoWiFiDevEd) не е довършена - не предлага Tcp комуникация на този етап.
Има ли начин да получавам данни от Arduino UNO WiFi по подобие на Tcp?

yasko:
Здравей,

Доколкото разбирам искаш Ардуиното да е сървър, да направиш TCP връзка към него и да получаваш информция за входно-изходните портове на Ардуино?
Ще ползваш ли някакъв протокол от по-високо ниво за предаване на на данните по TCP връзката?
Поддръжката на TCP/IP комуникация е базова функционалност и трябва да е реализирана.  Ако всек пак няма TCP, може да ползваш UDP  връзка за предаване на данните.
Важно е да се изясни коя библиотека за кой чип. Ако можеш дай  линкове към въпросните библиотеки и хардуер.

mat:
Точно така - искам да направя 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-то. Но не ми харесва тази идея...

yasko:
Така  като гледам тази библиотеки и примерите са направени за комуникация на по високо ниво от TCP/IP сокети, които са ти необходими на теб.
Очевидно целта е да може  с един клик да се подкара примерно уеб сървър и други шарени неща.
Имаш да се заровиш софтуер и да си направиш библиотека за TCP връзка сам. Очевидно след като има уеб сървър, то въпросния чип ESP8266 със сигурност поддържа и TCP сокети.
Другия вариант е да смениш платформата и да намериш нещо, което има нормален TCP/IP стек и библиотека за него.
Разбира се остава и варианта да ползваш това, което има. Както си писал въпросния RestServer върши работа, макара и не много елегантно.
Гледам че Ардуино има библиотека за MQTT протокол - https://en.wikipedia.org/wiki/MQTT. Не го познавам, но разглеждал ли си го дали не ти върши работа?

Навигация

[0] Списък на темите

[#] Следваща страница

Премини на пълна версия