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 сервером (можно посмотреть на странице конфигурации вашего роутера).

190 06.04.2017