В данном мини-проекте рассматривается подключение модуля к контроллеру с помощью Sensor shield, и поиск доступных для подключения сетей Wi-Fi.
Модуль общается с контроллером посредством интерфейса UART. Так как на контроллерах UNO (Arduino Uno, Genuino Uno, Smart Uno) всего один аппаратный интерфейс UART, мы будем общаться с контроллером с помощью программного UART интерфейса. Это даёт нам возможность не занимать аппаратный интерфейс, таким образом мы сможем, как минимум, наблюдать за происходящим на Wi-Fi модуле, через монитор Serial-порта контроллера.
Изначально модуль настроен на работу с помощью AT-команд. Но вручную писать AT-команды очень неудобно, по нескольким причинам:
Поэтому, чтобы общение с модулем было наиболее эффективным, простым и быстрым, мы воспользуемся библиотекой WiFiEsp
Скачайте и установите данную библиотеку в среду разработки Arduino IDE.
Перед началом работы настройте модуль на скорость обмена в 9600 бод. О том как это сделать, рассказано на этой странице.
Возьмите необходимые для проекта элементы, представленные в таблице ниже.
Что нужно | Кол-во, шт |
---|---|
Контроллер Smart Uno | 1 |
Wi-Fi модуль ESP-12 | 1 |
Провода мама-мама | 4 |
Выполните подключение модуля в соответствии со схемой ниже.
Загрузите скетч, представленный ниже, на контроллер. Предварительно измените значения переменных:
#include "WiFiEsp.h" //подключение библиотеки WiFiEsp
// Эмуляция Serial соединения
#ifndef HAVE_HWSERIAL1
#include "SoftwareSerial.h"
SoftwareSerial wifiSerial(6, 7); // TX - модуля , RX - модуля
#endif
char ssid[] = "SmartElements"; //имя сети wifi
char pass[] = "1234567890"; //пароль от сети wifi
int status = WL_IDLE_STATUS; // статус сети wifi
void setup()
{
//инициализация Serial-соединения для отладки
Serial.begin(9600);
//инициализация Serial-соединения для ESP-модуля
wifiSerial.begin(9600);
//инициализация ESP модуля
WiFi.init(&wifiSerial);
//проверка существования модуля
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi module not present");
//если модуля нет, то не продолжать работу далее
while (true);
}
//вывод MAC-адреса
printMacAddress();
}
void loop()
{
//сканирование существующих сетей
Serial.println();
Serial.println("Scanning available networks...");
listNetworks();
delay(10000);
}
/* Процедура выводит MAC-адрес
* в монитор Serial-порта.
*/
void printMacAddress()
{
//получение MAC-адреса
byte mac[6];
WiFi.macAddress(mac);
//вывод MAC-адреса
char buf[20];
sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X", mac[5], mac[4], mac[3], mac[2], mac[1], mac[0]);
Serial.print("MAC address: ");
Serial.println(buf);
}
/* Процедура получает список беспроводных сетей
* и выводит его в монитор Serial-порта.
*/
void listNetworks()
{
//поиск беспроводных сетей в зоне видимости
int numSsid = WiFi.scanNetworks();
if (numSsid == -1) { //не найдено ни одной сети
Serial.println("Couldn't get a wifi connection");
while (true);
}
//вывод найденных сетей
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: ");
printEncryptionType(WiFi.encryptionType(thisNet));
}
}
/* Вывод информации о типе шифрования
* в обнаруженной сети.
*/
void printEncryptionType(int thisType) {
//вывод типа шифрования
switch (thisType) {
case ENC_TYPE_WEP:
Serial.print("WEP");
break;
case ENC_TYPE_WPA_PSK:
Serial.print("WPA_PSK");
break;
case ENC_TYPE_WPA2_PSK:
Serial.print("WPA2_PSK");
break;
case ENC_TYPE_WPA_WPA2_PSK:
Serial.print("WPA_WPA2_PSK");
break;
case ENC_TYPE_NONE:
Serial.print("None");
break;
}
Serial.println();
}
Далее, откройте монитор Serial-порта в Arduino IDE, и посмотрите параметры подключения. Вы увидите информацию вида:
[WiFiEsp] Initializing ESP module
[WiFiEsp] Initilization successful - 1.5.4
MAC address: 19:FE:56:F1:29:EF
Scanning available networks...
Number of available networks:9
0) wifi-tat-mm Signal: -76 dBm Encryption: WPA2_PSK
1) NivaForge-WiFi Signal: -88 dBm Encryption: WPA2_PSK
2) MicroTicket-SpB-1 Signal: -87 dBm Encryption: WPA_WPA2_PSK
3) Yana Signal: -94 dBm Encryption: WPA2_PSK
4) 221_470 Signal: -92 dBm Encryption: WPA_WPA2_PSK
5) beeline2102 Signal: -91 dBm Encryption: WPA_WPA2_PSK
6) gansnroses Signal: -75 dBm Encryption: WPA_WPA2_PSK
7) verdict Signal: -84 dBm Encryption: WPA2_PSK
8) TP-LINK_GG113 Signal: -73 dBm Encryption: WPA2_PSK
Где выводится список доступных сетей, с данными :