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

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

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.



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

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

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

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

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

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

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

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

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

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

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

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

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

#include <SPI.h>
#include <WiFi101.h>

void setup() {
  // инициализируем последовательную коммуникацию и ждем открытия порта:
  Serial.begin(9600);
  while(!Serial) ;

  // пытаемся подключиться при помощи шифрования WEP:
  Serial.println("Initializing Wifi...");  //  "Инициализация WiFi..." 
  printMacAddress();

  // сканируем доступные сети:
  Serial.println("Scanning available networks...");  //  "Сканирование доступных сетей..."
  listNetworks();
}

void loop() {
  delay(10000);
  // сканируем доступные сети:
  Serial.println("Scanning available networks...");  //  "Сканирование доступных сетей..." 
  listNetworks();
}

void printMacAddress() {
  // MAC-адрес WiFi-шилда:
  byte mac[6];                     

  // печатаем MAC-адрес:
  WiFi.macAddress(mac);
  Serial.print("MAC: ");
  Serial.print(mac[5],HEX);
  Serial.print(":");
  Serial.print(mac[4],HEX);
  Serial.print(":");
  Serial.print(mac[3],HEX);
  Serial.print(":");
  Serial.print(mac[2],HEX);
  Serial.print(":");
  Serial.print(mac[1],HEX);
  Serial.print(":");
  Serial.println(mac[0],HEX);
}

void listNetworks() {
  // сканируем ближайшие сети:
  Serial.println("** Scan Networks **");  //  "** Сканирование сетей **"
  byte numSsid = WiFi.scanNetworks();

  // печатаем список найденных сетей:
  Serial.print("number of available networks:");  //  "количество доступных сетей:"
  Serial.println(numSsid);

  // печатаем количество и название каждой найденной сети:
  for (int thisNet = 0; thisNet<numSsid; thisNet++) {
    Serial.print(thisNet);
    Serial.print(") ");
    Serial.print(WiFi.SSID(thisNet));
    Serial.print("\tSignal: ");
    Serial.print(WiFi.RSSI(thisNet));
    Serial.print(" dBm");
    Serial.print("\tEncryption: ");
    Serial.println(WiFi.encryptionType(thisNet));
  }
}

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

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

#include <SPI.h>
#include <WiFi101.h>

char ssid[] = "yourNetwork";     // название вашей сети
int status = WL_IDLE_STATUS;     // статус WiFi-соединения

void setup() {
  // инициализируем последовательную коммуникацию:
  Serial.begin(9600);

  // пытаемся подключиться к открытой сети:
  Serial.println("Attempting to connect to open network...");  //  "Попытка подключения к открытой сети... "
  status = WiFi.begin(ssid);

  // если подключиться не удалось, завершаем работу:
  if ( status != WL_CONNECTED) { 
    Serial.println("Couldn't get a wifi connection");  //  "Подключиться по WiFi не удалось"
    while(true);
  } 
  // если подключились:
  else {
      Serial.print("Connected to the network");  //  "Подключение прошло успешно"
  }
}

void loop() {
  // ничего не делаем
}

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

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

#include <SPI.h>
#include <WiFi101.h>

char ssid[] = "yourNetwork";     //  название (SSID) вашей сети 
char pass[] = "12345678";        //  пароль к вашей сети
int status = WL_IDLE_STATUS;     //  статус WiFi-соединения

void setup() {
  // инициализируем последовательную коммуникацию:
  Serial.begin(9600);

  // пытаемся подключиться при помощи шифрования WPA2:
  Serial.println("Attempting to connect to WPA network...");  //  "Попытка подключения к сети с шифрованием WPA... "
  status = WiFi.begin(ssid, pass);

  // если подключиться не удалось, завершаем работу:
  if ( status != WL_CONNECTED) { 
    Serial.println("Couldn't get a wifi connection");  //  "Подключиться по WiFi не удалось"
    while(true);
  } 
  // если удалось, сообщаем об этом:
  else {
    Serial.println("Connected to network");  //  "Подключение прошло успешно"
  }
}

void loop() {
  // ничего не делаем
}

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

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

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

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

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

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

#include <SPI.h>
#include <WiFi101.h>

char ssid[] = "yourNetwork";     //  название (SSID) вашей сети 
char key[] = "ABBADEAF01";       //  ключ к вашей сети
int keyIndex = 0;                //  номер ключа к вашей сети
int status = WL_IDLE_STATUS;     //  статус WiFi-соединения

void setup() {
  // инициализируем последовательную передачу данных:
  Serial.begin(9600);

  // пытаемся подключиться при помощи шифрования WEP:
  Serial.println("Attempting to connect to WEP network...");  //  "Попытка подключиться к сети с шифрованием WEP... "
  status = WiFi.begin(ssid, keyIndex, key);

  // если подключиться не удалось, прекращаем работу:
  if ( status != WL_CONNECTED) { 
    Serial.println("Couldn't get a wifi connection");  //  "Не удалось соединиться по WiFi"
    while(true);
  } 
  // если подключиться удалось, сообщаем об этом:
  else {
    Serial.println("Connected to network");  //  "Подключение прошло успешно"
  }
}

void loop() {
  // ничего не делаем
}

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, в частности – в указанных там скетчах-примерах.

См.также

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