Плата расширения Arduino WiFi

Плата расширения Arduino WiFi позволяет Ардуино выходить в Интернет (с помощью библиотеки WiFi), а также считывать и записывать данные на SD-карту памяти (с помощью библиотеки SD).

Библиотека WiFi включена в большинство последних версий среды разработки Arduino IDEВ Arduino IDE версии 1.0.4 была изменена прошивка платы расширения WiFi. Поэтому настоятельно рекомендуется установить все последние обновления согласно этим инструкциям.

Библиотека WiFI в целом похожа на библиотеку Ethernet, поэтому ряд функций из этих библиотек могут выглядеть одинаково.

Подключение платы расширения

Плату расширения Arduino WiFi необходимо подсоединить к Ардуино (например, Uno), расположив ее поверх основной платы. Для загрузки программ в Ардуино, подключите его к компьютеру посредством USB-кабеля. После прошивки программы, плату можно отсоединить от компьютера и запитать ее от внешнего источника. 

Цифровой вывод 7 используется для взаимодействия WiFi-платы расширения и Arduino, поэтому его нельзя использовать в своих скетчах.

Использование Arduino WiFi со старыми версиями Ардуино

Если вы планируете использовать WiFi-плату расширения с версиями Arduino, вышедшими до Uno rev3, то для корректной работы платы необходимо будет подсоединить ее так, как описано ниже. В Arduino WiFi для определения рабочего напряжения главного устройства используется вывод IOREF, присутствующий на всех новых платах Arduino (Uno rev3, Mega2560 rev3 и более поздние версии). Поскольку на старых версиях Ардуино такой вывод отсутствует, то при подключении платы расширения к ним необходимо будет подсоединить вывод IOREF на Arduino WiFi к напряжению 3.3В. Это можно сделать двумя способами: подбросить проводник к выводам IOREF и 3.3V (как показано на рисунке ниже), либо запаять перемычку IOREF с обратной стороны печатной платы, как показано ниже. ВНИМАНИЕ: если вы запаяете перемычку, не подключайте плату расширения к Ардуино rev3 или более новой версии. Для безопасности рекомендуется вообще убрать с платы расширения вывод IOREF. В противном случае через этот вывод можно замкнуть линии 3.3V и 5V.>

Подключение 3.3V к IOREF (рекомендуемый способ)

Перемычка между 3.3V и IOREF

Основные порты Arduino WiFi


На плате есть встроенный разъем micro-USB. Он предназначен не для программирования основной платы Ардуино, а для обновления прошивки микроконтроллера Atmega 32UC3 по протоколу Atmel DFU. Джампер, расположенный на плате возле аналоговых входов и разъема POWER, должен быть замкнут только в режиме прошивки DFU. В штатном режиме этот джампер должен быть разомкнут.

Разъем FTDI на плате позволяет организовать последовательную связь с контроллером 32UC3, что может быть полезно во время отладки. Список доступных команд можно найти здесь.

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

Плата расширения может подключаться к открытым сетям, как с WEP, так и с WPA2 Perosnal шифрованием, она не поддерживает только сети с шифрованием WPA2 Enterprise.

Для нормального подключения к сети ее имя SSID должно быть общедоступным.

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

  • Для подключения к открытой сети (незашифрованной) вам понадобится только ее SSID.
  • Для подключения к сетям с шифрованием WPA/WPA2 Personal - понадобится SSID сети и ее пароль.
  • Пароли сетей с WEP-шифрованием представляют собой шестнадцатеричные строки, которые известны как ключи. WEP-сеть может иметь 4 разных ключа; каждому ключу присвоен индекс ("Key Index"). Для подключения к беспроводной сети с WEP-шифрованием вам потребуется ее SSID, ключ и номер ключа.

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

Пример программы, приведенный ниже, наиболее уместен при первом включении платы расширения WiFi в новой зоне. Эта программа не подключается к какой-то конкретной сети, а показывает список сетей, доступных к подключению. При этом плата расширения WiFi может увидеть меньшее количество сетей, чем компьютер, поскольку она, как правило, обладает меньшей антенной. После прошивки программы в Ардуино, необходимо открыть последовательный порт, чтобы увидеть список доступных сетей.

#include <SPI.h>
#include <WiFi.h>

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

  // пытаемся подключиться с использованием WEP-шифрования:
  Serial.println("Initializing 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 <WiFi.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");
    while(true);
  } 
  // если подключились :
  else {
      Serial.print("Connected to the network");
  }
}

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

Как подключиться к WPA-сети

Пример программы, приведенный ниже, показывает, как подключиться к сети с шифрованием WPA/WPA2 Peronal с именем "yourNetwork" и паролем "12345678".

#include <WiFi.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...");
  status = WiFi.begin(ssid, pass);

  // если подключиться не удалось - прекращаем программу:
  if ( status != WL_CONNECTED) { 
    Serial.println("Couldn't get a wifi connection");
    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 <WiFi.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...");
  status = WiFi.begin(ssid, keyIndex, key);

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

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

SD-карта и SPI

В плате расширения Arduino WiFi есть разъем для подключения карт памяти micro-SD. Взаимодействие с картой памяти осуществляется с помощью библиотеки SD. Выводом SS для SD-карты памяти является вывод 4.

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

Обновление прошивки Arduino WiFi

Для обновления прошивки платы расширения, следуйте этим инструкциям.

Что дальше?

Для получения дополнительной информации о функциональности платы расширения и ознакомления с примерами программ см. справку по библиотеке WiFi