(Решено) ESP8266-01 и Logic Level Converter

Тема в разделе "Arduino & Shields", создана пользователем obuhanoe, 12 май 2016.

  1. DIYMan

    DIYMan Guest

    SoftwareSerial не работает на больших скоростях. Выход - использовать аппаратный UART или перешивать ESP на низкую скорость командой AT+CIOBAUD (по памяти пишу, могу ошибаться).
     
  2. obuhanoe

    obuhanoe Гик

    если не затруднит пояснить этот момент.
    сейчас почитаю о перепрошивке скорости.

    И подскажите схему правильно составил?

    Спасибо

    Изменил командой AT+CIOBAUD=9600, теперь TTL UART работает на 9600, АТ команды работают, но изменил в скетче на 9600 и через Арудиуно не работают АТ-команды.
     
    Последнее редактирование: 29 июн 2016
  3. DIYMan

    DIYMan Guest

    Код скетча давайте. Подключение не смотрел, щас гляну.

    З.Ы. Посмотрел "схему" - ничего не понял, глаз сломаешь. Нарисуйте в какой-нибудь программе, в том же sPlan, плз.
     
  4. obuhanoe

    obuhanoe Гик

    Код (C++):
    #include <SoftwareSerial.h>
    // ESP8266 -- Arduino
    // ESP TX - 10 (Arduino SoftwareSerial RX)
    // ESP RX - 11 (Arduino SoftwareSerial TX)
    SoftwareSerial espSerial(16, 17);
    // для SoftSerial скорость порта в 115200 является большой и не гарантирует стабильную работу
    const int COM_BAUD = 9600;
    void setup() {
      espSerial.begin(COM_BAUD);
      Serial.begin(COM_BAUD);
      Serial.println("Setup done");
    }
    void loop() {
      if ( espSerial.available() )
        Serial.write( espSerial.read() );
      if ( Serial.available() )
        espSerial.write( Serial.read() );
    }
    Схему чуть позже выложу.
    Вот схема (первый раз использовал sPlan)/
     

    Вложения:

    Последнее редактирование: 30 июн 2016
  5. DIYMan

    DIYMan Guest

    У вас, судя по схеме - Мега, там есть 4 аппаратных UART, смысла использовать SoftwareSerial - нет. На пинах 16 и 17 как раз располагается Serial2 - это и есть аппаратный UART, юзайте его.

    Далее: на некоторых китайских мегах метки на пинах 16 и 17 тупо перепутаны местами, проверяйте.

    Ещё: убедитесь, что в мониторе порта (или в терминалке, которую вы юзаете для проверки) выставлен "NL & CR" при посыле строки в порт - надо, чтобы добавлялись символы "\r\n" после каждой AT-команды.

    На закуску: на этой схеме есть, как у меня подключен ESP, сверяйтесь: https://github.com/Porokhnya/GreenhouseProject/blob/master/plan.png
     
  6. obuhanoe

    obuhanoe Гик

    а что тогда необходимо прописать в скетче?
    менял местами, в одном случае диод на ESP8266 мигает (ярко прям) когда вводишь команду, в другом не мигает.
    В мониторе порта Arduino IDE выставлен "NL & CR"
    Проверил, вроде соответствует Вашей схеме.
     
  7. DIYMan

    DIYMan Guest

    Просто юзать Serial2. У Меги есть, помимо Serial - Serial1, Serial2, Serial3.
     
  8. obuhanoe

    obuhanoe Гик

    вот таким образом?
    Код (C++):
    const int COM_BAUD = 9600;
    void setup() {
      Serial2.begin(COM_BAUD);
      Serial.begin(COM_BAUD);
      Serial.println("Setup done");
    }
    void loop() {
      if ( Serial2.available() )
        Serial.write( Serial2.read() );
      if ( Serial.available() )
        Serial2.write( Serial.read() );
    }
     
  9. DIYMan

    DIYMan Guest

  10. obuhanoe

    obuhanoe Гик

    Вечером попробую и отпишусь.
    Спасибо за помощь.
     
    Последнее редактирование: 30 июн 2016
  11. obuhanoe

    obuhanoe Гик

    Запустил скетч на Serial2(16,17) Serial1 пробывал тоже - получил бесконечный набор букв -
    Код (Text):
    Setup done
    ю д ц Т ш

    и т.д.
    меняю местами пины, ничего не выводится но и команды АТ не выполняются.
     
  12. DIYMan

    DIYMan Guest

    А теперь подумайте, почему бесконечный набор букв. Внимательно посмотрите на скетч и попытайтесь понять, почему именно так. Что происходит с Serial, когда он получает данные? Куда он их тыркает? Что происходит с Serial2, когда на него приходят данные? Куда он их тыркает?

    Они у вас гавкаются друг с другом бесконечно.
     
  13. obuhanoe

    obuhanoe Гик

    переделал во так
    Код (C++):
    void loop() {
      while ( Serial2.available() )
        Serial.write( Serial2.read() );
       
      while ( Serial.available() )
        Serial2.write( Serial.read() );
    }
    но на каждую АТ команду приходят непонятные символы типа -
    Код (Text):
    Setup done
    @`а@`FHЊ@рAt
     
    Как считаете из-за чего это?
     
  14. DIYMan

    DIYMan Guest

    Блин, ну начните с простого - зачем вам два сериала друг с другом-то женить, не пойму? Напишите вы в скетче посылку команды в сериал ESP, потом попытайтесь получить от него ответ, и выводите его в монитор порта. А то вы сразу - с места в карьер.

    Мусор может быть из-за несовпадения скорости UART ардуины со скоростью UART ESP.
     
  15. obuhanoe

    obuhanoe Гик

    сделал так, но диод на ESP не мигает каждые 5 сек, при выполнении команды.
    Код (C++):
    void loop() {
      Serial.println("+++++++++++++++++");
      Serial2.write("AT");
      delay(500);
      Serial.println(Serial2.read());
     
      delay(5000);

    }
    Выводится каждый раз значение 0.

    Не думал что так тяжелой пойдет изучение данного модуля.
     
  16. DIYMan

    DIYMan Guest

    Код (C++):
    Serial2.write("AT");
    Негодно! Годно:
    Код (C++):
    Serial2.println("AT");
    Я в воздух говорил про необходимость заканчивать каждую AT-команду переводом строки, да?
     
  17. obuhanoe

    obuhanoe Гик

    честно забыл:(
    исправил скетч
    Код (C++):
    void loop() {
      Serial.println("+++++++++++++++++");
      Serial2.println("AT\r\n");
      delay(500);
      Serial.println(Serial2.read());
     
      delay(5000);
     
    }
    теперь каждое выполнение АТ команды получаю разные цифры
    Код (Text):
    Setup done
    +++++++++++++++++
    0
    +++++++++++++++++
    64
     
    неверно вывод организовал?
     
  18. DIYMan

    DIYMan Guest

    Блин, я вам указал команду:
    Код (C++):
    Serial.println("AT");
    ЗАЧЕМ вы ещё \r\n туда добавили? Что, по вашему, делает println? Вы документацию на функции читаете?
     
  19. obuhanoe

    obuhanoe Гик

    понял Вас буквально -
    Код (C++):
    void loop() {
      Serial.println("+++++++++++++++++");
      Serial2.println("AT");
      delay(500);
      Serial.println(Serial2.read());
     
      delay(5000);
     
    }
    и все равно выводит разные цифры, может быть это из-за питания? у меня не 3,3 получается, а 3,1В
     
  20. DIYMan

    DIYMan Guest

    Мало. Крутите регулятор на DC/DC-конвертере или что вы там используете - дайте ей 3,5В, и по току смотрите, чтобы питания хватало. От чего вы вообще питаете ESP?