Библиотека Ethernet library
Для работы с Ethernet shield используется стандартная Arduino-библиотека Ethernet library. Она поставляется в составе дистрибутива Arduino. Рассмотрим ее подробнее.
Класс Ethernet (Ethernet class)
Класс Ethernet инициализирует библиотеку и сетевые настройки. Начиная с версии 1.0, библиотека поддерживает DHCP. Использование Ethernet.begin (mac) позволяет автоматически получать IP-адрес.
Функции класса Ethernet:
begin();
localIP().
Функция Ethernet.begin()
Функция Ethernet.begin() инициализирует библиотеку и сетевые настройки.
Синтаксис функции:
Ethernet.begin(mac) Ethernet.begin(mac,ip) Ethernet.begin(mac,ip,gateway) Ethernet.begin(mac, ip, gateway, subnet)
Параметры:
mac — mac-адрес (Media Access Control) устройства (массив из 6 байтов). Это аппаратный адрес адаптера вашего устройства. Новые Arduino Ethernet shield включают наклейку с MAC-адресом устройства. Для более старых его нужно найти самостоятельно;
ip — IP-адрес устройства (массив из 4 байтов);
gateway — IP-адрес сетевого шлюза (массив из 4 байтов). Опционально — по умолчанию IP-адрес устройства с последнего октета установлен в 1;
subnet — маска подсети сети (массив из 4 байтов). Опционально — по умолчанию 255.255.255.0.
Возвращаемого значения нет.
Функция Ethernet.localIP()
Функция Ethernet.localIP() возвращает IP-адрес Ethernet shield. Синтаксис функции:
Ethernet.localIP()
Возвращаемое значение: IP-адрес устройства.
Класс IPAddress (IPAddress class)
Класс IPAddress работает с локальными и удаленными IP-адресами.
Функция IPAddress()
Функция IPAddress() определяет IP-адрес. Он может быть использован для объявления локальных и удаленных адресов.
Синтаксис:
IPAddress(address)
Параметр: address — назначаемый IP-адрес. Возвращаемого значения нет.
Класс Server (Server class)
Класс Server создает сервер, который может передавать данные и получать данные от подключенных клиентов.
Функции класса Server:
ethernetServer();
begin();
available();
write();
print();
println().
Функция ethernetServer()
Функция ethernetServer() создает сервер, который прослушивает входящие соединения на указанный порт.
Синтаксис:
ethernetServer (port)
Параметр: port — назначаемый для прослушивания порт. Возвращаемого значения нет.
Функция begin()
Функция begin() запускает прослушивание входящих соединений. Синтаксис:
server.begin()
Параметров нет. Возвращаемого значения нет.
Функция available()
Функция available() получает ссылку на подключенного к серверу клиента для обмена данными.
Синтаксис:
available()
Параметров нет.
Возвращаемое значение: ссылка на подключенный к серверу клиент (EthernetClient client = server.available();).
Пример использования функции available() представлен в примере
#include <Ethernet.h>
#include <SPI.h>
// mac-адрес Ethernet shield:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// IP-адрес, назначаемый Ethernet shield: byte ip[] = { 192, 168, 0, 177 };
// адрес шлюза:
byte gateway[] = { 192, 168, 0, 1 };
// маска:
byte subnet[] = { 255, 255, 0, 0 };
// порт для сервера
EthernetServer server = EthernetServer(23);
void setup()
{
// инициализация Ethernet shield Ethernet.begin(mac, ip, gateway, subnet);
// запуск сервера server.begin();
}
void loop()
{
// получение ссылки на подключенного клиента EthernetClient client = server.available();
// пока подключение активно if (client == true) {
// читаем данные, отправляемые клиентом,
// и отправляем их обратно клиенту: server.write(client.read());
}
}
Функция write()
Функция write() отправляет данные всем клиентам, подключенным к серверу. Синтаксис:
server.write(data)
Параметр: data — отправляемые данные (байт или символ). Возвращаемого значения нет.
Функция print()
Функция print() отправляет данные всем клиентам, подключенным к серверу. При этом число отправляется как последовательность цифр данного числа.
Синтаксис:
server.print(data) server.print(data,BASE)
Параметры:
data — отправляемые данные (байт, символ, число, строка).
BASE — вид передаваемых символов:
• BIN — двоичный;
• DEC — десятичный;
• OCT — восьмеричный;
• HEX — шестнадцатеричный.
Возвращаемое значение: количество переданных байтов.
Функция println()
Функция println() отправляет данные всем клиентам, подключенным к серверу. Аналогична функции print() с добавлением в отправку символа перехода на но- вую строку.
Синтаксис:
server.println() server.println(data) server.println(data,BASE)
Параметры:
data — отправляемые данные (байт, символ, число, строка).
BASE — вид передаваемых символов:
• BIN — двоичный;
• DEC — десятичный;
• OCT — восьмеричный;
• HEX — шестнадцатеричный.
Возвращаемое значение: количество переданных байтов.
Класс Client (Client class)
Класс Client создает клиентов, которые могут подключаться к серверам и обмениваться данными.
Функции класса Client:
client;
EthernetClient();
connected();
connect();
write();
print();
println();
available();
read();
flush();
stop().
Функция client()
Функция client() создает клиента, который подключается к серверу по указанному в параметрах IP-адресу и порту.
Синтаксис: сlient(ip, port) Параметры:
ip — IP-адрес подключения клиента (массив из 4 байтов);
port — порт подключения клиента. Возвращаемого значения нет.
Функция EthernetClient()
Функция EthernetClient() создает клиента, который подключается к серверу. Параметры подключения (IP-адрес и порт) определяются в функции client.connect()).
Синтаксис: EthernetClient() Параметров нет.
Возвращаемого значения нет.
Функция connected()
Функция connected() определяет, подключен клиент или нет. Клиент считается подключенным, если соединение закрыто, но есть непрочитанные данные.
Синтаксис:
client.connected() Параметров нет.
Возвращаемые значения: true — если клиент подключен, и false — если нет.
Функция connect()
Функция connect() подключается к серверу по указанному IP-адресу и порту.
Синтаксис:
client.connect()
Параметры:
ip — IP-адрес подключения клиента (массив из 4 байтов);
port — порт подключения клиента.
Возвращаемые значения: true — если клиент подключен, и false — если нет.
Функция write()
Функция write() отправляет на сервер данные с подключенного клиента.
Синтаксис:
client.write(data)
Параметр: data — отправляемые данные (байт или символ). Возвращаемого значения нет.
Функция print()
Функция print() отправляет данные на сервер с подключенного клиента. При этом число отправляется как последовательность цифр данного числа.
Синтаксис:
client.print(data) client.print(data,BASE)
Параметры:
data — отправляемые данные (байт, символ, число, строка).
BASE — вид передаваемых символов:
• BIN — двоичный;
• DEC — десятичный;
• OCT — восьмеричный;
• HEX — шестнадцатеричный.
Возвращаемое значение: количество переданных байтов.
Функция println()
Функция println() отправляет данные на сервер с подключенного клиента. Аналогична функции print() с добавлением в отправку символа перехода на новую строку.
Синтаксис:
client.println() client.println(data) client.println(data,BASE)
Параметры:
data — отправляемые данные (байт, символ, число, строка).
BASE — вид передаваемых символов:
• BIN — двоичный;
• DEC — десятичный;
• OCT — восьмеричный;
• HEX — шестнадцатеричный.
Возвращаемое значение: количество переданных байтов.
Функция available()
Функция available() возвращает число байтов, доступных для чтения (т. е. объем данных, который был отправлен сервером для клиента).
Синтаксис: client.available() Параметров нет.
Возвращаемое значение: количество доступных для чтения байтов.
Функция read()
Функция read() получает следующий (после последнего, полученного командой read()) байт от сервера или –1, если данных больше нет.
Синтаксис:
client.read()
Параметров нет.
Возвращаемое значение: байт или –1.
Функция flush()
Функция flush() сбрасывает полученные от сервера, но еще не прочитанные данные.
Синтаксис:
client.flush() Параметров нет.
Возвращаемого значения нет.
Функция stop()
Функция stop() отключает клиента от сервера.
Синтаксис:
client.stop()
Параметров нет. Возвращаемого значения нет.
Класс EthernetUDP (EthernetUDP class)
Класс EthernetUDP позволяет отправлять и получать UDP-сообщения. Функции класса EthernetUDP:
begin();
read();
write();
beginPacket();
endPacket();
parsePacket();
available();
remoteIP();
remotePort().
Функция begin()
Функция begin() инициализирует библиотеки Ethernet UDP и сетевые параметры.
Синтаксис:
client.begin(port)
Параметр: port — локальный порт для прослушивания.
Возвращаемого значения нет.
Функция read()
Функция read() читает UDP-данные из указанного буфера. Если аргументы не заданы, то она вернет следующий символ в буфере.
Синтаксис:
UDP.read() UDP.read(packetBuffer,maxSize)
Параметры:
packetBuffer — буфер для хранения входящих пакетов;
maxSize — максимальный размер буфера. Возвращаемое значение: символы из буфера.
Функция write()
Функция write() записывает UDP-данные в удаленное соединение. Данные должны быть заключены между beginPacket() и endPacket(). beginPacket() инициализирует пакет данных, данные не отправляются до вызова endPacket().
Синтаксис:
UDP.write(message)
Параметр: message — отправляемое сообщение.
Возвращаемое значение: количество возвращаемых символов.
Пример использования функции write()
// мас-адрес Ethernet shield:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// IP-адрес в локальной сети: IPAddress ip(192, 168, 1, 177);
// порт
unsigned int localPort = 8888; EthernetUDP Udp;
void setup() {
// запустить UDP-соединение Ethernet.begin(mac,ip); Udp.begin(localPort);
}
void loop() {
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); Udp.write("hello");
Udp.endPacket();
}
Функция beginPacket()
Функция beginPacket() инициирует UDP-подключение на отправку данных в удаленное соединение.
Синтаксис:
beginPacket (remoteIP, port)
Параметры:
remoteIP — IP-адрес удаленного соединения;
port — порт удаленного соединения.
Возвращаемого значения нет.
Функция endPacket()
Функция endPacket() вызывается после записи UDP-данных удаленного соединения.
Синтаксис:
endPacket()
Параметров нет. Возвращаемого значения нет.
Функция parsePacket()
Функция parsePacket() проверяет наличие пакета UDP и его размер. Функция parsePacket() должна вызываться перед чтением буфера с UDP.read().
Синтаксис:
parsePacket()
Параметров нет.
Возвращаемое значение: размер полученных данных.
Пример использования функции parsePacket() представлен в примере.
// мас-адрес Ethernet shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// ip-адрес
IPAddress ip(192, 168, 1, 177);
// порт
unsigned int localPort = 8888; EthernetUDP Udp;
void setup() {
// запустить UDP-соединение Ethernet.begin(mac,ip); Udp.begin(localPort); Serial.begin(9600);
}
void loop() {
// получить размер данных
int packetSize = Udp.parsePacket(); if(packetSize)
{
Serial.print("size="); Serial.println(packetSize);
}
delay(10);
}
Функция available()
Функция available() получает количество данных, доступных для чтения из буфера.
Синтаксис:
available()
Параметров нет.
Возвращаемое значение: количество байтов, доступных для чтения.
Функция remoteIP()
Функция remoteIP() получает IP-адрес удаленного соединения. Эта функция должна быть вызвана после UDP.parsePacket().
Синтаксис:
remoteIP()
Параметров нет.
Возвращаемое значение: IP-адрес удаленного соединения (4 байта).
Функция remotePort()
Функция remotePort() получает IP-адрес удаленного соединения UDP.
Синтаксис:
remotePort()
Параметров нет.
Возвращаемое значение: порт соединения с удаленным хостом.