• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь ESP8266 ESP01 + Arduino Nano. Не могу согласовать передачу данных.

abr_esp2866

New member
Добрый день. Начал изучение esp-модуля с вот такой статьи: ESP8266 и Arduino, подключение, распиновка
Первым делом собрал вот такую схему:

только без диода.
Здесь всё отлично работает. Все AT команды проходят. Получилось открыть 23-й TCP порт и подключится телнетом. Скорость UART запомнил: 112500.
Дальше я хочу теперь, чтобы с модулем общалась сама ардуинка. И вот тут возникли проблемы. Для начала нашёл простенький скетч, который просто принимает команду через Serial на ардуину, а она в свою очередь должна команду кинуть на esp:
Код:
#include <SoftwareSerial.h> //Библиотека для обмена данными через UART
SoftwareSerial mySerial(6, 5); //RX - шестой порт, TX - пятый

void setup()
{
  Serial.begin(112500); //Скорость обмена данными комп <-> arduino

  mySerial.begin(112500); //Скорость обмена данными arduino <-> esp
  //mySerial.println("AT"); //После инициализации пробовал сразу отправить AT. Потом закомментил, чтобы не мешалась.
}

void loop()
{
  if (Serial.available()) { //Если ввёл данные с компа
    mySerial.println(Serial.readString()); //Отправляю их на esp
  }

  if (mySerial.available()) { //Если esp отдал какие-то данные
    Serial.println(mySerial.readString()); //Выводим их на компе
  }
}
И вот такой простенький скетч у меня и не работает. Монитор порта на компе выдаёт какие-то рандомные наборы символов. Я пробовал вслепую отправить команды для открытия порта telnet на модуле, как делал ето напрямую, но ничего не получилось. То есть, получается, сама ардуино уже неправильно передаёт данные на модуль. Соответственно, тот матерится и что-то отдаёт ардуинке, которая компу отдаёт уже непонятный набор символов.
Пробовал менять скорость обмена ардуино <-> модуль - так вобще ничего не отдаётся на комп. Что, в целом, логично: скорости-то подобраны. Ведь модуль работал на 112500, ну и соответственно, комп <-> arduino тоже работают и на той же скорости.
В общем, вопрос. Как их подружить?
 

abr_esp2866

New member
зачем там резисторы?
Я так понял, что-то типа "делителя уровня". Ограничивают ток из-за того, что ардуино пятивольтовая, а модуль 3.3В. На RX они есть потому что модуль не особо толерантен к пяти вольтам, а на TX нету потому что ардуино прекрасно понимает синал 3.3В
 

kalobyte

New member
ну да, только кто мешал запитать мегу от 3.3 стабилизатора?
да и у нее вроде там и так свой собственный есть
 

Юрий Ботов

Moderator
Команда форума
112500 - видимо плохо запомнил, нет такой стандартной скорости. есть 115200.
 

abr_esp2866

New member
ну да, только кто мешал запитать мегу от 3.3 стабилизатора?
да и у нее вроде там и так свой собственный есть
Так там же и стоит стаб на 3.3В AMS1117 (он есть на схеме) ибо ардуиновские 3.3 по мощности не потянут модуль. А почему саму ардуину не питал - потому что мне нужно соединение с компом, а USB даёт 5В. Куда ж я их дену?

112500 - видимо плохо запомнил, нет такой стандартной скорости. есть 115200.
Точно. Просто уже ночью писал, перепутал цифры )
 

kalobyte

New member
а что там по мощности не подойдет? я посмотрел эти мини, там снизу висит 430 мост и стабилизатор в сот223
у меня плата есп с таким стабилизатором и питается от усб
я сначала тоже тупил с ней и думал, что тока не хватает, а оказалось я мусор не подчисщал во флеше после других прошивок и новая прошивка считывала левый конфиг и сеть не поднималась

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

abr_esp2866

New member
а что там по мощности не подойдет? я посмотрел эти мини, там снизу висит 430 мост и стабилизатор в сот223
Ну все пишут, что нано не подойдёт потому что там максимальный ток 50 мА, что очень мало для модуля. Но я не поленился и подключил модуль на 3.3 ардуины - ситуация не поменялась.

так что выход стабилизатора пожно было подключить к выводу 3.3 ардуины
А вот тут немного не понял. Мне выход AMS-ки сконтачить с выходом 3.3 ардуины?

ат ак сопли из резисторов могут цеплять всякий мусор
Вы не подумайте, что я счас пытаюсь саботировать попытки решить проблему, наоборот я проверяю счас любой вариант, который мне предложат. Но, во-первых, "сопли из резисторов" отлично работают, если модуль сидит на RX и TX ардуинки (когда работа идёт напрямую с модулем); а во-вторых, я не понял связь наличия резисторов на RX с работой дополнительного стабилизатора, который просто питает модуль. Можете поподробнее объяснить?
 

kalobyte

New member
еще раз
я посмотрел фотки этих ардуин, там снизу стабилизатор в корпусе сот223, у меня плата с таким же стабилизатором
от 5в моя плата потребляет 700ма
так же у меня была платка со стабилизатором сот23, который сильно грелся и я даже не знаю, работал ли модуль
там тупые китаезы не сделали сигналов для сброса и прижимания гпио0, платка была под модуль есп01 и я ее хотел проагпрейдить, но что-то пошло не так

вобщем если стабилизатор большой сот223, то он дает достаточный ток и вообще не греется, что я был удивлен даже

на картинке у тебя стабилизатор на отдельной плате, в реале это так же одна отдельная плата?
на ардуине контакты юарта выведены на мост 430, у него там есть один вывод, который если посадить на 3.3, то на сигнальных контактах уровень будет тоже 3.3, хотя сам мост запитан от 5в

по идее этот специальный вход должен был идти на 3.3в от стабилизатора и сама атмега тоже запитана от стабилизатора и тогда там всегда будет 3.3в
замерь напряжение на тх у моста при цикличной передаче числа 255, там примерно должно быть 3в или лучше осциллографом

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

атмега запитана от 5 или от 3.3? на моих платах обычного размера там 5 мост и контроллер, на 3.3в там тоже есть стабилизатор, но он сот23-5, совсем мелкий и предназначен для питания контроллеров или как ион и он конечно не подойдет

а вот на твоей плате же стоит сот223 или нет? я только твою плату на фотках видел
в любом случае я тебе чисто из практики говорю, что сопли на линиях передачи ведут к ошибкам, как это было с программаторами авр на 5 проводков, когда сам порт дает 3.3 вместо 5 и еще от него идут шлейфом сигнальные провода без разделения земляным проводом и без экрана, а потом все скулят, что проишвка кривая, что верификация не проходит или биты неправильно установились и теперь контроллер вообще не отвечает

но раз причину глюков нашли, то на макетке можеш так и оставить
 

abr_esp2866

New member
Да, точняк. Догадка подтвердилась. Библиотека работает не так, как я думал про неё.
Сначала я решил проверить, что будет если написать пустой скетч и законнектить модуль на RX и TX ардуины. С пустым скетчем всё заработало без блокировки ардуины (соединения RESET и GND). Значит, ардуина не мешает, со схемой всё ок, в том числе и с резисторами.

Потом попробовал проинициализировать UART командой
Код:
Serial.begin(115200);
И вот тут оказалось, что инициализированный Serial мешает модулю. Значит, пока отложим его в сторону, руками с модулем общатся пока не будет и отдадим такую привелегию коду. Получился вот такой скетч:

Код:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(1, 0);

void setup()
{
  //  Serial.begin(115200); //Во-первых, убрал инициализацию Serial.

  mySerial.begin(115200);
  delay(6000);

  mySerial.print("AT+CIPMUX=1\r\n"); //Во-вторых, открытие порта telnet доверил коду.
  delay(6000);

  mySerial.println("AT+CIPSERVER=1,23\r\n");
}

void loop() {}
И он работает. Теперь осталось поменять подключение модуля к ардуинке с RX и TX ножек на, например, 5 и 6.
 

abr_esp2866

New member
Так, ну по порядку:

я посмотрел фотки этих ардуин, там снизу стабилизатор в корпусе сот223, у меня плата с таким же стабилизатором
от 5в моя плата потребляет 700ма
Я кажется понял, что вы видите. Вы видите AMS1117 на 5В. Он просто стабилизирует напругу с USB. А что даёт 3.3В я, честно говоря, даже не знаю. И в даташитах на Nano указывают, что 3.3В там дают только 50мА, но никак не 700. AMS1117 3.3 стоит только на Arduino UNO. Но и про него пишут, что он даёт 500мА.

на картинке у тебя стабилизатор на отдельной плате, в реале это так же одна отдельная плата?
Вот такая вот фиговинка у меня https://www.rekshop.ru/images/big/img20348_big.jpg

на ардуине контакты юарта выведены на мост 430, у него там есть один вывод, который если посадить на 3.3, то на сигнальных контактах уровень будет тоже 3.3, хотя сам мост запитан от 5в
если бы ты запитал есп от 3.3в, то не нужен был бы стабилизатор
атмега запитана от 5 или от 3.3?
На все три вопроса отвечаю: я подключаю ардуину к компу, и USB даёт 5В. Следовательно на RX у меня тоже 5В и я никуда их не дену, если не подключу какой-то делитель напряжения, что я собственно резисторами и сделал. Я понимаю, что мега умеет работать от 3-х вольт, но я никак не могу её так запитать и одновременно иметь соединение с компом.

или лучше осциллографом
Был бы у меня осциллограф, я б наверное в Сочи жил :(
 
Последнее редактирование:

abr_esp2866

New member
Тут оказалась щё одна "приятная" неожиданность с подключением. В заголовке библиотеки явно описано вот что:
Код:
SoftwareSerial(uint8_t receivePin, uint8_t transmitPin, bool inverse_logic = false);
Вроде как первым значением должен идти номер ножки RX. А вот фиг там. На модуле обозначения RX и TX намеренно переменены местами. Ето, видимо, сделано для того, чтобы подключать модуль к ардуине (или любому другому устройству) RX к RX, TX к TX. В общем получается, что при инициализации нужно было делать не
Код:
SoftwareSerial mySerial(6, 5);
А делать
Код:
SoftwareSerial mySerial(5, 6);
Ну или просто физически поменять местами провода.

Итак, подытожу:
Инициализация Serial в коде не даёт правильно работать библиотеке SoftwareSerial.
Обозначения RX и TX на модуле переменены местами.

Проблема решена. Всем, кто поучавствовал, спасибо! :)
 

=AK=

New member
Добрый день. Начал изучение esp-модуля с вот такой статьи: ESP8266 и Arduino, подключение, распиновка
Это плохая статья, вредная. Она задает ложное направление. Не надо связывать Ардуино и ESP8266. Надо выбросить Ардуино модуль вообще. ESP8266 сам может исполнять ардуиновские скетчи. "Скрипач не нужен"(с). Читайте GitHub - esp8266/Arduino: ESP8266 core for Arduino

А модуль советую купить NodeMCU. У него все есть на борту. Будете писать Ардуино скетчи для ESP8266 и по USB грузить прям в этот модуль, никакой мороки с распиновками, питанием, и пр.
 

KupVadim

New member
Что касается картинки, то меня напрягает лишь одно, почему делитель напряжения на RX? Я правильно понял, что вы шлете с ардунки инфу в ESP? И вроде как ардуинка будет это делать через TX пин. Следовательно на TX надо делитель напряжения, т.к. с ардуинки идет 5В. Или я что то не понимаю?
 

abr_esp2866

New member
Что касается картинки, то меня напрягает лишь одно, почему делитель напряжения на RX? Я правильно понял, что вы шлете с ардунки инфу в ESP? И вроде как ардуинка будет это делать через TX пин. Следовательно на TX надо делитель напряжения, т.к. с ардуинки идет 5В. Или я что то не понимаю?
Я счас попробовал закодить голый ATMega328P на передачу сообщения и подключил к ардуине. Первый раз ничего не запахало. Заработало только тогда, когда я подключил atmega RX к ардуино RX, соответственно и TX-ы тоже. Получается, что наоборот, на ардуине они местами переменены. Потому на схеме делитель и стоит на RX, а не на TX.
 
Сверху Снизу