ESP8266 КАК ARDUINO
Arduino сейчас - это один из главных трендов в интернете вещей, поскольку данные платы позволяют быстро и без особых затруднений реализовывать проекты по управлению умным домом. Но у этих плат есть один большой минус - отсутствие беспроводной коммуникации в большинстве дешёвых версий. Раньше это решалось дополнительными модулями, такими как приёмники-передатчки на 433 МГц или модули NRF24. Сейчас, с появлением дешёвого WI-FI модуля ESP8266, проблема беспроводной коммуникации перешла в разряд задачи, с которой можно справится, изучив несколько руководств.
Однако, ESP8266 - это не просто WI-FI транссивер - это настоящий программируемый контроллер с выходами, который может полностью заменить плату Arduino. Даже больше - во многих случаях связка Arduino + ESP8266 просто избыточна.
В этой статье будет рассмотрена настройка данного контроллера для работы со средой Arduino IDE с целью как можно более лёгкого вхождения в написание программ для этой платформы.
ЖЕЛЕЗО И ЕГО ПОДКЛЮЧЕНИЕ
Существуют разные вариации модулей ESP8266, в зависимости от форм-фактора, объёма памяти и некоторых других возможностей. Поэтому, при подключении модуля, можно столкнуться с различными затруднениями. Чтобы их избежать, мы привели наиболее часто встречающиеся проблемы в списке ниже.
ПРОБЛЕМА: Модули питаются от 3.3В, вместо более распространённого питания в 5В. Так же они требуют 250 мА тока для стабильной работы.
РЕШЕНИЕ: Первый вариант решения - использовать модуль, где уже есть регулятор питания. Это позволит Вам запитать его от стандартных 5В (которые живут в USB). Тока тоже должно хватить, так как USB у компьютера выдаёт 500 мА. Второй вариант решения - использование отдельного источника тока на 3.3В, к примеру через стабилизатор AMS1117 на 3.3В.
ПРОБЛЕМА: Модули используют логику 3.3В, а у большинства устройств логика 5В.
РЕШЕНИЕ: Использование преобразователей уровней логики TTL, либо универсальных преобразователей на 4 или 8 каналов.
ПРОБЛЕМА: Версия ESP8266-01 имеет разъём, который нельзя запихнуть в обычную макетную плату.
РЕШЕНИЕ: Провода папа-мама наше всё, в данном случае.
ПРОБЛЕМА: Многие модули ESP имеют шаг между контактами в 2.0мм, вместо обычных 2.54мм
РЕШЕНИЕ: Вот такой переходник для ESP позволит легко разместить модуль на любой макетной плате.
НАСТРОЙКА СРЕДЫ ARDUINO
Теперь перейдём, собственно, к настройке среды Arduino. В ранних версиях среды этот процесс занял бы много времени, но сейчас вы можете просто выкачать нужные библиотеки и компиляторы через саму среду.
Первым шагом, является запуск среды.
После запуска через Файл -> Настройки добавляем ссылку на данные о модулях ESP8266.
Для стабильной ветки: http://arduino.esp8266.com/stable/package_esp8266com_index.json
Для самых последних версий: http://arduino.esp8266.com/staging/package_esp8266com_index.json
Теперь заходим в Инструменты -> Плата -> Менеджер плат
Ждём, пока обновятся данные и добавляем модули ESP8266. Чтобы добавить модуль, в поиске забиваем “ESP8266”, а затем жмём на появившийся модуль:
Появится кнопка “Установка”. Устанавливаем.
После выполнения этих действий, среди доступных для работы плат, появятся модули ESP8266:
В зависимости от используемого модуля, будут появляется разные дополнительные настройки при выборе (как и в случае с платами Arduino).
ПРОШИВКА МОДУЛЕЙ ИЗ СРЕДЫ ARDUINO
Рассмотрим, что нам необходимо сделать, чтобы загрузить прошивку для разных модулей.
Откроем один из базовых примеров:
Исходный код этого примера приведён далее:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
// Настройки точки доступа для подключения
const char* ssid = "........";
const char* password = "........";
// Создаём WEB-сервер
ESP8266WebServer server(80);
// ID пина
const int led = 13;
// Функция, которая будет обрабатывать обращение к корневому элементу сревера, т.е. “/”
void handleRoot() {
digitalWrite(led, 1);
server.send(200, "text/plain", "hello from esp8266!");
digitalWrite(led, 0);
}
// Функция, которая будет возвращать ошибку 404
void handleNotFound(){
digitalWrite(led, 1);
String message = "File Not Foundnn";
message += "URI: ";
message += server.uri();
message += "nMethod: ";
message += (server.method() == HTTP_GET)?"GET":"POST";
message += "nArguments: ";
message += server.args();
message += "n";
for (uint8_t i=0; i<server.args(); i++){
message += " " + server.argName(i) + ": " + server.arg(i) + "n";
}
server.send(404, "text/plain", message);
digitalWrite(led, 0);
}
// Инициализациямодуля
void setup(void) {
pinMode(led, OUTPUT);
digitalWrite(led, 0);
Serial.begin(115200);
// Подключаемсяк WIFI
WiFi.begin(ssid, password);
Serial.println("");
// Ждёмсоединения
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (MDNS.begin("esp8266")) {
Serial.println("MDNS responder started");
}
// Задаёмобработчикисобытий
server.on("/", handleRoot);
server.on("/inline", [](){
server.send(200, "text/plain", "this works as well");
});
server.onNotFound(handleNotFound);
server.begin();
Serial.println("HTTP server started");
}
// Функция loop
void loop(void){
server.handleClient();
}
Как можно видеть, код во многом похож на код для Arduino, хотя есть и отличия. Рассмотрение его подробно выходит за рамки данной статьи, поэтому перейдём непосредственно к прошивке.
Для начала рассмотрим загрузку в стандартные модули без всяких дополнительных обвесок (ESP8266 01-12). Для этого требуется выбрать плату “Generic ESP8266 module”, которая означает обычный модуль.
В зависимости от модуля и прошивки потребуется установить разные настройки.
Их тут достаточно много и в случае неудачи при установке тех параметров, о которых мы расскажем позже, возможно потребуется посмотреть даташит на ваш модуль и описание вашей версии прошивки.
Итак, нам надо установить параметр Flash Size (берётся из даташита), без него прошивка работать не будет.
Upload Speed - скорость загрузки, чаще всего это 9600 бод или 115200 бод.
Порт - COM порт к которому подключен usb-ttl преобразователь, подключенный к модулю.
Не забываем перевести модуль в режим прошивки! Для этого заземляем GPIO0, ненадолго заземляем CH_PD, после чего отпускаем GPIO0. Модуль загрузится в режиме прошивки.
После этого загружаем прошивку как обычно и пробуем обратится по ip, который был назначен DHCP сервером (можно посмотреть на странице конфигурации вашего роутера).