Этот пример показывает, как с помощью Arduino создать простой сервер для общего чата, который распределяет все входящие сообщения всем подключенным клиентам. Чтобы его использовать, откройте Serial Monitor, подключитесь к IP-адресу вашего устройства и можете приступать к созданию сообщений. Любой входящий текст будет отправлен всем подключенным клиентам (включая того, который отправил). Кроме того, клиентские сообщения будут отображаться и на Serial Monitor.
Требуется оборудование
- Плата Arduino или Genuino
- Плата Arduino Ethernet
Схема
Плата Ethernet позволяет подключать WizNet Ethernet контроллер к платам Arduino или Genuino через шину SPI. Данное подключение использует контакты 10, 11, 12 и 13. Более поздние модели платы Ethernet также имеют в своем составе SD-карту. Цифровой контакт 4 используется для управления выбора ведомого на SD-карте.
Плата должна быть подключена к сети с помощью кабеля Ethernet. Вам необходимо будет поменять сетевые настройки в программе, чтобы они соответствовали вашей сети.
Модуль Arduino Ethernet помещается поверх платы Arduino.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
/* Сервер для общего чата на базе 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); } } } |