Начало работы с Arduino WiFi Shield 101
Первые шаги по настройке Arduino WiFi Shield 101.
Примечание
Это устаревший продукт.
Arduino WiFi 101 Shield позволяет плате Arduino подключаться к интернету с помощью библиотеки WiFi101. Библиотеку WiFi101 можно загрузить с помощью Менеджера библиотек Arduino. Библиотека WiFi101 похожа на библиотеку Ethernet, и многие вызовы функций совпадают.
Подключение платы расширения
Чтобы использовать плату расширения, установите её поверх платы Arduino (например, Zero). Для загрузки скетчей на плату подключите её к компьютеру USB-кабелем, как обычно. После загрузки скетча вы можете отключить плату от компьютера и запитать её от внешнего источника питания.
Цифровой пин 7 используется как пин подтверждения связи (handshake) между WiFi Shield и Arduino и не должен использоваться;
Цифровой пин 6 подключён к кнопке на плате;
Цифровой пин 5 управляет линией сброса встроенного модуля WINC1500;
Сетевые настройки
Плата расширения может подключаться к открытым сетям, а также к сетям с шифрованием 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 <WiFi101.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 <SPI.h>
#include <WiFi101.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 <SPI.h>
#include <WiFi101.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 <SPI.h>
#include <WiFi101.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
}
SPI
Arduino связывается с платой расширения через шину SPI. На Uno это цифровые пины 11, 12 и 13, на Mega – пины 50, 51 и 52. На обеих платах пин 10 используется как SS. На Mega аппаратный пин SS (53) не используется, но он должен быть настроен как выход, иначе интерфейс SPI не будет работать.
Обновление прошивки и загрузка SSL-сертификатов
При необходимости библиотека WiFi101 обновляется для реализации новых функций. Обычно это требует обновления прошивки WiFi с помощью специального инструмента. Плата расширения поставляется с рядом корневых сертификатов, которые позволяют безопасно подключаться к большому количеству веб-сайтов. Если вам нужно использовать другие сертификаты, вам понадобится тот же инструмент. Пожалуйста, обратитесь к документации скетча Firmware Updater и плагина, доступной на странице библиотеки WiFi101.
Руководства
Вот список руководств, которые помогут вам создавать интересные проекты!
- Взаимодействие с Google Calendar
Этот пример показывает, как отправлять запросы к Google Calendar с использованием WiFi Shield 101.
- Звуковой уведомитель погоды
В этом примере информация о погоде с openweathermap.org используется для отображения текущей информации о погоде.
- Загрузка данных на ThingSpeak
Отправляйте поток значений освещённости и температуры в вашем окружении в реальном времени, используя ThingSpeak.com.
Дальнейшие шаги
Обратитесь к странице библиотеки WiFi 101 для получения дополнительной информации о функциональности платы расширения, а также дополнительных примеров.