Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/DhcpChatServer

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Чат-сервер через DHCP[1]

Этот пример показывает, как с помощью Ethernet Shield подключаться к TELNET-серверу. Сообщения от этого сервера будут выводиться через последовательный порт, однако данный пример позволяет еще и отправлять сообщения на TELNET-сервер. Для этих целей отлично подходит Serial Monitor.

Кроме того, этот скетч пытается получить IP-адрес через DHCP, и делает это при помощи вызова функции Ethernet.begin(mac). Впрочем, при использовании DHCP-расширений стоит быть осторожнее, т.к. они сильно увеличивают размер скетча.

Необходимое оборудование

  • Сетевой модуль Arduino Ethernet Shield;
  • Плата Arduino, совместимая с Shield;

Необходимое ПО

  • TELNET-сервер;
  • Также для этой цели может подойти скетч Processing под названием ChatServer;

Цепь

Shield позволяет подключить плату Arduino к Ethernet-контроллеру WizNet (через SPI), и это подключение осуществляется при помощи 10-ого, 11-ого, 12-ого и 13-ого контактов. У более поздних моделей Shield имеется встроенный слот для SD-карты, SS-контакт которой в данном примере управляется через 4-ый цифровой контакт.

Shield должен быть подключен к сети при помощи Ethernet-кабеля. Также вам надо поменять сетевые настройки в скетче, чтобы они соответствовали настройкам вашей сети.

ArduinoPlusEthernetShield.png

Shield устанавливается поверх платы Arduino.

Код

  1. /*
  2. Чат-сервер через DHCP
  3.  
  4. Простой сервер, который раздает все входящие сообщения всем подключенным клиентам.
  5. Чтобы начать пользоваться чатом, подключитесь к IP-адресу своего девайса и начинайте печатать.
  6. Кроме того, входящие сообщения, написанные клиентами, будут видны и в Serial Monitor.
  7. В скетче используется Arduino Ethernet Shield на базе WizNet.
  8.  
  9. Эта версия пытается получить IP-адрес через DHCP.
  10.  
  11. Цепь:
  12. * Shield подключен к 10-ому, 11-ому, 12-ому и 13-ому контактам.
  13.  
  14. Создан 21 мая 2011,
  15. модифицирован 9 апреля 2012 Томом Иго (Tom Igoe),
  16. основан на примере ChatServer Дэвида А. Меллиса (David A. Mellis).
  17. */
  18.  
  19. #include <SPI.h>
  20. #include <Ethernet.h>
  21.  
  22. // Ниже введите MAC-адрес и IP-адрес вашего контроллера.
  23. // IP-адрес будет зависеть от вашей локальной сети.
  24. // Внутренний адрес модема (gateway) и маска подсети (subnet) – опционально:
  25. byte mac[] = {
  26.   0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };
  27. IPAddress ip(192,168,1, 177);
  28. IPAddress gateway(192,168,1, 1);
  29. IPAddress subnet(255, 255, 0, 0);
  30.  
  31. // Создаем сервер, который будет «прослушивать»
  32. // входящие соединения на порте 23:
  33. EthernetServer server(23);
  34. boolean gotAMessage = false; // переменная, с помощью которой скетч будет знать, получено сообщение от клиента или нет
  35.  
  36. void setup() {
  37.   // Инициализируем последовательную передачу данных и ждем открытия порта:
  38.   Serial.begin(9600);
  39.   // Эта проверка нужна только на Leonardo:
  40.    while (!Serial) {
  41.     ; // ждем подключения последовательного порта (нужно только для Leonardo)
  42.   }
  43.  
  44.  
  45.   // Запускаем Ethernet-соединение:
  46.   Serial.println("Trying to get an IP address using DHCP");  //  "Пытаемся получить IP-адрес через DHCP"
  47.   if (Ethernet.begin(mac) == 0) {
  48.     Serial.println("Failed to configure Ethernet using DHCP");  //  "Не удалось сконфигурировать Ethernet при помощи DHCP"
  49.     // Инициализируем Ethernet-девайс не при помощи DHCP:
  50.     Ethernet.begin(mac, ip, gateway, subnet);
  51.   }
  52.   // Выводим на Serial Monitor локальный IP-адрес:
  53.   Serial.print("My IP address: ");  //  "Мой IP-адрес: "
  54.  
  55.   ip = Ethernet.localIP();
  56.   for (byte thisByte = 0; thisByte < 4; thisByte++) {
  57.     // Выводим значение каждого байта IP-адреса:
  58.     Serial.print(ip[thisByte], DEC);
  59.     Serial.print(".");
  60.   }
  61.   Serial.println();
  62.   // Начинаем слушать клиентов:
  63.   server.begin();
  64.  
  65. }
  66.  
  67. void loop() {
  68.   // Ждем нового клиента:
  69.   EthernetClient client = server.available();
  70.  
  71.   // Когда клиент отсылает первый байт, здороваемся:
  72.   if (client) {
  73.     if (!gotAMessage) {
  74.       Serial.println("We have a new client");  //  "У нас новый клиент"
  75.       client.println("Hello, client!");  //  "Привет, клиент!"
  76.  
  77.       gotAMessage = true;
  78.     }
  79.  
  80.     // Считываем байты от этого клиента:
  81.     char thisChar = client.read();
  82.     // Шлем эти байты обратно клиенту...
  83.     server.write(thisChar);
  84.     // ...а также серверу:
  85.     Serial.print(thisChar);
  86.   }
  87. }

См.также

  1. Arduino Ethernet Shield
  2. Getting started with the ethernet shield
  3. Ethernet library
  4. ChatServer
  5. WebClient
  6. WebServer
  7. PachubeCient?
  8. TwitterClient
  9. BarometricPressureWebServer

Внешние ссылки

  1. Arduino - DHCP Chat Server