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

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

<< < (2/2)

mat:
И аз това не разбирам - има Rest протокол, който е на базата на Tcp, а няма чисто Tcp...
Ами примирих се вече и реших да ползвам RestServer, че даже като се замислих може би ще ми върши добра работа и изобщо няма да се занимавам с Tcp, дори и когато го направят.

Но въпреки всичко ще ми е от ползва, ако някой ми даде повече яснота около това, как да подкарам чисто Tcp на това чудо.
Точно на това чудо - Arduino UNO WiFi (http://www.arduino.org/products/boards/arduino-uno-wifi). Поради разни причини трябва да работя точно с тази платформа и при мен не стои въпросът за друга.

А този MQTT протокол... Доколкото разбирам, някъде на някой компютър трябва да имам работещ MQ (Message Queue) сървър. След това да настроя Ардуиното да се свързва с този сървър и след това то да изпраща данните във вид на някакви съобщения към него. На друг компютър пък ще работи моят софтуер, който вместо да се свързва директно с Ардуиното, ще се "абонира" за съобщенията от този MQ сървър и ще ги получава от него. Ако това е идеята - не ме устройва. Твърде сложно става и се намесва посреднически софтуер (MQ сървър), който кой го знае колко е надежден...

Нямам си идея как да изпрограмирам собствено Tcp на това Ардуино...

mat:
Аз съм голям новобранец... ;D

Оказа се, че на порт 23 на Ардуиното има постоянно работещ Tcp сървър, който използва TELNET protocol (https://en.wikipedia.org/wiki/Telnet).
Този протокол е на базата на Tcp и най-общо казано е обикновен Tcp протокол, по който се предават стрингове. Поне аз така го разбрах.

Кънекнах се с моя Tcp клиент и о - чудо - работи.

На Ардуиното трябва да работи следната програмка (в опростен вид):


--- Код: ---#include <UnoWiFiDevEd.h>

void setup() {
    Wifi.begin();
}

void loop() {
  if (Wifi.available()){
    Wifi.print(Wifi.read()); // Така връща на Tcp клиента всичко, което дойде от него.
  }
  delay(50);
}

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

Wifi.read() чете един символ (ако има такъв), идващ от някой от Tcp клиентите (може да са повече от един - пробвах), а Wifi.print(...) съответно изпраща един или повече символи по Tcp канала към всички клиенти (изпраща до 80 символа наведнъж и ако съобщението е по-дълго го изпраща на части).
Изключително просто! На мен ми върши перфектна работа!

Иска да кажа отново защо не успях от първия път. Отначало на тази платформа се опитвах да използвам стандартната WiFi библиотека (https://www.arduino.cc/en/Reference/WiFi). После разбрах, че тя не само че не е за него, но дори е САМО за така наречените shield-ове - допълнителни платки, които се нанизват на Арнуидото и му дават допълнителни възможности. Знам, че някой ми се присмива сега, ама поне да обясня на такива като мен :)

Докато си правих тестове с тази WiFi библиотека видях, че мога да се кънеквам с Tcp клиент на порт 23 (а също и на порт 80), но нищо не се случваше и затова забравих за това. Докато днес не попаднах на този много хубав пример: https://github.com/arduino-org/arduino-library-arduino-wifi/blob/master/examples/Tools/Wifi2Serial/Wifi2Serial.ino, където се казва:

...connect to the WiFi via a telnet client at the address 192.168.240.1:23 where 192.168.240.1 is the IP of your  Arduino Uno Wifi and 23 is the port.

И го пробвах и стана - явно си има постоянно отворен Tcp канал и явно всички го знаят, щом в мрежата не открих нищо, като търсех за Tcp връзка.

Сега се чудя какво има на порт 80 :)

Навигация

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

[*] Предходна страница

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