ESP-01 Программирование

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

https://forum.arduino.cc/index.php?topic=673618.new

Что я пытаюсь сделать

Я хочу подключить Arduino Nano к Интернету с помощью ESP8266 ESP-01. Ссылки на ссылки на платы ниже:

Ардуино Нано:https://128217-368301-raikfcquaxqncofqfm.stackpathdns.com/wp-content/uploads/2017/06/NSE-1004-2_7.jpg

ESP01: https://components101.com/sites/default/files/component_pin/ESP8266-Pinout.png

Мой Arduino является клоном. Вот точная модель: https://www.amazon.com/Longruner-ATmega328P-Controller-Module-Arduino

В моей сети работает сервер, который принимает два типа запросов от этих плат Arduino. Одна пара Arduino/ESP будет отправлять данные с датчиков на сервер, другая пара будет получать эти данные с сервера. Это специализированные процессы. Отправитель никогда не получит, а получатель никогда не отправит.

Контур

В игре участвуют три устройства: Arduino Nano (AN), ESP и внешний блок питания (EXPWS)

ESP: VCC -> 3,3 В EXPWS

Земля -> Земля EXPWS

CH_PD -> 3,3 В EXPWS

RX -> RX AN*

TX -> TX AN*

GPIO0 -> 3,3 В EXPWS*

СБРОС -> 3,3 В EXPWS*

Ардуино

Земля -> Земля EXPWS

GND -> Сбросить AN*

  • Я тестировал их в различных конфигурациях. GPIO0 на землю, сброс ESP в ноль, инвертирование RX и TX в зависимости от того, что я делаю, и т. д. GND для сброса на Arduino — это когда я пытаюсь загрузить в ESP, используя Arduino в качестве преобразователя USB TTL. Подробнее об этом позже.

Где я

Мне удалось связаться с ESP с помощью Arduino IDE с помощью AT-команд в последовательном мониторе. Я подключил ESP к своей сети Wi-Fi, могу пропинговать его с моего Mac и установил скорость передачи данных по умолчанию на 9600.

Чего я не могу делать

Я не могу получить доступ к AT-командам, когда этот скетч загружен в Arduino:

void setup() {
  Serial.begin(9600);

}

void loop() {
  // put your main code here, to run repeatedly:

}

Но я могу получить доступ к AT-командам с помощью следующих двух:

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

и

void setup() {
  int i = 0;

}

void loop() {
  // put your main code here, to run repeatedly:

}

Это говорит мне о том, что попытка использовать последовательные команды вызывает проблему. Я подумал о том, чтобы попытаться запустить ESP, отправив AT-команды через последовательную связь, но, согласно моему описанию выше, я не получил ответов от ESP.

Я также не могу использовать библиотеки, предназначенные для ESP, а именно WiFiEsp. Я получаю сообщение об ошибке:

[WiFiEsp] Initializing ESP module
[WiFiEsp] >>> TIMEOUT >>>
[WiFiEsp] >>> TIMEOUT >>>
[WiFiEsp] >>> TIMEOUT >>>
[WiFiEsp] >>> TIMEOUT >>>
[WiFiEsp] >>> TIMEOUT >>>
[WiFiEsp] Cannot initialize ESP module
[WiFiEsp] >>> TIMEOUT >>>
[WiFiEsp] No tag found
WiFi shield not present

Когда я запускаю любые скетчи-примеры, предоставленные библиотекой (даже когда я изменяю такие параметры, как скорость передачи данных и добавляю операторы задержки в код библиотеки). Вот ссылка на эту библиотеку, там вы можете найти примеры: https://github .com/bportaluri/WiFiEsp/blob/master/examples/WebClientRepeating/WebClientRepeating.ino

Я также не могу загружать скетчи напрямую в ESP, используя Arduino в качестве преобразователя USB TTL. Я пробовал заземлять контакт сброса Arduino во время загрузки, заземлять его во время компиляции, затем отключать это соединение, когда он начинает загрузку, и ничего не делать с контактом сброса Arduino. Я пробовал разные комбинации с контактом GPIO0 (земля, vcc, ничего), а также с другими контактами.

Заключение

Я действительно открыт для некоторых предложений здесь. Корень проблемы, по-видимому, заключается в последовательной связи — это общая нить между базовыми скетчами на Arduino и загрузкой в сам ESP. У меня есть четыре таких модуля, и все они ведут себя одинаково. Если я не смогу найти решение здесь, мне придется вернуть их сатане.

, 👍1

Обсуждение

Судя по вашим подключениям, я предполагаю, что вы пытаетесь использовать чип USB to Serial на Nano для связи с ESP напрямую через последовательный монитор. Тогда неудивительно, что вы не можете общаться таким образом, когда вы инициализируете Serial на Nano. Имейте в виду, что у вас есть 3 устройства, подключенные к одному и тому же интерфейсу UART. Это не хорошо. Вы можете попробовать использовать интерфейс SoftwareSerial для ESP и перенаправить данные из Serial в SoftwareSerial. Затем вы все равно можете использовать Serial для отладочных сообщений., @chrisl

Вы пробовали использовать библиотеку WiFiESP, имея при этом Arduino RX для ESP RX и Arduino TX для ESP TX?, @chrisl

Сделайте себе одолжение и приобретите USB TTL преобразователь за 2$, прошейте esp01 программным обеспечением Arduino вместо того, чтобы тратить время на костыльные решения, основанные на прошивке espressif AT (возможно, устаревшей и глючной). Разработка для этого остановлена в конце 2018 года, Arduino все еще активен - текущий 2.6.3. esp01 сравнивается с nano superioir (процессор, флэш-память, подключение), поэтому в большинстве случаев вы можете отказаться от nano, @Codebreaker007

проголосуйте за потраченное время на ваш вопрос, @jsotola

Во-первых, когда вы используете Serial для Serial Monitor, вам понадобится еще один порт для связи с ESP-01, в случае с Nano, так как он имеет только один Serial порт, поэтому вам понадобится SoftwareSerial. Во-вторых, я прошел через то, что вы (и многие другие) испытали раньше, и попробовал WiFiESP, у меня это не работает, и разработчик, кажется, давно прекратил поддержку библиотеки. Я использую библиотеку, которую я разветвил, исправил небольшую ошибку и изменил ее, которую вы можете найти в моем [github] (https://github.com/e-tinkers/LiteESP8266Client). Он очень стабилен и использует только 11-байтную SRAM., @hcheung


1 ответ


1

Вау, это было сложно понять. Я могу загрузить код в esp, хотя он еще не запускается.

Спасибо всем, кто прокомментировал, предложения не решили проблему, но они указали мне правильное направление. Вместо того, чтобы использовать Arduino для взаимодействия с ESP01, я переключился на Raspberry Pi, чтобы подключить его напрямую к контактам компьютера, выполняющего перепрошивку. Кроме того, это все еще сложный процесс, который я пройду здесь:

Проводка

Формат: ESP -> Raspberry Pi

VCC -> 3,3 В (я использовал макетную плату, чтобы разрешить несколько подключений)

CH_EN -> 3,3 В

Земля -> Земля

GPIO0 -> Земля

TX -> RXD (GPIO 15)

RX -> TXD (GPIO 14)

GPIO0 необходимо подключить к GND прежде чем подключить VCC к 3,3 В. Это делается для того, чтобы чип загружался в режиме программирования.

Загрузка

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

У моего Raspberry Pi нет головы, поэтому мне нужно было взаимодействовать с ESP через командную строку. У Arduino нет современных ресурсов для этого, поэтому я попробовал пару своих.

  1. Сначала я попробовал Arduino-cli — пакет, который можно загрузить с GitHub для компиляции и загрузки. Я следил за учебным пособием, представленным в видео на странице, опубликованной ниже, но Arduino-cli требует, чтобы вы указали FQBN устройства, на которое вы загружаете. Я не смог найти это для ESP, и мой Raspberry Pi не распознал его самостоятельно, так что в конечном итоге это был для меня тупик.

https://www.hackster.io/jithinsanal1610/arduino-cli-c26e6e

  1. esptool.py требует Python и может быть установлен с помощью pip. Я создал виртуальную среду для пакета, чтобы отделить его от остальной части моей системы. У инструмента были проблемы с компиляцией скетчей, поэтому я использовал Arduino Ide на своем Mac, экспортировал скомпилированный двоичный файл, а затем перенес его на Raspberry Pi через диск smb. Используя приведенную ниже команду, я смог прошить скомпилированный файл на свой ESP01.

    esptool.py --port /dev/ttyS0 write_flash 0x1000 SketchFolder/Sketch.ino.generic.bin

Теперь самое важное. Перезапускайте ESP01 после каждой попытки прошивки. Отключите его от VCC, снова подключите и загрузите. Если вы успешно загрузили, а затем снова запустите ту же команду, она не загрузится! Я подозреваю, что это может быть та же проблема, с которой я столкнулся, когда изначально использовал Arduino Ide. Я не проверял это, но получил похожее сообщение, когда загрузка не удалась на Arduino и esptool.py:

Connecting: ----....----....----
Failed to connect

и

Invalid head of packet

Это не копирование/вставка сообщений об ошибках, но их должно быть достаточно для любого, кто ищет ошибку в Google.

Также стоит отметить, что ранее я использовал AT-команду, чтобы изменить скорость передачи данных по умолчанию на 9600. Я указал в команде esptool.py -b 9600. Это не позволило мне выполнить загрузку. Оставьте команду в покое - по умолчанию 115200, но вам не нужно указывать ее, даже если вы изменили скорость передачи ESP (хотя может быть так, что я как-то сбросил это. Я действительно недостаточно знаю о плате, чтобы скажем).

Заключение

Есть много плохих ресурсов для этой платы. Честно говоря, я бы купил другой, если бы знал. Но это насмехалось надо мной, а я в игры не играю. Удачи всем, кто попытается работать с этой платой! Я собираюсь опубликовать новый вопрос для моей текущей проблемы, но сейчас я бы сказал, что этот вопрос заслуживает того, чтобы его пометили как решенный.

,