Arduino:Примеры/DhcpChatServer: различия между версиями
Myagkij (обсуждение | вклад) м (Замена текста — «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">» на «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">») |
Нет описания правки |
||
Строка 31: | Строка 31: | ||
==Код== | ==Код== | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
/* | /* | ||
Чат-сервер через DHCP | Чат-сервер через DHCP |
Версия от 18:18, 14 мая 2023
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Чат-сервер через 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-кабеля. Также вам надо поменять сетевые настройки в скетче, чтобы они соответствовали настройкам вашей сети.
Shield устанавливается поверх платы Arduino.
Код
/*
Чат-сервер через DHCP
Простой сервер, который раздает все входящие сообщения всем подключенным клиентам.
Чтобы начать пользоваться чатом, подключитесь к IP-адресу своего девайса и начинайте печатать.
Кроме того, входящие сообщения, написанные клиентами, будут видны и в Serial Monitor.
В скетче используется Arduino Ethernet Shield на базе WizNet.
Эта версия пытается получить IP-адрес через DHCP.
Цепь:
* Shield подключен к 10-ому, 11-ому, 12-ому и 13-ому контактам.
Создан 21 мая 2011,
модифицирован 9 апреля 2012 Томом Иго (Tom Igoe),
основан на примере ChatServer Дэвида А. Меллиса (David A. Mellis).
*/
#include <SPI.h>
#include <Ethernet.h>
// Ниже введите MAC-адрес и IP-адрес вашего контроллера.
// IP-адрес будет зависеть от вашей локальной сети.
// Внутренний адрес модема (gateway) и маска подсети (subnet) – опционально:
byte mac[] = {
0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };
IPAddress ip(192,168,1, 177);
IPAddress gateway(192,168,1, 1);
IPAddress subnet(255, 255, 0, 0);
// Создаем сервер, который будет «прослушивать»
// входящие соединения на порте 23:
EthernetServer server(23);
boolean gotAMessage = false; // переменная, с помощью которой скетч будет знать, получено сообщение от клиента или нет
void setup() {
// Инициализируем последовательную передачу данных и ждем открытия порта:
Serial.begin(9600);
// Эта проверка нужна только на Leonardo:
while (!Serial) {
; // ждем подключения последовательного порта (нужно только для Leonardo)
}
// Запускаем Ethernet-соединение:
Serial.println("Trying to get an IP address using DHCP"); // "Пытаемся получить IP-адрес через DHCP"
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP"); // "Не удалось сконфигурировать Ethernet при помощи DHCP"
// Инициализируем Ethernet-девайс не при помощи DHCP:
Ethernet.begin(mac, ip, gateway, subnet);
}
// Выводим на Serial Monitor локальный IP-адрес:
Serial.print("My IP address: "); // "Мой IP-адрес: "
ip = Ethernet.localIP();
for (byte thisByte = 0; thisByte < 4; thisByte++) {
// Выводим значение каждого байта IP-адреса:
Serial.print(ip[thisByte], DEC);
Serial.print(".");
}
Serial.println();
// Начинаем слушать клиентов:
server.begin();
}
void loop() {
// Ждем нового клиента:
EthernetClient client = server.available();
// Когда клиент отсылает первый байт, здороваемся:
if (client) {
if (!gotAMessage) {
Serial.println("We have a new client"); // "У нас новый клиент"
client.println("Hello, client!"); // "Привет, клиент!"
gotAMessage = true;
}
// Считываем байты от этого клиента:
char thisChar = client.read();
// Шлем эти байты обратно клиенту...
server.write(thisChar);
// ...а также серверу:
Serial.print(thisChar);
}
}
См.также
- Arduino Ethernet Shield
- Getting started with the ethernet shield
- Ethernet library
- ChatServer
- WebClient
- WebServer
- PachubeCient?
- TwitterClient
- BarometricPressureWebServer