Оглавление:

Прошивка ESP-01 (ESP8266) без переходника USB-последовательный порт с использованием Raspberry Pi: 3 шага
Прошивка ESP-01 (ESP8266) без переходника USB-последовательный порт с использованием Raspberry Pi: 3 шага

Видео: Прошивка ESP-01 (ESP8266) без переходника USB-последовательный порт с использованием Raspberry Pi: 3 шага

Видео: Прошивка ESP-01 (ESP8266) без переходника USB-последовательный порт с использованием Raspberry Pi: 3 шага
Видео: ESP8266 vs Raspberry PI Zero. Я открываю DIY рубрику. Или почему ESP8266 круче. 2024, Ноябрь
Anonim
Прошивка ESP-01 (ESP8266) без переходника USB-последовательный порт с использованием Raspberry Pi
Прошивка ESP-01 (ESP8266) без переходника USB-последовательный порт с использованием Raspberry Pi

Из этого руководства вы узнаете, как начать программировать микроконтроллер ESP8266 на модуле ESP-01 WIFI. Все, что вам нужно для начала (кроме модуля ESP-01, конечно), это

  • Raspberry Pi
  • Провода перемычки
  • Резистор 10 кОм

Я хотел переоборудовать старую прикроватную лампу в современную светодиодную ночную лампу, управляемую Alexa. Ничего особенного, просто включить / выключить его с помощью голосовой команды. Я заказал в Интернете простейший модуль WIFI, реле и провод со светодиодами ESP-01 и совершенно забыл заказать переходник USB-to-serial для программирования микроконтроллера ESP8266. Но поскольку у меня был Raspberry Pi, а на плате Raspberry Pi и ESP-01 были контакты UART, я решил, что могу использовать свой RPi для программирования ESP8266 без адаптера.

Шаг 1. Настройте Rapberry Pi

Настроить Rapberry Pi
Настроить Rapberry Pi

Я использовал Raspberry Pi 3 Model B +, однако инструкции должны работать с другими версиями, особенно с моделью B.

Итак, обо всем по порядку - нам нужно включить UART на Pi.

Перейти в настройки конфигурации RPi. В окне терминала запустите

$ sudo raspi-config

Перейдите к 5 параметрам интерфейса, затем выберите P6 Serial. Затем вы спросили, хотите ли вы, чтобы оболочка входа была доступна через последовательный порт? выберите, так как мы не хотим использовать UART для запуска Pi без головы, но для связи с другими устройствами, поэтому на следующем экране, когда его спрашивают, хотите ли вы, чтобы оборудование последовательного порта было включено? Выбрать. Перезагрузите Pi, как будет предложено. UART теперь должен быть включен для последовательной связи на выводах RX и TX Raspberry Pi 3. Примечание: после этого должна появиться новая запись enable_uart = 1 в конце /boot/config.txt.

Шаг 2: подключите ESP-01 к Raspberry Pi

Подключите ESP-01 к Raspberry Pi
Подключите ESP-01 к Raspberry Pi

Теперь приступим к тому, чтобы соединить все вместе.

Во-первых, определите на своем RPi 3,3 В питания и контакты GND (земля) для питания микроконтроллера ESP8266, контакты TXD (передача) и RXD (прием) для связи, а также два контакта общего назначения для работы ESP8266 (контакты, которые могут быть установлены как на высокий, так и на высокий уровень). низкий). Найдите расположение контактов на pinout.xyz или введите терминал:

распиновка $

Во-вторых, определите необходимые штифты на ESP-01. Но для начала нам нужно иметь представление о выводах ESP-01. Я нашел в Интернете ряд полезных ресурсов, которые помогут вам в этом отношении. Этот самый короткий, а этот дает гораздо лучшее объяснение. Вкратце: здесь 8 контактов, нам понадобятся 7 из них, а именно контакты VCC power и GND (земля) для питания, контакты TXD и RXD для связи и RST (сброс), CH_PD (Chip Power Down, иногда обозначаются CH_EN или включение микросхемы) и GPIO0 для работы модуля. Обычно ESP8266 работает в обычном режиме, но при загрузке кода в ESP8266 необходимо, чтобы он был во флэш-режиме. Для нормального или нормального режима работы модуль должен быть подключен к источнику питания (очевидно), но также контакт CH_PD должен быть подключен к VCC через 10K (это значение варьируется в зависимости от ресурсов, я нашел значения до 3K). резистор при загрузке. с другой стороны, чтобы войти в режим прошивки или программирования, вам необходимо заземлить контакт GPIO0 при загрузке. Чтобы предотвратить неограниченное протекание тока через GPIO0 при заземлении, рекомендуется подключить GPIO0 к земле через какой-нибудь резистор с низким сопротивлением 300–470 Ом (подробнее об этом здесь). Вывод RST, как следует из названия, сбрасывает (или перезапускает) MCU. Во время нормальной работы он может быть подключен к VCC через подтягивающий резистор 10 кОм, но должен быть заземлен для сброса микроконтроллера. Хотя всегда можно использовать физические кнопки для заземления контактов RST и GPIO0 (или даже вручную соединить провода для имитации кнопки), гораздо приятнее использовать контакты Raspberry Pi для установки высокого и низкого напряжения на RST и GPIO0 модуля. булавки. Также нет необходимости в резисторах на 10 кОм и 470 Ом.

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

ESP-01 Raspberry Pi

  • VCC (3,3 В) контакт # 1 (3,3 В)
  • GND контакт # 6 (GND)
  • Контакт TXD # 10 (RXD / BCM 15)
  • RXD контакт # 8 (TXD / BCM 14)
  • CH_PD контакт # 1 (3,3 В)
  • Контакт № 3 RST (BCM 2)
  • GPIO 0 контакт # 5 (BMC 5)

Подключите вывод VCC последним. Экземпляр, который вы подключили к VCC, включит ваш модуль Wi-Fi. Используйте screen или minicom, чтобы проверить, могут ли RPi и ESP8266 обмениваться данными с помощью UART (примечание: вам может потребоваться сначала установить screen или minicom, поскольку они, похоже, не установлены на Raspbian по умолчанию).

Используя экранный запуск:

$ sudo экран / dev / serial0 115200

Используя minicom run:

$ sudo minicom -b 115200 -o -D / dev / serial0

Примечание: многие онлайн-ресурсы предлагают подключиться к ESP8266 на / dev / ttyAMA0, но это не работает с RPi 3 или новее (включая нулевое W) в соответствии с документацией RPi. Подключайтесь через / dev / serial0 вместо этого или / dev / ttyS0.

После того, как вы вошли в screen или minicom, используйте AT-команды для связи с ESP8266. Введите AT, затем нажмите Enter, а затем нажмите Ctrl + J, чтобы отправить команду. Вы должны получить в ответ ОК. Список доступных AT-команд можно найти на espressiff.com или здесь.

После того, как устройства физически подключены и разговаривают друг с другом, мы можем приступить к программированию контактов RPi GPIO и, наконец, самого ESP8266.

Шаг 3. Настройка программного обеспечения (Python для работы и Arduino IDE для программирования)

ЧАСТЬ 1. Использование python для переключения режимов ESP8266

Как упоминалось выше, для переключения режимов работы ESP8266 удобно использовать контакты GPIO RPI. Я написал два основных кода Python, которые переводят ESP8266 в обычный режим или режим программирования.

Обычный режим: чтобы перевести микроконтроллер в обычный режим работы, нам просто нужно включить его и подключить CH_PD через подтягивающий резистор к VCC, но чтобы переключить MCU из режима программирования в нормальный режим, нам нужно его сбросить (подумайте о перезагрузке). Чтобы сделать это на RPi, мы собираемся ненадолго отключить GPIO RPi, подключенного к выводу RST на ESP-01 (по умолчанию вывод RPi, который я использовал для сброса, установлен на HIGH). Как кратко? Для меня это спекулятивный вопрос. Вы можете попробовать разные временные интервалы, но я обнаружил, что 200-500 мс работают нормально. Напишите в комментариях, если у вас есть идея получше. Сохраните свой код как reset.py

#! / usr / bin / python

import RPi. GPIO as GPIO import time GPIO.setmode (GPIO. BOARD) # устанавливает идентификацию GPIO по физическим номерам контактов resetPin = 3 # идентифицирует физический контакт RPi, подключенный к ESP8266 RST pin GPIO.setup (resetPin, GPIO. OUT) # set reset вывод как выход GPIO.output (resetPin, GPIO. LOW) # падение напряжения на выводе RST time.sleep (.2) # ожидание 0,2 с GPIO.output (resetPin, GPIO. HIGH) # восстановление напряжения на выводе RST GPIO. cleanup () # сбрасываем контакты на RPI, чтобы предотвратить будущие предупреждения во время выполнения

  • Режим программирования: чтобы перевести MCU в режим программирования, нам нужно запитать ESP8266 с заземленным GPIO0 или, в качестве альтернативы, сбросить его и заземлить GPIO0 во время загрузки (опять же, точная продолжительность падений напряжения мне не совсем известна, поэтому не будьте строго руководствуясь используемыми ценностями). Сохраните код как flash.py или загрузите ниже. Последовательность действий следующая:

    • потяните вниз штифт RST
    • потяните вниз контакт GPIO0
    • подтянуть штифт RST
    • потяните вверх контакт GPIO0

#! / usr / bin / python

import RPi. GPIO as GPIO import time GPIO.setmode (GPIO. BOARD) # устанавливает идентификацию GPIO по физическим номерам контактов resetPin = 3 # идентифицирует физический контакт RPi, подключенный к ESP8266 RST pin flashPin = 5 # идентифицирует физический контакт RPi, подключенный к ESP8266 GPIO0 pin GPIO.setup (resetPin, GPIO. OUT) # установить контакт сброса в качестве выхода GPIO.setup (flashPin, GPIO. OUT) # установить контакт вспышки в качестве выхода GPIO.output (resetPin, GPIO. LOW) # время падения напряжения на контакте RST. sleep (.2) # необходимость в этом ожидании - предположительный GPIO.output (flashPin, GPIO. LOW) # падение напряжения на GPIO0 time.sleep (.2) # необходимость в этом ожидании - предположительный GPIO.output (resetPin, GPIO. HIGH) # начать загрузку ESP8266 time.sleep (.5) # подождать, пока ESP8266 загрузит GPIO.ouput (flashPin. GPIO. HIGH) # восстановить напряжение на GPIO pinGPIO.cleanup () # сбросить контакты на RPI, чтобы предотвратить будущие предупреждения во время выполнения

В разрешениях на изменение терминала:

$ sudo chmod + x flash.py

$ sudo chmod + x reset.py

Отныне всякий раз, когда вам нужно войти в режим программирования, запускайте в терминале:

$ python /flash.py

после загрузки кода для входа в нормальный режим работы запустите:

$ python /reset.py

На этом этапе вы также можете обновить прошивку ESP8266. Есть много онлайн-руководств о том, как это сделать, поэтому я не буду вдаваться в подробности того, как это сделать.

ЧАСТЬ 2. Настройка Arduino IDE

Если у вас уже установлена Arduino IDE, вы все равно можете просмотреть раздел, чтобы убедиться, что ваша IDE готова для ESP8266.

На Rapberry Pi вы можете использовать Arduino IDE для программирования ESP8266. Установить IDE на RPi можно двумя способами:

  • через командную строку из репозиториев с помощью apt-get install
  • загрузите и установите вручную с arduino.cc.

Я настоятельно рекомендую пойти по второму пути. Версия IDE из репозиториев кажется устаревшей, и вам наверняка придется сделать больше, прежде чем вы будете готовы начать программировать ESP8266. Чтобы избежать хлопот, перейдите на страницу загрузки Arduino.cc и загрузите версию Linux для ARM. Затем распакуйте и установите: Если имя загруженного файла выглядит примерно так: arduino-X. Y. Z-linuxarm.tar.xz, в папке загрузки запустите:

$ tar -xvf arduino-X. Y. Z-linuxarm.tar.xz

Это должно распаковать файл в папку arduino-X. Y. Z. Запустить:

$ sudo./arduino-X. Y. Z/install.sh

Это должно установить IDE. После завершения установки запустите IDE.

  • В среде Arduino IDE выберите «Файл»> «Настройки». Найдите «Дополнительные URL-адреса Board Manager» внизу окна настроек. Введите https://arduino.esp8266.com/stable/package_esp8266com_index.json в поле «Дополнительные URL-адреса Board Manager», нажмите кнопку «ОК».
  • Перейдите в Инструменты> Доска: XXX> Менеджер плат. В окне воспользуйтесь поиском или прокрутите вниз, выберите меню платы ESP8266 и нажмите «Установить». Дождитесь завершения установки и закройте окно.
  • Снова перейдите в Инструменты> Плата: XXX и найдите платы ESP8266. Выберите Generic ESP8266 Module.

Теперь IDE готова к программированию ESP8266. Введите или вставьте желаемый код в окно IDE и сохраните его. Щелкните Загрузить. Из терминала запустите flash.py, это должно перевести вашу плату в режим программирования. Подождите несколько минут, пока среда IDE завершит компиляцию и загрузку (примечание: ESP-01 обычно поставляется с 2 светодиодами, синий светодиод будет мигать во время загрузки кода) и запустите reset.py. Теперь ваша доска ESP-01 готова к работе.

Рекомендуемые: