Форум

Радиолюбительский форум.

Если у Вас возникли вопросы, задавайте их на форуме.

В сети

Пользователей: 155
Из них просматривают:
Аналоги: 94. Даташиты: 5. Инструкции: 2. Новости: 16. Обзор: 1. Остальное: 10. Теги: 1. Форум: 26.
Участников: 2
Гостей: 153

Google , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

В настоящее время нет объявлений.

Просмотр этой темы: 

 1 анонимных пользователей
Чат-сервер на Arduino в домашней сети
Технический Директор
Зарегистрирован:
08.02.2009 21:08
Из: Днестровск
Сообщений: 2523
Не в сети
Это мой первый опыт новичка в том деле, потому рассказываю, как я его создавал. Чат предполагается вести в программе telnet (она есть и прописана в самой Windows, но по умолчанию не установлена).

Для создания чата на Arduino приобрёл плату-дополнение (иначе говоря шилд) Arduino UNO Ethernet Shield Wiznet W5100
Установил его в контакты поверх платы Arduino UNO. Подключил сетевой кабель к шилду Ethernet и свободному порту роутера. Подключил кабель питания от адаптера 12В/2А к плате Arduino UNO. При этом на шилде начнёт светится и мигать линейка светодиодов. Подключил USB кабель к компьютеру и Arduino UNO.

Установил программу telnet. Для этого нужно перейти в:
Пуск - Параметры - Приложения - Программы и компоненты - Включение или отключение компонентов Windows - ставим галочку напротив Telnet Client - жмём OK и ждём окончания установки.

Узнал IP адрес своего компьютера в домашней сети:
Пуск - Параметры - Сеть и интернет - Просмотр свойств сети - Нахожу строчку "IPv4-адрес: 192.168.0.102/24". Запоминаю только цифры до знака косой черты, то есть "192.168.0.102".

Просканировал свою домашнюю сеть на наличие других подключенных устройств, бесплатной программой Advanced IP Scanner, чтобы наглядно увидеть список какие IP адреса уже заняты. Среди списка IP адресов домашней сети много свободных, выбрал один из них, например 192.168.0.103

Запустил программу для прошивки Arduino, вставил готовый встроенный скетч из примера: Файл - Примеры - Ethernet - AdvancedChatServer.
В скетче в строке "IPAddress ip(192, 168, 1, 177);" изменил цифры, а точнее IP адрес моего шилда, присвоил ему свободный адрес домашней сети 192.168.0.103 и прошил.

Я выложил здесь этот же самый скетч, но с комментариями на русском языке. После прошивки в этой же программе запустил монитор порта: Инструменты - Монитор порта. В открывшемся окне с названием COM4 появилась надпись "Адрес сервера чата:192.168.0.103". Ясно сервер-чат на Arduino уже в работе. В противном случае могла бы появиться надпись "Шилд Ethernet не найден. Извините, не могу работать без оборудования. "

Теперь подключился к созданному чат-серверу на каждом компьютере в домашней сети:
Запустил программу telnet:
Пуск - Служебные-Windows - Выполнить - Напечатал слово telnet и нажал кнопку ОК. Открылось окно с названием "C:WINDOWS\system32\telnet.exe". В этом окне написал всего одну латинскую букву o и нажал клавишу Enter. Появилась надпись ( в ). Напечатал адрес сервера чата, а именно цифры с точками: 192.168.0.103 и нажал клавишу Enter. Появилась надпись: "npuBem, k^ueHm HoMep: 0", а название окна сменилось на "Telnet 192.168.0.103"

Переключил раскладку своей клавиатуры на кириллицу и написал сообщение в программе telnet. Моё сообщение тут же по буквам появилось на другом компьютере в программе telnet также подключенному к чат-серверу.
Заглянул в монитор порта Arduino, там отобразился мой и второй подключенный компьютер.
Так как мне нет необходимости следить за клиентами сети, то закрыл программу Arduino и отсоединил USB кабель, оставив лишь питание самой платы Arduino с её Ethernet шилдом, чат сервер при этом продолжил работать предоставляя возможность писать сообщения друг другу в программе telnet.
/*
 Расширенный чат-сервер

  Более продвинутый сервер, который распространяет любые входящие сообщения
  всем подключенным клиентам, кроме клиента, с которого пришло сообщение.
  Чтобы использовать, откройте на компьютере telnet и введите IP-адрес вашего конроллера.
  Вы также можете видеть входные данные клиента в последовательном мониторе.
  Использование шилда Arduino Wiznet Ethernet.

  Цепь:
  * Экран Ethernet прикреплен к контактам 10, 11, 12, 13

  создано 18 декабря 2009
  Дэвид А. Меллис
  изменено 9 апреля 2012
  Том Айго
  переработан, чтобы использовать оператора == 25 ноября 2013
  Норберт Трухсесс

 */

#include <SPI.h>
#include <Ethernet.h>

// Введите MAC-адрес и IP-адрес для вашего Arduino контроллера ниже.
// IP-адрес будет зависеть от вашей локальной сети.
// шлюз и подсеть необязательны:
byte mac[] = {
  
0xDE0xAD0xBE0xEF0xFE0xED
};
IPAddress ip(1921680103); //сюда вводим не занятый адрес для вашего Arduino контроллера
IPAddress myDns(19216801); 
IPAddress gateway(19216801);
IPAddress subnet(25525500);


// по умолчанию Telnet использует порт 23
EthernetServer server(23);

EthernetClient clients[8];

void setup() {
  
// Вы можете использовать Ethernet.init (pin) для настройки контакта CS
  //Ethernet.init(10);  // Большинство шилдов Arduino
  //Ethernet.init(5);   // MKR ETH шилд
  //Ethernet.init(0);   // Teensy 2.0
  //Ethernet.init(20);  // Teensy++ 2.0
  //Ethernet.init(15);  // ESP8266 with Adafruit Featherwing Ethernet
  //Ethernet.init(33);  // ESP32 with Adafruit Featherwing Ethernet

  // Инициализация устройства Ethernet
  
Ethernet.begin(macipmyDnsgatewaysubnet);

  
// Откройте последовательные соединения и дождитесь открытия порта:
  
Serial.begin(9600);
  while (!
Serial) {
    ; 
// Дождитесь подключения последовательного порта. Требуется только для собственного порта USB
  
}

  
// Проверка наличия аппаратных средств Ethernet
  
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    
Serial.println("Шилд Ethernet не найден. Извините, не могу работать без оборудования. :(");
    while (
true) {
      
delay(1); // Ничего не происходит, ни одна точка не работает без оборудования Ethernet
    
}
  }
  if (
Ethernet.linkStatus() == LinkOFF) {
    
Serial.println("Кабель Ethernet не подключен.");
  }

  
// Начать прослушивание клиентов
  
server.begin();

  
Serial.print("Адрес сервера чата:");
  
Serial.println(Ethernet.localIP());
}

void loop() {
  
// Проверка подключения нового клиента и передача привета (до поступления данных)
  
EthernetClient newClient server.accept();
  if (
newClient) {
    for (
byte i=08i++) {
      if (!
clients[i]) {
        
Serial.print("У нас новый клиент #");
        
Serial.println(i);
        
newClient.print("npuBem, k^ueHm HoMep: ");
        
newClient.println(i);
        
// После того, как мы "принимаем", клиент больше не отслеживается сервером
        // Поэтому мы должны сохранить его в нашем списке клиентов
        
clients[i] = newClient;
        break;
      }
    }
  }

  
// Проверка входящих данных от всех клиентов
  
for (byte i=08i++) {
    if (
clients[i] && clients[i].available() > 0) {
      
// Чтение байтов из клиента
      
byte buffer[80];
      
int count clients[i].read(buffer80);
      
// Запись байтов на все другие подключенные клиенты
      
for (byte j=08j++) {
        if (
!= && clients[j].connected()) {
          
clients[j].write(buffercount);
        }
      }
    }
  }

  
// Остановка всех клиентов, которые отключаются
  
for (byte i=08i++) {
    if (
clients[i] && !clients[i].connected()) {
      
Serial.print("клиент отключился #");
      
Serial.println(i);
      
clients[i].stop();
    }
  }
}

Прикреплённый файл:



jpg  Шилд Ethernet.jpg (109.90 KB)
290_5eda69b5d3c9c.jpg 800X402 px

jpg  Монитор порта.jpg (32.56 KB)
290_5eda69cb5eda0.jpg 893X372 px

jpg  Окно telnet.jpg (48.50 KB)
290_5eda6ac1d85b5.jpg 647X340 px



Re: Чат-сервер на Arduino в домашней сети
Технический Директор
Зарегистрирован:
08.02.2009 21:08
Из: Днестровск
Сообщений: 2523
Не в сети
Для того, чтобы вести чат со смартфона на ОС Android через веб-чат на Arduino c Enthernet шилдом, нужно войти со смартфона в домашнюю сеть по WiFi, установить с "Google Play" приложение Mobile Telnet
Запустить на телефоне приложение "Mobile Telnet", нажать на экране в правом верхнем углу три точки, затем надпись "Telnet Setting" и ввести адрес нашего чат-сервера, а именно 192.168.0.103 и нажать на "ОК". Снова нажать на экране в правом верхнем углу три точки, затем на "Connect". Появится надпись "Connecting to 192.168.0.103 port 23, please wait..." и ниже "npuBem, k^ueHm HoMep: 1". Внизу дисплея в белом поле пишем сообщение латинскими буквами (главный недостаток Mobile Telnet - кириллицу не поддерживает в обе стороны), например, "Privet!" (можно без кавычек) и жмём рядом справа на надпись "Send". На компьютере другого клиента в программе "telnet" появится ваше сообщение со словом "Privet!". Если другой подключенный клиент начнёт печатать латинскими буквами у себя на компьютере, то на вашем телефоне начнёт отображаться набираемый текст.

Прикреплённый файл:



jpg  Чат в Mobile Telnet.jpg (33.52 KB)
290_5edacbce54c8d.jpg 480X800 px



Re: Чат-сервер на Arduino в домашней сети
Технический Директор
Зарегистрирован:
08.02.2009 21:08
Из: Днестровск
Сообщений: 2523
Не в сети
Telnet на "десятке" также устанавливается вручную, но работать, как на "семёрке", не будет. При попытке соединиться выдаст следующее:
Подключение к 192.168.1.133...Не удалось открыть подключение к этому узлу, на порт 23: Сбой подключения.
Не помогут ни отключение брандмауэра, ни создание разрешения в создании правил для входящих-исходящих портов, ни прописка и перенаправление портов в самом роутере, ни запуск из под Администратора. Чтобы я ни делал Telnet на "десятке" к "просьбам трудящихся глух как топор". Не рекомендую устанавливать ещё какие либо компоненты Windows, если вы не знаете для чего они, иначе будут проблемы с загрузкой "десятки" и тогда, как вариант, поможет (лучше предпоследняя) точка восстановления системы.
Обойти проблему с Telnet-ом на VirtualBox-е с той же "семёркой" тоже не получится, так как там свои "внутренние" IP адреса и сканер не показывает знакомые устройства домашней сети. Ну и заодно Telnet тоже не подключается к нужному вам узлу.
Сторонний софт (PuTTY) также не решает проблему. Тем не менее, не смотря ни на что, мобильные приложения Telnet между собой прекрасно работают и в мониторе порта Arduino IDE на той же "десятке" всё отлично отслеживается. Даже 127.0.0.1 110 и он не работает, что вообще удивило! Может у вас получится?



Re: Чат-сервер на Arduino в домашней сети
Технический Директор
Зарегистрирован:
08.02.2009 21:08
Из: Днестровск
Сообщений: 2523
Не в сети
После долгих мытарств нашёл такую информацию, что мол китайцы по ошибке впаяли не ту сборку резисторов. Должны были установить 510, но почему-то ставят 511, хотя согласно схеме в datasheet указано 49,9 Ома. Понятное дело китайцы ставят резисторы близкие по значению, но всесто 51 Ом (SMD код 510) они поставили 510 Ом (SMD код 511), отсюда и все беды с шилдом Ethernet W5100. Что интересно роутер куда подключен шилд видит его IP-адрес и показывает его всем Wi-Fi устройствам, а по сетевому кабелю на компьютер не передаёт, будь-то не видит. Ну здесь такой выход предлагается: у кого есть опыт замены SMD-деталей, то сборку 511 меняют на 510 и проблема исчезает. Кто без опыта подпаять резисторы сверху не получится, но с обратной стороны платы подпаивают к сетевому гнезду по два сопротивления по 100 Ом, но как я понял это не то же самое, что к сборке резисторов 511, а к трансформаторам тока, что в сетевом гнезде. Но и после такого обещается, что шилд будет вести себя постабильнее, но я так подозреваю, что постабильнее на коротком сетевом кабеле. Проверять не стал. Я думаю другой вариант: если роутер видит шилд, то можно ли как-то в настройках роутера перенаправить IP-адрес шилда на другой адрес, но уже хорошо видимый компьютером? У кого есть опыт, поделитесь.
Если интересно: схема шилда Ethernet W5100
А вот на фото та самая неправильная сборка 511:

Прикреплённый файл:



jpg  511-510.jpg (37.70 KB)
290_60a56c87e003f.jpg 1280X429 px



Re: Чат-сервер на Arduino в домашней сети
Технический Директор
Зарегистрирован:
08.02.2009 21:08
Из: Днестровск
Сообщений: 2523
Не в сети
Сегодня у меня дома работники ИДК заменили оптический модем на новый, другого производителя. И, о чудо! IP-адрес шилда Ethernet стал виден по проводной сети, не только по Wi-Fi, а заодно и отобразилась его веб-страница, что лежит на SD-карте шилда. Это событие порадовало! Ведь с предыдущим модемом, как я писал в предыдущих сообщениях, были проблемы и не только у меня, а у многих.
Открыть изображение в новом окне

Рис.1 Так выглядит веб-страница шилда.

Открыть изображение в новом окне

Рис.2 А это новый оптический модем



Поиск по форуму


Расширенный поиск

Разное

Интересно

Получить малозаметное и очень прочное соединение на молекулярном уровне можно, смочив треснувшую пластмассу ацетоном или нитрорастворителем.