Arduino:Примеры/ChatServer

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

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


Чат-сервер на базе Arduino[1]

Этот пример показывает, как с помощью Arduino создать простой сервер для общего чата. Чтобы начать пользоваться этим импровизированным чатом, откройте Serial Monitor, подключитесь к IP-адресу вашего девайса и можете приступать к печати. Все входящие сообщения будут отсылаться сразу всем клиентам, подключенным к серверу (включая тех, кто пишет эти сообщения). Вдобавок клиентские сообщения будут отображаться и на Serial Monitor.

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

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

Цепь

Shield позволяет подключить к плате Ethernet-контроллер WizNet (через шину SPI). Для SPI-подключения к WizNet используется 4 контакта10-ый, 11-ый, 12-ый и 13-ый. У поздних моделей Shield имеется слот для SD-карты.

Управление SS-контактом SD-карты осуществляется через 4-ый цифровой контакт.

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

Модуль Arduino Ethernet Shield помещается поверх платы Arduino.

Схема

Код

/*
Сервер для общего чата на базе Arduino

Создает простой сервер, который раздает все входящие сообщения всем подключенным клиентам.
Чтобы начать пользоваться чатом, подключитесь к IP своего девайса и начинайте печатать.
Кроме того, клиентские сообщения будут отображаться и на Serial Monitor. 
Вместе с этим скетчем используется модуль Arduino Ethernet Shield на базе WizNet.

Цепь:
 * Ethernet Shield подключен к 10-ому, 11-ому, 12-ому и 13-ому контактам
 * Клиенты подключены к аналоговым контактам с 0-ого по 5-ый (опционально)

Создан 18 декабря 2009 Дэвидом А. Меллисом (David A. Mellis),
модифицирован 9 апреля 2012 Томом Иго (Tom Igoe).
*/

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

// Ниже укажите MAC-адрес и IP-адрес для контроллера.
// IP-адрес будет зависеть от вашей локальной сети.
// Внутренний адрес модема (gateway) и маска подсети (subnet) – опционально:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1, 177);
IPAddress gateway(192,168,1, 1);
IPAddress subnet(255, 255, 0, 0);

// Создаем сервер, который будет «прослушивать»
// входящие соединения на порте 23:
EthernetServer server(23);
boolean alreadyConnected = false; // был ли клиент подключен прежде или нет

void setup() {
  // Инициализируем Ethernet-девайс:
  Ethernet.begin(mac, ip, gateway, subnet);
  // Начинаем «слушать» клиентов:
  server.begin();
 // Запускаем последовательную передачу данных и ждем открытия порта:
  Serial.begin(9600);
   while (!Serial) {
    ; // ждем подключения последовательного порта (нужно только для Leonardo) 
  }

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

void loop() {
  // Ждем нового клиента:
  EthernetClient client = server.available();

  // Когда клиент отсылает первый байт, здороваемся с ним:
  if (client) {
    if (!alreadyConnected) {
      // очищаем буфер для входящих данных:
      client.flush();    
      Serial.println("We have a new client");  //  "У нас новый клиент!"
      client.println("Hello, client!");  //  "Привет, клиент!"
      alreadyConnected = true;
    } 

    if (client.available() > 0) {
      // Считываем байты, пришедшие от клиента:
      char thisChar = client.read();
      // Возвращаем эти байты клиенту:
      server.write(thisChar);
      // Кроме того, возвращаем эти байты серверу:
      Serial.write(thisChar);
    }
  }
}

См.также

  1. Arduino Ethernet Shield
  2. Getting started with the ethernet shield
  3. Ethernet library
  4. ChatServer
  5. ChatClient
  6. WebClient
  7. WebServer
  8. PachubeClient?
  9. PachubeClientString?
  10. BarometricPressureWebServer
  11. UDPSendReceiveString
  12. UdpNtpClient

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