Ethernet library – библиотека для работы с Ethernet-шилдом
Ethernet-шилд – это дополнительная плата, которая подключается к ардуино и позволяет этой замечательной плате посылать и получать данные через локальную сеть и даже работать с Интернетом.
Работа с протоколами TCP/IP в шилде реализована аппаратно на микросхеме W5100.
Для работы с данным шилдом ничего дополнительно скачивать не нужно, т.к. в составе Arduino IDE уже есть удобная библиотека (\libraries\Ethernet\).
Библиотека содержит три класса: EthernetClass ,Client и Server.
Чтобы начать работать с библиотекой – её нужно сначала подключить; для этого можно написать
#include <Ethernet.h>
или выбрать в меню Arduino IDE:
Sketch – Import Library… — Ethernet
и в Ваш скетч автоматически добавятся строчки:
#include <Client.h> #include <Ethernet.h> #include <Server.h>
Библиотека позволяет выступать не только в качестве клиента, но и как сервер и поддерживает до четырёх одновременных подключений (входящих или исходящих).
Рассмотрим функции, которые реализуют этот функционал.
Первым делом необходимо инициализировать работу с библиотекой функцией begin, которая принимает от двух до четырёх параметров:
void begin(uint8_t *, uint8_t *);
Описание:
Инициализирует работу с библиотекой Ethernet и устанавливает сетевые настройки.
Синтаксис:
Ethernet.begin(mac, ip); Ethernet.begin(mac, ip, gateway); Ethernet.begin(mac, ip, gateway, subnet);
Параметры:
mac — MAC-адрес — физический адрес устройства (массив из 6 байт)
ip — IP-адрес – сетевой адрес Вашего устройства (массив из 4 байт)
gateway – IP-адрес Вашего сетевого шлюза (массив из 4 байт) (по-умолчанию – IP-адрес устройства с 1 в последнем октете)
subnet – маска подсети. (массив из 4 байт) (по-умолчанию 255.255.255.0)
если Вы не помните свои сетевые параметры, то на компьютере под управлением ОС Windows их можно посмотреть через
Пуск – Панель управления – Сетевые подключения
Щёлкнуть правой кнопкой мышки на «Подключение по локальной сети» и выбрать «Свойства»
В появившемся окошке выделить в списке «Протокол Интернета TCP/IP» и нажать кнопку «Свойства»
или же просто набрать в консоли команду
ipconfig /all
Возвращаемое значение:
ничего
Пример:
#include <Ethernet.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 10, 0, 0, 177 }; void setup() { Ethernet.begin(mac, ip); }
Как уже отметили – библиотека позволяет работать в двух режимах – серверном или клиентском.
Рассмотрим серверные функции.
Server(uint16_t);
Описание:
Это конструктор класса Server – при вызове данной функции создаётся объект типа Server, для обработки входящих подключений по указанному порту.
Синтаксис:
Server(port);
Параметры:
port: номер порта сервера (int)
Возвращаемое значение:
ничего
Пример:
#include <Ethernet.h> // задаём сетевую конфигурацию (шлюз и маска подсети – не обязательно) byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 10, 0, 0, 177 }; byte gateway[] = { 10, 0, 0, 1 }; byte subnet[] = { 255, 255, 0, 0 }; // telnet на стандартном порту 23 Server server = Server(23); void setup() { // инициализация Ethernet-модуля Ethernet.begin(mac, ip, gateway, subnet); // запускаем сервер server.begin(); } void loop() { Client client = server.available(); if (client) { server.write(client.read()); } }
void begin();
Описание:
Запускает сервер на приём входящих соединений.
Синтаксис:
server.begin();
Параметры:
нет
Возвращаемое значение:
ничего
Пример:
#include <Ethernet.h> // задаём сетевую конфигурацию (шлюз и маска подсети – не обязательно) byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 10, 0, 0, 177 }; byte gateway[] = { 10, 0, 0, 1 }; byte subnet[] = { 255, 255, 0, 0 }; // telnet на стандартном порту 23 Server server = Server(23); void setup() { // инициализация Ethernet-модуля Ethernet.begin(mac, ip, gateway, subnet); // запускаем сервер server.begin(); }
Client available();
Описание:
Возвращает объект типа Client , который представляет клиентское подключение к серверу и имеет данные для считывания (запрос). Объект сохраняется при выходе из области видимости; его можно закрыть вызовом client.stop().
Синтаксис:
server.available();
Параметры:
Нет
Возвращаемое значение:
ничего
Пример:
void loop() { Client client = server.available(); if (client) { server.write(client.read()); } }
virtual void write(uint8_t);
virtual void write(const char *str);
virtual void write(const uint8_t *buf, size_t size);
Описание:
Запись данных для передачи подключенному клиенту.
Синтаксис:
server.write(data);
Параметры:
data – байт или строка символов
Возвращаемое значение:
ничего
Пример:
void loop() { Client client = server.available(); if (client) { server.write(client.read()); } }
Т.к. класс Server наследуется от класса Print возможен так же вызов функций
print()
println()
Печатает данные для всех подключённых клиентов. Числа печатаются, как последовательность цифр, в виде ASCII-символов (например, число 123 будет передано как три символа: ‘1’, ‘2’, ‘3’).
Функции println печатают данные с последующим переводом на новую строчку.
Синтаксис:
server.print(data); server.print(data, BASE); server.println(); server.println(data); server.println(data, BASE);
Параметры:
data – данные для печати (char, byte, int, long или строка)
BASE (опционально): основание представления числа: BIN -двоичное (основание 2), DEC десятичное (основание 10), OCT — восьмеричное (основание 8), HEX — шестнадцатеричное(основание 16).
Теперь рассмотрим клиентские функции.
Client(uint8_t);
Client(uint8_t *, uint16_t);
Описание:
Это конструктор класса Client – при вызове данной функции создаётся объект типа Client , который может подключаться к указанному IP-адресу и порту.
Синтаксис:
Client(ip, port);
Параметры:
ip: IP-адрес к которому клиент должен подключиться (массив из 4 байт)
port: номер порта для поключения (int)
Пример:
#include <Ethernet.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 10, 0, 0, 177 }; byte server[] = { 64, 233, 187, 99 }; // Google Client client(server, 80); void setup() { Ethernet.begin(mac, ip); Serial.begin(9600); delay(1000); Serial.println("connecting..."); if (client.connect()) { Serial.println("connected"); client.println("GET /search?q=arduino HTTP/1.0"); client.println(); } else { Serial.println("connection failed"); } } void loop() { if (client.available()) { char c = client.read(); Serial.print( c ); } if (!client.connected()) { Serial.println(); Serial.println("disconnecting."); client.stop(); for(;;) ; } }
uint8_t connected();
Описание:
Определяет есть ли подключение к серверу.
! Клиент считается подключённым, если подключение уже закрыто, но остались несчитанные данные.
Синтаксис:
client.connected();
Параметры:
нет
Возвращаемое значение:
true – если клиент подключен и false в противном случае.
Пример:
void loop() { if (client.available()) { char c = client.read(); Serial.print( c ); } if (!client.connected()) { Serial.println(); Serial.println("disconnecting."); client.stop(); for(;;) ; } }
uint8_t connect();
Описание:
Подключается к IP-адресу и порту, заданному через конструктор.
Синтаксис:
client.connect();
Параметры:
нет
Возвращаемое значение:
ничего
Пример:
true – если подключиться удалось и false в противном случае.
Пример:
void setup() { Ethernet.begin(mac, ip); Serial.begin(9600); delay(1000); Serial.println("connecting..."); if (client.connect()) { Serial.println("connected"); client.println("GET /search?q=arduino HTTP/1.0"); client.println(); } else { Serial.println("connection failed"); } }
virtual void write(uint8_t);
virtual void write(const char *str);
virtual void write(const uint8_t *buf, size_t size);
Описание:
Запись данных для передачи к подключенному серверу.
Синтаксис:
client.write(data);
Параметры:
data – байт или строка символов
Возвращаемое значение:
ничего
Как и класс Server – класс Client наследуется от класса Print и так же возможен вызов функций
print()
println()
Печатает данные для сервера, к которому подключён клиент. Числа печатаются, как последовательность цифр, в виде ASCII-символов (например, число 123 будет передано как три символа: ‘1’, ‘2’, ‘3’).
Функции println печатают данные с последующим переводом на новую строчку.
Синтаксис:
server.print(data); server.print(data, BASE); server.println(); server.println(data); server.println(data, BASE);
Параметры:
data – данные для печати (char, byte, int, long или строка)
BASE (опционально): основание представления числа: BIN -двоичное (основание 2), DEC десятичное (основание 10), OCT — восьмеричное (основание 8), HEX — шестнадцатеричное(основание 16).
Пример:
void setup() { Ethernet.begin(mac, ip); Serial.begin(9600); delay(1000); Serial.println("connecting..."); if (client.connect()) { Serial.println("connected"); client.println("GET /search?q=arduino HTTP/1.0"); client.println(); } else { Serial.println("connection failed"); } }
int available();
Описание:
Возвращает количество байт, доступных для чтения (т.е. объем данных, которые были переданы клиенту со стороны сервера).
Синтаксис:
client.available();
Параметры:
нет
Возвращаемое значение:
Количество доступных байт (int).
Пример:
void loop() { if (client.available()) { char c = client.read(); Serial.print( c ); } }
int read();
Описание:
Считывает следующий байт, полученный клиентом от сервера (после последнего вызова read())
Синтаксис:
client.read();
Параметры:
нет
Возвращаемое значение:
Байт (или символ) или -1 если данные отсутствуют.
Пример:
void loop() { if (client.available()) { char c = client.read(); Serial.print( c ); } }
void flush();
Описание:
Очищает данные, которые были получены клиентом, но еще не были им прочитаны.
Синтаксис:
client.flush();
Параметры:
нет
Возвращаемое значение:
Ничего
void stop();
Описание:
Отключение от сервера.
Синтаксис:
client.stop();
Параметры:
нет
Возвращаемое значение:
ничего
Ссылки
http://www.arduino.cc/en/Reference/Ethernet
http://code.google.com/p/webduino/
0 комментариев на «“Программирование Arduino — библиотека Ethernet”»
Спасибо, коротко и понятно 🙂
(замечание, парсер скушал в текстах конструкцию (Ц) решил, что это копирайт 🙂 может имеет смысл переменную по другому назвать?
Спасибо! пофиксил.
В begin можно только MAC-адрес указать, тогда плата будет пытаться получить настройки по DHCP.
Такое ощущение, что автор копипастил шаблон и даже не пытался править.
begin может взращать int для случая с DHCP.
available возвращает количество байт в буфере.
write возвращает количество записанных байт.
Ну и далее по тексту.
Возможно, дело в том, что это описание библиотеки было сделано весной 2010? 🙂