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. У меня есть четыре таких модуля, и все они ведут себя одинаково. Если я не смогу найти решение здесь, мне придется вернуть их сатане.
@eric, 👍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 нет современных ресурсов для этого, поэтому я попробовал пару своих.
- Сначала я попробовал Arduino-cli — пакет, который можно загрузить с GitHub для компиляции и загрузки. Я следил за учебным пособием, представленным в видео на странице, опубликованной ниже, но Arduino-cli требует, чтобы вы указали FQBN устройства, на которое вы загружаете. Я не смог найти это для ESP, и мой Raspberry Pi не распознал его самостоятельно, так что в конечном итоге это был для меня тупик.
https://www.hackster.io/jithinsanal1610/arduino-cli-c26e6e
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 (хотя может быть так, что я как-то сбросил это. Я действительно недостаточно знаю о плате, чтобы скажем).
Заключение
Есть много плохих ресурсов для этой платы. Честно говоря, я бы купил другой, если бы знал. Но это насмехалось надо мной, а я в игры не играю. Удачи всем, кто попытается работать с этой платой! Я собираюсь опубликовать новый вопрос для моей текущей проблемы, но сейчас я бы сказал, что этот вопрос заслуживает того, чтобы его пометили как решенный.
- Как читать и записывать EEPROM в ESP8266
- Как сделать выводы Tx и Rx на ESP-8266-01 в выводах GPIO?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Как заставить 5-вольтовое реле работать с NodeMCU
- Как исправить: Invalid conversion from 'const char*' to 'char*' [-fpermissive]
- ESP8266 не подключается к Wi-Fi
- AT-команда не отвечает на последовательный монитор
- Разница между этими двумя платами NodeMCU?
Судя по вашим подключениям, я предполагаю, что вы пытаетесь использовать чип 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