ESP-12F — простой старт
Практически любой разработчик в какой-то момент времени обнаруживает, что вернулся к вопросу, который однажды уже разбирал для себя. И тогда появляется потребность в заметках. Эта статья — о пройденных «граблях» при заливке прошивок в популярные сборки ESP-12F на базе микроконтроллера #ESP8266.
Подключение, шаг ног
Свой трудовой путь с этой серией МК я начинал с известной платы #NodeMCU V3. Штука удобная, но не самая компактная, для ряда проектов слишком габаритная. Поэтому позже я переключился на ESP-12F.
Использовать ESP-12 напрямую можно, но не очень удобно — у нее шаг ножек 2.0 мм. Соответственно, необходимо либо сразу готовить печатную плату «в размер», либо использовать удобный переходной элемент (см.галерею выше). Этот переходной элемент (шаг ног 2.54 мм) позволяет работать на макетных досках, но там нет ничего, обслуживающего плату.
Питание, грабли №1
Естественно, я не мог обойти эти грабли. При первых экспериментах я, долго не думая, переключил USB-TTL конвертер на 3.3 вольта, а потом удивлялся, почему вся система работает неустойчиво — то связь есть, то нет, вроде отвечает, но прошивка не льется.
Ответ — в установленном DC-DC на конвертере преобразователе тока не хватает. Проблема решилась переходом на 5 вольт на конвертере плюс установкой на макетку внешнего преобразователя (фото см.ниже). На всякий случай напоминаю, что подавать что-либо выше 3.7 вольта на любые ноги ESP-12 чревато гибелью последнего.
Питание, грабли №2
Если вы внимательно разглядывали переходную плату — обратили внимание на место для установки аналогичного преобразователя в корпусе SOT-89.
С его выбором надо быть крайне внимательным — порядок следования ног не стандартизован, а «наизнанку» планарные элементы не ставятся.
Также напоминаю, что для его работы необходимо убрать с платы резистор R2 с нулевым сопротивлением (он соединяет внешнюю ногу VCC и вход питания ESP-12).
Подключение для заливки прошивок
Что еще ждет экспериментатора, который перешел на ESP-12 с NodeMCU — это необходимость организации подключения служебных линий. Просто подачи питания недостаточно. Для того, чтобы быстрее приступить к экспериментам — хочется сделать максимально просто.
Я перебрал несколько вариантов и остановился вот на таком.
- GPIO15 через 10k на low (всегда)
- GPIO2 через 10k на high (всегда)
- GPIO0 подтянут через 10k к high, плюс стоит подключаемый джампер на low для режима прошивки (нет джампера = режим работы)
- TXD и RXD идут на TTL-конвертер
Вот здесь есть еще одна схема — GPIO0 через 275. 470 Ом к DTR, надо будет опробовать на досуге.
Sleep не использую, в «висящем в воздухе» состоянии на моем экземпляре проблем не возникает. Reset я также не трогал, вместо этого передергивал питание.
Напоминаю, что сначала выполняется переключение GPIO0, и только потом питание. Справочно это можно посмотреть здесь .
Собственно заливка — софт
Я больше пользуюсь ESP-12 в связке с Arduino IDE, который сам умеет готовить образ целиком (с этим, кстати, связаны еще одни грабли), но иногда надо проверить, что же там все-таки происходит «под капотом». Я сформировал себе вот такой набор софта:
1. Flash download tool, текущая версия на момент написания статьи — 3.9.0, брал здесь . Назначение — автоопределение объема и типа памяти в модуле, заливка немонолитных прошивок (например, под AT commands). Описание работы можно посмотреть в первом приближении здесь .
2. ESP8266 flasher. Брал здесь , тут же есть инструкция. Удобен для заливки монолитных прошивок, относительно п.1. меньше настроек, меньше возможностей.
3. ESPlorer. Брал здесь . Назначение — консоль под разные наборы команд с переключением скоростей (включая нестандартную 74880). Зачем она нужна — чуть позже.
Что лить
Самые первые проверки рекомендую проводить на «родных» прошивках от Espressif — AT commands. Основной репозиторий здесь . Вам нужны варианты non-OS. Схему заливки можно посмотреть в документации , вариант «OTA firmware», только не путайте мегабиты и мегабайты (в разных местах разные единицы измерения). Я использую вот эту.
ESP12: Подключение к сети WiFi
В данном мини-проекте рассматривается подключение модуля к контроллеру с помощью Sensor shield, и подключение к существующей сети Wi-Fi.
Модуль общается с контроллером посредством интерфейса UART. Так как на контроллерах UNO (Arduino Uno, Genuino Uno, Smart Uno) всего один аппаратный интерфейс UART, мы будем общаться с контроллером с помощью программного UART интерфейса. Это даёт нам возможность не занимать аппаратный интерфейс, таким образом мы сможем, как минимум, наблюдать за происходящим на Wi-Fi модуле, через монитор Serial-порта контроллера.
Изначально модуль настроен на работу с помощью AT-команд. Но вручную писать AT-команды очень неудобно, по нескольким причинам:
Поэтому, чтобы общение с модулем было наиболее эффективным, простым и быстрым, мы воспользуемся библиотекой WiFiEsp
Скачайте и установите данную библиотеку в среду разработки Arduino IDE.
Перед началом работы настройте модуль на скорость обмена в 9600 бод. О том как это сделать, рассказано на этой странице.
Шаг 1. Вам потребуется
Возьмите необходимые для проекта элементы, представленные в таблице ниже.
Шаг 2. Подключите Wifi модуль к шилду
Выполните подключение модуля в соответствии со схемой ниже.
Шаг 3. Загрузите скетч на контроллер
Загрузите скетч, представленный ниже, на контроллер. Предварительно измените значения переменных:
#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); } //попытка подключения к wifi сети while (status != WL_CONNECTED) { Serial.print("Attempting to connect to WPA SSID: "); //вывод надписи о попытке подключения Serial.println(ssid); //вывод названия сети //подключение к сети, используя имя и пароль status = WiFi.begin(ssid, pass); } Serial.println("You're connected to the network"); } void loop() { //вывод информации о подключении к сети каждые 10 секунд Serial.println(); printCurrentNet(); printWifiData(); delay(10000); } void printWifiData() { //вывод IP-адреса модуля IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); //вывод MAC-адреса модуля byte mac[6]; WiFi.macAddress(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); } void printCurrentNet() { //вывод информации о сети, к которой подключен модуль Serial.print("SSID: "); Serial.println(WiFi.SSID()); //вывод MAC-адреса роутера byte bssid[6]; WiFi.BSSID(bssid); char buf[20]; sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X", bssid[5], bssid[4], bssid[3], bssid[2], bssid[1], bssid[0]); Serial.print("BSSID: "); Serial.println(buf); //вывод силы сигнала сети wifi long rssi = WiFi.RSSI(); Serial.print("Signal strength (RSSI): "); Serial.println(rssi); }
Шаг 4. Результат соединения
Далее, откройте монитор Serial-порта в Arduino IDE, и посмотрите параметры подключения. Вы увидите информацию вида:
[WiFiEsp] Initializing ESP module [WiFiEsp] Initilization successful - 1.5.4 Attempting to connect to WPA SSID: SmartElements [WiFiEsp] Connected to SmartElements You're connected to the network SSID: SmartElements BSSID: 7C:B9:3C:CC:B8:94 Signal strength (RSSI): -89 IP Address: 192.168.1.18 MAC address: 19:FE:56:F1:29:EF