Arduino:Знакомство с Arduino/Знакомство с Arduino WiFi Shield 101

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Pixel Art Mini Meow Animated.gif Черновик


Знакомство с Arduino WiFi Shield 101[1]

«Шилд» Arduino WiFi Shield 101 позволяет плате Arduino/Genuino подключаться к интернету при помощи библиотеки WiFi101. Ее можно загрузить при помощи меню «Управлять библиотеками...» в IDE Arduino. Библиотека WiFi101 очень похожа на библиотеку Ethernet – многие функции вызываются точно таким же образом.

Подключение «шилда»

Wifi shield101.jpg

Чтобы использовать «шилд», подключите его к верхней части платы Arduino/Genuino (например, Zero). Чтобы загружать скетчи на плату, подключите ее к компьютеру при помощи USB-кабеля – как это делается обычно.

Когда скетч будет загружен, плату от компьютера можно отключить и питать от внешнего источника питания.

  • Цифровой контакт 7 используется как контакт для «рукопожатия» между «шилдом» и Arduino, поэтому использовать его для других целей не следует
  • Цифровой контакт 6 подключен к встроенной кнопке
  • Цифровой контакт 5 управляет линией сброса на встроенном модуле WINC1500

Сетевые настройки

Этот «шилд» может подключаться как к открытым сетям, так и к сетям с шифрованием WEP и WPA2 Personal. Впрочем, он не умеет подключаться к сетям с шифрованием WPA2 Enterprise.

Чтобы «шилд» мог подключиться, точка доступа должна транслировать SSID (название сети).

В зависимости от настроек вашего беспроводного роутера, вам может потребоваться следующая информация:

  • Для открытой (незашифрованной) сети – SSID
  • Для сетей с шифрованием WPA/WPA2 PersonalSSID и пароль
  • Для сетей с шифрованием WEPSSID, ключ и номер ключа. Ключ – это, в сущности, тот же пароль, но в виде шестнадцатеричной строки. Кроме того, каждому ключу присваивается специальный индекс – это номер ключа.

Поиск доступных сетей

Скетч, приложенный ниже, хорошо подходит, если вы принесли плату в новое место и запускаете ее в первый раз. Он не подключается к сетям, но показывает сети, которые доступны в этом месте. Этот «шилд» вряд ли увидит столько же сетей, сколько ваш компьютер, потому что WiFi-антенна «шилда» меньше, чем у компьютера. Загрузите скетч на Arduino. Чтобы увидеть доступные сети, откройте монитор порта.

 1 #include <SPI.h>
 2 #include <WiFi101.h>
 3 
 4 void setup() {
 5   // инициализируем последовательную коммуникацию и ждем открытия порта:
 6   Serial.begin(9600);
 7   while(!Serial) ;
 8 
 9   // пытаемся подключиться при помощи шифрования WEP:
10   Serial.println("Initializing Wifi...");  //  "Инициализация WiFi..." 
11   printMacAddress();
12 
13   // сканируем доступные сети:
14   Serial.println("Scanning available networks...");  //  "Сканирование доступных сетей..."
15   listNetworks();
16 }
17 
18 void loop() {
19   delay(10000);
20   // сканируем доступные сети:
21   Serial.println("Scanning available networks...");  //  "Сканирование доступных сетей..." 
22   listNetworks();
23 }
24 
25 void printMacAddress() {
26   // MAC-адрес WiFi-шилда:
27   byte mac[6];                     
28 
29   // печатаем MAC-адрес:
30   WiFi.macAddress(mac);
31   Serial.print("MAC: ");
32   Serial.print(mac[5],HEX);
33   Serial.print(":");
34   Serial.print(mac[4],HEX);
35   Serial.print(":");
36   Serial.print(mac[3],HEX);
37   Serial.print(":");
38   Serial.print(mac[2],HEX);
39   Serial.print(":");
40   Serial.print(mac[1],HEX);
41   Serial.print(":");
42   Serial.println(mac[0],HEX);
43 }
44 
45 void listNetworks() {
46   // сканируем ближайшие сети:
47   Serial.println("** Scan Networks **");  //  "** Сканирование сетей **"
48   byte numSsid = WiFi.scanNetworks();
49 
50   // печатаем список найденных сетей:
51   Serial.print("number of available networks:");  //  "количество доступных сетей:"
52   Serial.println(numSsid);
53 
54   // печатаем количество и название каждой найденной сети:
55   for (int thisNet = 0; thisNet<numSsid; thisNet++) {
56     Serial.print(thisNet);
57     Serial.print(") ");
58     Serial.print(WiFi.SSID(thisNet));
59     Serial.print("\tSignal: ");
60     Serial.print(WiFi.RSSI(thisNet));
61     Serial.print(" dBm");
62     Serial.print("\tEncryption: ");
63     Serial.println(WiFi.encryptionType(thisNet));
64   }
65 }

Подключение к открытой сети

Скетч ниже показывает, как инициировать подключение к открытой сети под названием «yourNetwork»:

 1 #include <SPI.h>
 2 #include <WiFi101.h>
 3 
 4 char ssid[] = "yourNetwork";     // название вашей сети
 5 int status = WL_IDLE_STATUS;     // статус WiFi-соединения
 6 
 7 void setup() {
 8   // инициализируем последовательную коммуникацию:
 9   Serial.begin(9600);
10 
11   // пытаемся подключиться к открытой сети:
12   Serial.println("Attempting to connect to open network...");  //  "Попытка подключения к открытой сети... "
13   status = WiFi.begin(ssid);
14 
15   // если подключиться не удалось, завершаем работу:
16   if ( status != WL_CONNECTED) { 
17     Serial.println("Couldn't get a wifi connection");  //  "Подключиться по WiFi не удалось"
18     while(true);
19   } 
20   // если подключились:
21   else {
22       Serial.print("Connected to the network");  //  "Подключение прошло успешно"
23   }
24 }
25 
26 void loop() {
27   // ничего не делаем
28 }

Подключение к сети с шифрованием WPA

Скетч ниже демонстрирует, как подключиться к сети с шифрованием WPA/WPA2 Personal, под названием «yourNetwork» и с паролем «12345678»:

 1 #include <SPI.h>
 2 #include <WiFi101.h>
 3 
 4 char ssid[] = "yourNetwork";     //  название (SSID) вашей сети 
 5 char pass[] = "12345678";        //  пароль к вашей сети
 6 int status = WL_IDLE_STATUS;     //  статус WiFi-соединения
 7 
 8 void setup() {
 9   // инициализируем последовательную коммуникацию:
10   Serial.begin(9600);
11 
12   // пытаемся подключиться при помощи шифрования WPA2:
13   Serial.println("Attempting to connect to WPA network...");  //  "Попытка подключения к сети с шифрованием WPA... "
14   status = WiFi.begin(ssid, pass);
15 
16   // если подключиться не удалось, завершаем работу:
17   if ( status != WL_CONNECTED) { 
18     Serial.println("Couldn't get a wifi connection");  //  "Подключиться по WiFi не удалось"
19     while(true);
20   } 
21   // если удалось, сообщаем об этом:
22   else {
23     Serial.println("Connected to network");  //  "Подключение прошло успешно"
24   }
25 }
26 
27 void loop() {
28   // ничего не делаем
29 }

Подключение к сети с шифрованием WEP

У вашего роутера, скорее всего, будет меню вроде того, что указано ниже. Оно используется для генерации WEP-ключа на основе фразы в формате ASCII.

WiFiRouterWEPSetup.png

Если у вас нет доступа к администраторским инструментам роутера, проконсультируйтесь у своего системного администратора.

Длина каждого ключа может составлять 10 или 26 шестнадцатеричных цифр (40 или 128 бит), и в паре с каждым ключом, кроме того, идет номер ключа. К примеру, 40-битный ключ «ABBADEAF01» работать будет, а «ABBADEAF» – нет (слишком короткий), и «ABBAISDEAF» – тоже нет («I» и «S» – это не шестнадцатеричные символы). Для 128-битного ключа нужно 26 символов. К примеру, подойдет ключ вроде «D0D0DEADF00DABBADEAFBEADED», потому что в нем 26 символов, и все в диапазонах 0-9 и A-F.

Примечание: WEP – это базовая система шифрования, и она может быть взломана. Если вам нужно более крепкое шифрование, советуем использовать WPA.

Скетч-пример ниже показывает, как подключаться к сети с шифрованием WEP, под названием «yourNetwork» и с шестнадцатеричным ключом ABBADEAF01, который имеет номер «0».

 1 #include <SPI.h>
 2 #include <WiFi101.h>
 3 
 4 char ssid[] = "yourNetwork";     //  название (SSID) вашей сети 
 5 char key[] = "ABBADEAF01";       //  ключ к вашей сети
 6 int keyIndex = 0;                //  номер ключа к вашей сети
 7 int status = WL_IDLE_STATUS;     //  статус WiFi-соединения
 8 
 9 void setup() {
10   // инициализируем последовательную передачу данных:
11   Serial.begin(9600);
12 
13   // пытаемся подключиться при помощи шифрования WEP:
14   Serial.println("Attempting to connect to WEP network...");  //  "Попытка подключиться к сети с шифрованием WEP... "
15   status = WiFi.begin(ssid, keyIndex, key);
16 
17   // если подключиться не удалось, прекращаем работу:
18   if ( status != WL_CONNECTED) { 
19     Serial.println("Couldn't get a wifi connection");  //  "Не удалось соединиться по WiFi"
20     while(true);
21   } 
22   // если подключиться удалось, сообщаем об этом:
23   else {
24     Serial.println("Connected to network");  //  "Подключение прошло успешно"
25   }
26 }
27 
28 void loop() {
29   // ничего не делаем
30 }

SPI

Arduino коммуницирует с «шилдом» при помощи интерфейса SPI. На Uno этот интерфейс находится на цифровых контактах 11, 12 и 13, а на Mega – на 50, 51 и 52. На обеих платах в качестве SS-контакта используется контакт 10. На Mega аппаратным SS-контактом является контакт 53, и он не используется, но его нужно держать в режиме OUTPUT, иначе интерфейс SPI не будет работать.

Обновление прошивки и загрузка SSL-сертификатов

Если необходимо, разработчики добавляют в библиотеку WiFi101 новые функции. Как правило, это требует обновления прошивки «шилда» при помощи специального инструмента. «Шилд» поставляется с несколькими корневыми сертификатами, позволяющими выполнять безопасное соединение со многими внешними сайтами. Если вам нужно использовать разные сертификаты, то понадобится и этот инструмент. Более подробно читайте в статье о скетче «Firmware Updater».

Руководства

Ниже – список руководств по сборке нескольких интересных проектов:

  • Взаимодействие с календарем Google – здесь демонстрируется, как при помощи Arduino WiFi Shield 101 делать запросы к календарю Google.
  • Звуковой синоптик – здесь показывается, как использовать погодную информацию с сайта openweathermap.org для вывода звуковой информации о том, какая сейчас погода.
  • Загрузка данных на ThingSpeak – здесь демонстрируется, как при помощи thingspeak.com транслировать данные о свете и температуре в месте, в котором вы находитесь.

Что дальше

Дополнительную информацию о функционале «шилда» Arduino WiFi 101 Shield смотрите на странице библиотеки WiFi 101, в частности – в указанных там скетчах-примерах.

См.также

Внешние ссылки