Arduino:Знакомство с Arduino/Знакомство с Arduino WiFi Shield
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Знакомство с Arduino WiFi Shield[1]
Модуль Arduino WiFI Shield позволяет плате Arduino подключаться к интернету при помощи библиотеки WiFi, а также считывать и записывать данные на SD-карту при помощи библиотеки SD.
Библиотека WiFI включена в самую последнюю версию IDE Arduino. В версии IDE Arduino 1.0.4 прошивка WiFi-модуля поменялась, и мы настоятельно рекомендуем установить этот апдейт.
Соответствующее руководство можно найти по этой ссылке.
Библиотека WiFi очень похожа на библиотеку Ethernet – многие их функции даже называются одинаково.
Подключение Shield
Чтобы использовать модуль, подключите его к верхней части платы Arduino (например, Uno). Чтобы загрузить скетч на плату, подключите ее к компьютеру как обычно – при помощи USB-кабеля. Когда скетч будет загружен, плату можно отключать от компьютера и питать от внешнего источника питания.
7-ой цифровой контакт используется для синхронизации между WiFi-модулем и Arduino, поэтому для других целей его использовать не следует.
Использование WiFi-модуля на старых платах
Если вы используете WiFi-модуль на Arduino, которая вышла раньше Uno rev3, вам нужно сделать так, как показано на фото ниже. WiFi-модулю необходимо «знать» об опорном напряжении на I/O контактах платы, к которой он подсоединен, и на новых версиях Arduino (Uno rev3, Mega2560 rev3 и новее) для этого используется контакт IOREF. Но если вы используете старую Arduino, вам нужно будет самостоятельно подключить IOREF-контакт WiFi-модуля к 3,3-вольтовому контакту. Это можно сделать двумя способами – либо кинув между этими контактами провод-перемычку, либо припаяв перемычку на контактных площадках IOREF, находящихся в нижней части модуля. Оба варианта показаны на фото ниже.
Внимание! Если вы делаете перемычку припоем, не подключайте WiFi-модуль к платам версии rev3 и новее. Лучше вообще снимите IOREF-контакт с модуля. В противном случае вы закоротите плату через этот контакт.
Провод-перемычка от 3,3 вольт к IOREF-контакту (рекомендуемый вариант).
Припаянная перемычка от 3,3 вольт к IOREF-контакту.
Порты на WiFi Shield
На WiFi-модуле имеется встроенный коннектор micro-USB. Он используется не для программирования подключенной к модулю платы Arduino, а для обновления процессора ATmega 32UC3, использующего протокол Atmel DFU. Перемычка, через которую разрешается программирование ATmega 32UC3, расположена рядом с шиной питания и аналоговыми контактами. При обычном использовании WiFi-модуля эта перемычка должна оставаться в выключенном состоянии – она нужна только для DFU-программирования.
Через FTDI-соединение осуществляется последовательная коммуникация с 32UC3 – для диагностических целей. Список доступных команд можно найти тут.
Сетевые настройки
WiFi-модуль умеет подключаться к открытым сетям, а также к сетям с шифрованием с WEP и WPA Personal. К сожалению, к сетям с шифрованием WPA2 Enterprise он подключаться не может.
Для того чтобы WiFI-модуль мог подключиться к сети, роутер должен транслировать SSID, т.е. название этой сети.
А зависимости от конфигурации вашего беспроводного роутера, вам может понадобиться следующая информация:
- Для открытых (незашифрованных) сетей – SSID.
- Для сетей, использующих шифрование WPA или WPA2 Personal – SSID и пароль.
- Пароли к сетям с WEP-шифрованием – это шестнадцатеричные строки, которые называют «ключами». WEP-сеть может иметь до четырех разных ключей, причем каждому ключу присвоен собственный индекс. Соответственно, для сетей с WEP-шифрованием вам понадобятся SSID, ключ и номер ключа.
Поиск доступных сетей
Скетч ниже отлично подойдет для тех случаев, когда вы начинаете пользоваться платой в каком-то новом месте. Он не будет подключаться к сети, но покажет какие сети видны WiFi-модулю в данный момент времени. Ваш WiFi-модуль, вероятно, будет видеть не так много сетей, как компьютер, т.к. оснащен более слабой WiFi-антенной. Загрузив скетч на Arduino, откройте последовательный порт – там будут отображаться все доступные WiFi-сети.
#include <SPI.h>
#include <WiFi.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: "); // "\tСигнал: "
Serial.print(WiFi.RSSI(thisNet));
Serial.print(" dBm");
Serial.print("\tEncryption: "); // "\tШифрование: "
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"); // "WiFi-соединение выполнить не удалось"
while(true);
}
// если подключиться удалось:
else {
Serial.print("Connected to the network"); // "Подключение выполнено успешно"
}
}
void loop() {
// ничего не делаем
}
Подключение к сети с WPA-шифрованием
Скетч ниже показывает, как подключиться к открытой сети с шифрованием WPA или WPA2 Personal. Название сети – «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..."); // "Попытка подключиться к 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-ключа, основанного на кодовой фразе, должны выглядеть примерно так:
Если у вас нет доступа к административным настройкам роутера, проконсультируйтесь с системным администратором.
Длина WEP-ключа может составлять 10 или 26 шестнадцатеричных символов – 40 и 128 бит, соответственно. Кроме того, в паре с каждым ключом будет идти индекс ключа. К примеру, 40-битным ключом может быть «ABBADEAF01», однако ключи «ABBADEAF» и «ABBAISDEAF» работать не будут – первый слишком короткий, а во втором есть несовместимые с шестнадцатеричным форматом символы «I» и «S». Примером 128-битного ключа может служить «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..."); // "Попытка подключиться к 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() {
// ничего не делаем
}
SD-карта и SPI
В WiFi-модуле, помимо прочего, имеется слот micro-SD, с которым можно работать через библиотеку SD. SS-контактом для SD-карты является контакт номер 4.
Коммуникация между Arduino и WiFi-модулем осуществляется через SPI-шину. На Uno она находится на 11-ом, 12-ом и 13-ом контактах, а на Mega – на 50-ом, 51-ом и 52-ом контактах. На обеих платах в качестве SS-контакта используется 10-ый контакт. На Mega аппаратным SS-контактом является 53-ий контакт, однако его нужно держать выходным и не использовать ни для каких целей, иначе SPI-интерфейс не будет работать.
Обновление прошивки WiFi-модуля
Об обновлении прошивки модуля Arduino WiFi Shield читайте тут.
Что дальше
Дополнительную информацию о функционале WiFi-модуля читайте на странице о библиотеке WiFi, а также в этих скетчах-примерах.
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |