для ESP32 можно также с помощью Arduino IDE, необходимо лишь доустановить компилятор для этого типа процессоров.

Для этого нужно:

- Скачать по адресу https://git-scm.com/download/win и установить программу контроля версий Git.

- В папке Документы\Arduino создать папку hardware\espressif\.

- Скачать библиотеки и компилятор для ESP32. Для этого нужно открыть консоль (Win+R - cmd), перейти в папку (cd C:\Users\Имя пользователя\Documents\Arduino\hardware\espressif\) и выполнить команду

git clone --recurse-submodules -j8 https://github.com/espressif/arduino-esp32.git (вместо консоли можно также воспользоваться Git GUI). Библиотеки будут устанавливаться довольно долго, около 10 минут.

- По окончании установки, нужно зайти в папку hardware\espressif\arduino-esp32\tools и запустить файл get.exe, который скачает недостающие файлы. Процесс также может занять несколько минут.

После этого заново запустим Arduino IDE - мы увидим, что количество доступных типов плат увеличилось, выберем ESP32 Dev Module.

Теперь можно подключить плату, и испытать какие-нибудь примеры. Поскольку, возможность работы с WiFi и Bluetooth является одним из основных преимуществ платы, это мы и проверим. Выберем в меню File-Examples-WiFi scan. Запускаем компиляцию… и получаем сообщение об ошибке. Оказывается, библиотека WiFi.h, идущая в комплекте с ESP32 SDK, конфликтует с уже имеющейся в папке "C:\Program Files (x86)\Arduino\libraries" библиотекой с тем же названием. Удаляем папку WiFi оттуда, перезапускаем Arduino IDE, после этого компиляция происходит нормально.

Код сканирования WiFi-сетей приведен ниже, как можно видеть, он весьма прост, и по стилю практически ничем не отличается от рассматриваемых ранее примеров для Arduino.

#include "WiFi.h"

void setup() {

Serial.begin(115200);

WiFi.mode(WIFI_STA);

WiFi.disconnect();

delay(100);

}

void loop() {

Serial.println("scan start");

int n = WiFi.scanNetworks();

Serial.println("scan done");

if (n == 0) {

Serial.println("no networks found");

} else {

Serial.print(n);

Serial.println(" networks found");

for (int i = 0; i < n; ++i) {

Serial.print(i + 1);

Serial.print(": ");

Serial.print(WiFi.SSID(i));

Serial.print(" (");

Serial.print(WiFi.RSSI(i));

Serial.print(")");

Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN)?" ":"*");

delay(10);

}

}

Serial.println("");

delay(5000);

}

Запускаем программу, и получаем список доступных WiFi-сетей:

Ура - мы проверили возможность новой платы работать с сетевым окружением, то, что не было доступно для Arduino.

3.2 Порты ввода-вывода

Перед использованием любой платы нужно разобраться, где и какие выводы расположены. Самый простой способ в нашем случае - набрать в поиске гугла фразу “ESP32 dev board pinout”. Для используемой в опытах платы ESP32 расположение пинов показано на картинке, впрочем для разных модификаций оно может отличаться.

Протестируем возможности ввода вывода на этой плате. Код программы практически ничем не отличается от Arduino, хотя и есть некоторые отличия. Для вывода результатов будем использовать serial port.

// Встроенный светодиод на плате

int ledPin = 2;

// Кнопка

int inputPin = 23;

// Тач-панель

int touchPin = 4;

void setup() {

Serial.begin(115200);

pinMode(ledPin, OUTPUT);

pinMode(inputPin, INPUT_PULLUP);

}

void loop() {

// Читаем значение touchPin

int touch_value = touchRead(touchPin);

Serial.println(touch_value);

// Читаем значение inputPin

int buttonState = digitalRead(inputPin);

Serial.println(buttonState);

// Мигаем светодиодом

digitalWrite(ledPin, HIGH);

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В, скорее всего такое подключение работать будет, но это не

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату
×