Выбрать главу

delay(1000);

digitalWrite(ledPin, LOW);

delay(1000);

}

Итак, несколько отличий. Как говорится в старом анекдоте, есть 2 новости - плохая и хорошая. Точнее, хороших новостей даже несколько.

1. Ввод данных с кнопки. Точно также, нужно настроить порт как “вход” (input). Но обратим внимание на новый параметр INPUT_PULLUP. Да, теперь “подтягивающий резистор” на плату можно не ставить, он уже есть в процессоре и его можно активировать программно.

2. Аппаратная поддержка касания (touch). Обратим внимание на выводы, отмеченные на картинке как Touch0...Touch9. Их можно использовать как тач-панель, вместо кнопок. Достаточно просто подключить к такому выводу кусок провода, и его касание рукой будет изменять значение переменной. Для примера выведем в порт значения touch_value:

Как можно видеть, в момент нажатия возвращаемые значения уменьшаются. Это можно использовать в коде с помощью обычной проверки вроде if (touch_value < 32) {...}.

3. Что касается вывода, то по сравнению с Arduino, он ничем не изменился, те же функции digitalWrite(ledPin, HIGH) и digitalWrite(ledPin, LOW).

Теперь обещанная плохая новость. Если мы возьмем плату с мигающим светодиодом, и тестером померяем напряжение на выходе, то увидим не 5В, а только 3.3В. Действительно, новые процессоры используют более низкое напряжение, по сравнению со старыми платами Arduino. Это не является какой-то глобальной проблемой, но при покупке датчиков или аксессуаров (например ЖК-экрана), стоит обратить внимание на то, чтобы датчик был совместим с 3.3В.

К примеру, посмотрим описание экрана на eBay:

Последняя строка Driving voltage - это то что нам нужно знать, чтобы убедиться что экран или датчик будет корректно работать с напряжением 3.3В.

Однако, что делать если есть какой-то нужный нам сенсор, работающий только от 5В? Выход 5В для питания сенсора на плате есть, он помечен как VIn, это не проблема. Проблема в вводе-выводе данных.

Здесь есть три способа:

1. Подключить “как есть”. При этом на входные пины платы будет подаваться напряжение 5В вместо 3.3В, скорее всего такое подключение работать будет, но это не гарантируется, да и не рекомендуется. Повышенное напряжение может привести к сокращению срока службы процессора.

2. Если данные поступают только на вход, то можно использовать делитель напряжения, который понизит напряжение с 5 до 3.3В:

3. Если нужен двухсторонний обмен данными, то можно использовать специальные платы, которые называются “logic level shifter”.

Такая плата ценой 1-2$ включается между устройствами, и обеспечивает необходимое преобразование уровней с помощью полевого транзистора. В наших опытах она не понадобится, но о том что такие платы есть, может быть полезно знать.

3.3 Подключаемся к WiFi

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

Код, делающий это, весьма прост, нужно знать лишь имя и пароль.

#include <WiFi.h>

const char* ssid = "TP-LINK_AB11";

const char* password = "12345678";

void setup() {

Serial.begin(115200);

Serial.print("Connecting to ");

Serial.println(ssid);

while (WiFi.status() != WL_CONNECTED) {

delay(1000);

Serial.print(".");

WiFi.begin(ssid, password);

}

Serial.println("");

Serial.println("WiFi connected!");

Serial.print("IP address: ");

Serial.println(WiFi.localIP());

Serial.print("ESP Mac Address: ");

Serial.println(WiFi.macAddress());

Serial.print("Subnet Mask: ");

Serial.println(WiFi.subnetMask());

Serial.print("Gateway IP: ");

Serial.println(WiFi.gatewayIP());

Serial.print("DNS: ");

Serial.println(WiFi.dnsIP());

}

void loop() {

}

Как можно видеть, мы вызываем функцию WiFi.begin для установки соединения, и проверяем WiFi.status() для проверки, активно ли соединение. Параметры ssid и password хранят данные, необходимые для подключения. Когда подключение установлено, мы можем получить параметры соединения: IP-адрес, маску подсети и пр. Включив Serial monitor, мы можем увидеть следующие данные:

В логе можно видеть, что соединение установлено, и плата получила IP-адрес 192.168.0.102. Каждое устройство в сети имеет свой собственный IP-адрес, по которому к нему можно обратиться. То что адрес доступен, можно проверить командой ping: открываем консоль (Win+R - cmd), набираем ping 192.168.0.102. В ответ мы должны получить примерно такой результат, если плата отвечает на запрос:

Итак, мы успешно подключились к Сети, и можем двигаться дальше.