Начало работы с Arduino WiFi Shield
Первые шаги по настройке Arduino WiFi Shield.
Примечание
Это устаревший продукт.
Arduino WiFi Shield позволяет плате Arduino подключаться к интернету с помощью библиотеки WiFi и считывать/записывать данные на SD-карту с помощью библиотеки SD.
Библиотека WiFi включена в самую последнюю версию Arduino IDE.
Важно
Прошивка для WiFi Shield была изменена в Arduino IDE 1.0.4. Настоятельно рекомендуется установить это обновление согласно этим инструкциям.
Библиотека WiFi похожа на библиотеку Ethernet, и многие вызовы функций совпадают.
Подключение платы расширения
Чтобы использовать плату расширения, установите её поверх платы Arduino (например, Uno). Для загрузки скетчей на плату подключите её к компьютеру USB-кабелем, как обычно. После загрузки скетча вы можете отключить плату от компьютера и запитать её от внешнего источника питания.
Цифровой пин 7 используется как пин подтверждения связи (handshake) между WiFi Shield и Arduino и не должен использоваться для других целей.
Использование с более старыми платами
Предупреждение
Если вы используете WiFi Shield с Arduino старше Uno rev3, вам необходимо выполнить подключение, описанное ниже, чтобы плата работала.
WiFi Shield использует пин IOREF на более новых платах Arduino (Uno rev3, Mega2560 rev3 и новее) для определения опорного напряжения пинов ввода-вывода платы, к которой она подключена. Если вы используете плату расширения со старой платой, вам нужно соединить пин IOREF платы расширения с 3.3V. Вы можете сделать это либо с помощью перемычки, соединяющей IOREF с 3.3V, как показано на фото ниже, либо запаяв перемычку IOREF на нижней стороне платы расширения, показанную ниже.
Предупреждение
Если вы используете паяную перемычку, не подключайте плату расширения к плате rev3 или более поздней. Для безопасности удалите пин IOREF на плате расширения. В противном случае вы замкнёте 3.3V на 5V через пин IOREF.
Перемычка 3.3V на IOREF (рекомендуется):
Пайка 3.3V на IOREF:
Порты на WiFi Shield
На плате расположен разъём micro-USB. Он предназначен не для программирования подключённой Arduino, а для обновления Atmega 32UC3 по протоколу Atmel DFU. Перемычка программирования, расположенная рядом с шиной питания и аналоговыми входами, должна быть разомкнута при обычном использовании. Она используется только для режима программирования DFU.
FTDI-подключение позволяет осуществлять последовательную связь с 32UC3 для отладки. Список доступных команд можно найти здесь.
Сетевые настройки
Плата расширения может подключаться к открытым сетям, а также к сетям с шифрованием WEP и WPA2 Personal. Плата расширения не может подключаться к сетям с шифрованием WPA2 Enterprise.
SSID (имя сети) должен быть видимым (broadcast) для подключения платы расширения.
В зависимости от конфигурации вашего беспроводного маршрутизатора вам потребуется разная информация.
Для открытой (незашифрованной) сети вам нужен SSID.
Для сетей с шифрованием WPA/WPA2 Personal вам нужны SSID и пароль.
Пароли сетей WEP представляют собой шестнадцатеричные строки, называемые ключами. Сеть WEP может иметь 4 разных ключа; каждому ключу присваивается значение «Key Index». Для сетей с шифрованием WEP вам нужны SSID, ключ и номер ключа.
Сканирование доступных сетей
Скетч ниже рекомендуется запустить при первом использовании платы в новом месте. Этот скетч не будет подключаться к сети, но покажет, какие сети видит плата расширения. Ваш WiFi Shield, вероятно, увидит меньше сетей, чем компьютер с более крупной WiFi-антенной. После загрузки скетча на Arduino откройте монитор последовательного порта, чтобы увидеть доступные сети.
#include <SPI.h>
#include <WiFi.h>
void setup() {
// initialize serial and wait for the port to open:
Serial.begin(9600);
while(!Serial) ;
// attempt to connect using WEP encryption:
Serial.println("Initializing Wifi...");
printMacAddress();
// scan for existing networks:
Serial.println("Scanning available networks...");
listNetworks();
}
void loop() {
delay(10000);
// scan for existing networks:
Serial.println("Scanning available networks...");
listNetworks();
}
void printMacAddress() {
// the MAC address of your Wifi shield
byte mac[6];
// print your MAC address:
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() {
// scan for nearby networks:
Serial.println("** Scan Networks **");
byte numSsid = WiFi.scanNetworks();
// print the list of networks seen:
Serial.print("number of available networks:");
Serial.println(numSsid);
// print the network number and name for each network found:
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"; // the name of your network
int status = WL_IDLE_STATUS; // the Wifi radio's status
void setup() {
// initialize serial:
Serial.begin(9600);
// attempt to connect to an open network:
Serial.println("Attempting to connect to open network...");
status = WiFi.begin(ssid);
// if you're not connected, stop here:
if ( status != WL_CONNECTED) {
Serial.println("Couldn't get a wifi connection");
while(true);
}
// if you are connected :
else {
Serial.print("Connected to the network");
}
}
void loop() {
// do nothing
}
Пример сети WPA
Пример ниже показывает, как подключиться к сети с шифрованием WPA/WPA2 Personal с именем «yourNetwork» и паролем «12345678».
#include <WiFi.h>
char ssid[] = "yourNetwork"; // your network SSID (name)
char pass[] = "12345678"; // your network password
int status = WL_IDLE_STATUS; // the Wifi radio's status
void setup() {
// initialize serial:
Serial.begin(9600);
// attempt to connect using WPA2 encryption:
Serial.println("Attempting to connect to WPA network...");
status = WiFi.begin(ssid, pass);
// if you're not connected, stop here:
if ( status != WL_CONNECTED) {
Serial.println("Couldn't get a wifi connection");
while(true);
}
// if you are connected, print out info about the connection:
else {
Serial.println("Connected to network");
}
}
void loop() {
// do nothing
}
Пример сети 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"; // your network SSID (name)
char key[] = "ABBADEAF01"; // your network key
int keyIndex = 0; //your network key Index number
int status = WL_IDLE_STATUS; // the Wifi radio's status
void setup() {
// initialize serial:
Serial.begin(9600);
// attempt to connect using WEP encryption:
Serial.println("Attempting to connect to WEP network...");
status = WiFi.begin(ssid, keyIndex, key);
// if you're not connected, stop here:
if ( status != WL_CONNECTED) {
Serial.println("Couldn't get a wifi connection");
while(true);
}
// if you are connected, print out info about the connection:
else {
Serial.println("Connected to network");
}
}
void loop() {
// do nothing
}
SD-карта и SPI
WiFi Shield включает слот для micro-SD карты, с которым можно взаимодействовать с помощью библиотеки SD. SS для SD-карты – это пин 4.
Arduino связывается с платой расширения через шину SPI. На Uno это цифровые пины 11, 12 и 13, на Mega – пины 50, 51 и 52. На обеих платах пин 10 используется как SS. На Mega аппаратный пин SS (53) не используется, но он должен быть настроен как выход, иначе интерфейс SPI не будет работать.
Обновление прошивки платы расширения
Пожалуйста, следуйте этому руководству для обновления прошивки вашей платы расширения.
Дальнейшие шаги
Обратитесь к странице библиотеки WiFi для получения дополнительной информации о функциональности платы расширения, а также дополнительных примеров.