Arduino Nano + ESP8266

Тема в разделе "ESP8266, ESP32", создана пользователем sdff, 11 янв 2019.

  1. sdff

    sdff Нуб

    Задался целью добавить возможность своей Arduino Nano отправлять данные на удалённый сервак.
    Для этого подсоединил ESP8266. Схему и прочие подробности не буду описывать - подключить получилось, отправить данные методом GET тоже. Но есть нерешённые проблемы:

    1) Несмотря на то, что данные отправляются корректно, через монитор порта наблюдаю много "мусора", типа такого:
    При этом AT-команды отправляются и выполняются. При перезагрузке выдаёт что-то типа:
    Т.е. информация приходит с ESP8266, но с добавлением лишних символов.
    Пересмотрел очень много информации по подключению, и подобные "иероглифы" есть у большинства.
    С чем может быть связано наличие этих странных символов? Или это нормально вообще?

    2) Очень неудобно работать с AT-командами. Может быть, есть какая-то библиотека, которая позволяет работать с Arduino Nano + ESP8266 через RX и TX?
    К сожалению, ничего подобного именно для Nano не нашёл.

    P.S. В Arduino новичок, на форуме тоже - сильно не ругайте, если что не так))

    Скетч прикрепляю на всякий случай.

    Код (C++):
    #include <SoftwareSerial.h>
    #define RX 10
    #define TX 11
    String AP = "###";
    String PASS = "###";

    int countTimeCommand;

    unsigned long lastTimeMillis = 0;

    boolean found = false;
    SoftwareSerial ESP8266(RX,TX);


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

      ESP8266.println("AT+RST"); // Перезагрузка esp8266

      sendCommand("AT+CWMODE=1",5,"OK");
      sendCommand("AT+CWJAP=\""+ AP +"\",\""+ PASS +"\"",20,"OK");

      makeGetRequest("###.ru","/?a=1");

    }

    void loop() {
      if (ESP8266.available()) {
        Serial.write(ESP8266.read());
      }
      if (Serial.available()) {
        ESP8266.write(Serial.read());
      }
    }

    void makeGetRequest(String host, String url){
        ESP8266.println("AT+CIPMUX=1");
        delay(1000);

        ESP8266.println("AT+CIPSTART=4,\"TCP\",\""+host+"\",80");
        delay(1000);

        String cmd = "GET " + url + " HTTP/1.1\r\nHost:" + host + "\r\nConnection: close";
        ESP8266.println("AT+CIPSEND=4," + String(cmd.length() + 4));
        delay(1000);

        ESP8266.println(cmd);
        delay(1000);
        ESP8266.println("");


    }

    void sendCommand(String command, int maxTime, char readReplay[]) {
      Serial.print("at command => ");
      Serial.print(command);
      Serial.print(" ");
      while(countTimeCommand < (maxTime*1))
      {
        ESP8266.println(command);//at+cipsend
        if(ESP8266.find(readReplay))//ok
        {
          found = true;
          break;
        }
      }

      if(found == true)
      {
        Serial.println("Ok");
        countTimeCommand = 0;
      }

      if(found == false)
      {
        Serial.println("Fail");
        countTimeCommand = 0;
      }

      found = false;
    }
     
  2. Airbus

    Airbus Радиохулиган Модератор

    Открою Вам страшную тайну!esp-8266 прекрасно работает и без ардуино.Более того работает лучше и без косяков!И ещё один секрет-программируется в среде Ардуино IDE.И прекрасно понимает скетчи.Если Вы немного почитаете этот раздел и посмотрите примеры то сможете подправить Ваш скетч и загрузить его в esp-8266 напрямую.А ардуино сможете использовать для градусника например.
     
  3. sdff

    sdff Нуб

    Да это не секрет для меня! Не мой вариант. У меня к ардуинке подключены и настроены датчики. Куда их прикручивать к ESP8266?) (только не предлагайте NodeMcu)
    И, да, я видел очень много схем использования Arduino Nano в качестве инструмента для прошивки. Но зачем? Может, я чего-то не понимаю, но это как использовать кайен для запуска соляриса.
     
  4. Airbus

    Airbus Радиохулиган Модератор

    Так Вы это и делаете.Управляете более производительным камнем менее производительным с помошью АТ команд да еще и програмным usart.15 GPIO на node mcu lua мало?
     
  5. Airbus

    Airbus Радиохулиган Модератор

    Обновите прошивку АТ модема.Используйте аппаратный usart.Это первое что приходит на ум если уж Вы без Ардуино никак.У Вас Ардуино и esp на разных бодрейтах работают это зачем?
     
  6. sdff

    sdff Нуб

    А для чего обновлять? И на какую прошивку?
    Неужели нету какой-то библиотеки к Arduino, чтобы можно было задать RX, TX и скорость, а дальше простыми командами обратиться на удалённый сервер?
     
  7. Airbus

    Airbus Радиохулиган Модератор

    Не встречал такой библиотеки.Обычно esp всегда работает одна сама по себе.Вы опять вместо того чтоб почитать темы в разделе задаете много вопросов.Даже при всем желании я вряд ли смогу перессказать Вам все и сразу.
     
  8. sdff

    sdff Нуб

    Перечитал не только темы в разделе, а уже перерыл кучу ресурсов. Вы даже сами говорите, что не встречали такой библиотеки - так смысл искать её тогда...
     
  9. Airbus

    Airbus Радиохулиган Модератор

    А без библиотеки слабо?И потом у Вас в коде
    Код (C++):

    Serial.begin(9600);
    ESP8266.begin(115200);
    Это нормально?У Вас они на разных скоростях общаются.esp прекрасно понимает и даже очень любит бод 9600.Как и все другие Модемы
     
  10. Airbus

    Airbus Радиохулиган Модератор

    Daniil и sdff нравится это.
  11. sdff

    sdff Нуб

    Спасибо! Ещё один вопрос. Вот есть несколько датчиков, и есть необходимость передавать данные с датчиков на удалённый сервер через wifi с возможностью забрать ответ оттуда. На чем бы Вы реализовали это? NodeMcu?
    (понимаю, что вопрос очень условный, но всё же)
     
  12. Airbus

    Airbus Радиохулиган Модератор

    Естественно.
     
    sdff нравится это.
  13. sdff

    sdff Нуб

    Спасибо за ответы! Низкий поклон!
     
  14. sdff

    sdff Нуб

    Не знаю, почему, но, когда устанавливаю 9600 между ардуинкой и esp, то ответа не приходит от esp.
     
  15. Airbus

    Airbus Радиохулиган Модератор

    Попробуйте на разных скоростях главное чтоб у приемника и передатчика совпадали.А вообще откажитесь от ардуино-это лишнее и слабое звено.На esp можно делать замечательные вещи программируя в знакомой среде и используя те же библиотеки.
     
  16. sdff

    sdff Нуб

    Да я уже NodeMcu использовал несколько раз. За Arduino+esp8266 взялся больше в образовательных целях. Спасибо за советы. В любом случае для себя подчерпнул много.
     
  17. Да это не только в образовательных целях. 1 аналоговый вход, резкое уменьшение (из без того из малого) при использовании SPI и I2C входов/выходов. Увы, но такая связка имеет право на жизнь.
    https://habr.com/ru/company/masterkit/blog/394357/
     
    Последнее редактирование: 1 апр 2019