Самый распространенный метод обеспечить доступ платы Arduino к сети Интернет — использование платы Ethernet shield (рис. 13.1). Ethernet shield — это плата расширения, которая устанавливается на плату Arduino сверху. Она дает ей возможность выступать в роли сетевого устройства и общаться по проводной сети с аналогичными устройствами, с обычными компьютерами, принтерами, сервисами в Интернете и прочими сетевыми ресурсами. Последняя версия платы Ethernet Shield Rev3 полностью совместима с Arduino Mega2560.
Плата Ethernet shield основана на микросхеме Wiznet W5100, которая поддерживает как TCP-, так и UDP-протоколы. Одновременно открытыми могут быть до четырех подключений.
Плата обладает стандартным Ethernet-портом для подключения к сети с помощью патч-корда витой пары и набором контактов для подключения к Arduino. Для общения между собой Ethernet shield и Arduino задействуют контакты 4-й и с 10-го по 13-й, поэтому их использование в других целях в присутствии платы расширения невозможно.
Для программирования сетевого взаимодействия подключается библиотека Ethernet из стандартного дистрибутива. При использовании этой библиотеки необходимо указывать MAC-адрес платы (уникальный идентификатор любого сетевого устройства). В более новых версиях Ethernet-шилда MAC-адрес можно увидеть на наклейке на плате. Если такой наклейки нет, то просто введите любую похожую комбинацию, — главное, чтобы в вашей сети не было устройств с совпадающими MAC-адресами.
На плате размещен слот для карты памяти формата microSD, которая может быть использована для хранения ресурсов, раздаваемых по сети. Для взаимодействия с такой картой следует подключить, например, библиотеку sdfatlib.
Для отправки данных в облачные сервисы в примерах этого раздела мы воспользуемся веб-клиентом на основе платы Arduino c установленной на нее платой расширения Ethernet shield.
Рис. 13.1. Плата Ethernet shield Rev3
13.1.1. Получение IP-адреса по DHCP
Соединим Ethernet shield с платой Arduino и создадим простой пример получения ими IP-адреса по DHCP. Соединяется Ethernet shield с платой Arduino так же просто, как и любой другой шилд, — просто состыкуйте их вместе. Cледует учесть, что установка других шилдов поверх Ethernet shield весьма затруднительна. Это связано с большими размерами имеющегося на плате Ethernet shield разъема RJ-45, служащего для подключения сетевого кабеля, поэтому, если вы хотите использовать совместно с Arduino еще и другие шилды, лучше их размещать между Arduino и Ethernet shield.
Итак, подключим плату Arduino к USB-порту компьютера, а Ethernet shield подсоединим c помощью сетевого кабеля к маршрутизатору, имеющему выход в Интернет (рис. 13.2).
Скетч, обеспечивающий получение IP-адреса по DHCP, представлен в листинге 13.1, а пример назначения статического IP-адреса — в листинге 13.2.
Рис. 13.2. Подключение к плате Arduino платы расширения Ethernet shield Rev3
Листинг 13.1
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 | // Получение IP-адреса по DHCP // MAC-адрес Ethernet shield (можно увидеть на наклейке на плате) или // произвольный уникальный в сети #include <Ethernet.h> #include <SPI.h> byte mac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02}; void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); } // запуск Ethernet-соединения if (Ethernet.begin(mac) == 0) { Serial.println("Failed to configure Ethernet using DHCP"); for (;;) ; } // печать в последовательный порт полученного по DHCP адреса Serial.print("My IP address: "); for (byte thisByte = 0; thisByte < 4; thisByte++) { Serial.print(Ethernet.localIP()[thisByte], DEC); Serial.print("."); } Serial.println(); } void loop() {;} |
Электронный архив
Полный вариант рассмотренного скетча находится в папке examples\13\_13_01 сопровождающего книгу электронного архива (см. приложение 2).
Листинг 13.2
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 | // Получение статического IP-адреса // MAC-адрес Ethernet shield (можно увидеть на наклейке на плате) или // произвольный уникальный в сети #include <Ethernet.h> #include <SPI.h> byte mac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02}; // IP-адрес, назначаемый Ethernet shield: byte ip[] = { 192, 168, 0, 111 }; // IP-адрес dns сервера: byte sdns[] = { 192, 168, 1, 1 }; // адрес шлюза: byte gateway[] = { 192, 168, 0, 1 }; // маска: byte subnet[] = { 255, 255, 255, 0 }; void setup() { Serial.begin(9600); // запуск Ethernet-соединения Ethernet.begin(mac, ip, sdns, gateway, subnet); delay(1000); Serial.println(Ethernet.localIP()); } void loop() {;} |
Электронный архив
Полный вариант рассмотренного скетча находится в папке examples\13\_13_02 сопровождающего книгу электронного архива (см. приложение 2).