Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Нужна помощь ESP8266 at команды

Тема в разделе "Общие вопросы по esp8266", создана пользователем ДимДим, 19 июл 2019.

  1. ДимДим

    ДимДим Новичок

    Сообщения:
    6
    Симпатии:
    0
    Здравствуйте. Подключил ESP8266 к ардуино нано, модуль заработал и реагирует на AT команды отправляемые в монитор порта. К примеру:
    PHP:
    1. AT+CWMODE=2 — выбираем режим точки доступа AP;
    2. AT+RST — перезапускаем модуль;
    3. AT+CIPMUX=1 — устанавливаем несколько соединений;
    4. AT+CIPSERVER=1,8080— настраиваем сервер TCP, устанавливаем номер порта;
    5. AT+CIFSR — смотрим адрес IP для режима AP, примерно такой: APIP, “192.168.4.1”;
    6. AT+CIOBAUD=9600 — устанавливаем скорость передачи последовательного порта на 9600 бод.
    Но вот как сделать что бы при старте модуля эти команды сами отправлялись. Пробовал залить скетч -не работает. И команды уже в мониторе порта не отправляются (отправляются но нет ответа).
    Скетч:
    PHP:
    1. #include <SoftwareSerial.h> //Подключаем библиотеку работы с Последовательным портом
    2. SoftwareSerial mySerial(0, 1);
    3. #define SPEED 115200
    4. void setup()
    5. {
    6. Serial.begin(SPEED);
    7. //Serial.setTimeout(500);
    8.  
    9. // set the data rate for the SoftwareSerial port
    10. mySerial.begin(SPEED); //Открываем последовательный порт Esp, устанавливаем скорость 9600. Внимание!! убедитесь что Esp работает именно на этой скорости!!
    11. mySerial.println("AT"); // Отправляем тестовую команду АТ в созданный порт, если всё работает в ответе должно прийти ОК (оно не приходит)
    12.  
    13. Serial.println("Start working!!!");
    14. }
    15.  
    16. void loop() // run over and over
    17. {
    18. if (mySerial.available()){
    19.   Serial.println(mySerial.readString());
    20. }
    21.  
    22. String txt_in="";
    23.  
    24. if (Serial.available()) {
    25.   txt_in=Serial.readString();
    26.   Serial.println(txt_in);
    27.   mySerial.println(txt_in);
    28.  
    29. }
    30. }
    Схема:
    схема для прошивки esp8266 ESP-01.PNG
    Как можно исправить?
     
  2. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.618
    Симпатии:
    180
    Сами они не отправляются, но вы можете сами их оправить, поместив их в Setup.
    Чтобы работало, надо добавить магии, примерно так
    Код (Text):
    1.  
    2. mySerial.println("AT\n\r");
    3.  
     
    ДимДим нравится это.
  3. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.618
    Симпатии:
    180
  4. ДимДим

    ДимДим Новичок

    Сообщения:
    6
    Симпатии:
    0
    Я не сомневаюсь что это правильное решение. Но после заливки скетча ни чего не происходить, даже если в ручную отправлять команды в монитор порта.
     
  5. Юрий Ботов

    Юрий Ботов Moderator Команда форума

    Сообщения:
    1.052
    Симпатии:
    175
    ... так вы залив скетч стерли обработчик AT команд...
     
    ДимДим нравится это.
  6. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.618
    Симпатии:
    180
    Что за скетч никто кроме вас не знает.
    Начните с переделки схемы, потом установите скорость порта ниже.
    Код (Text):
    1. if (Serial.available()) {
    2.   txt_in=Serial.readString();
    3.   Serial.println(txt_in);
    4.   mySerial.println(txt_in)
    Вы пробуете читать строку, а надо бы читать по одному символу.

    По ссылке выше есть нормальный код для общения через ардуино.
    Код (Text):
    1. void loop() {
    2.   if ( espSerial.available() )
    3.     Serial.write( espSerial.read() );
    4.   if ( Serial.available() )
    5.     espSerial.write( Serial.read() );
    6. }
    И ясное дело, что послав в Setup команду mySerial.println("AT\n\r"); вы не увидите ответ, пока не напишите код для этого.
     
  7. Юрий Ботов

    Юрий Ботов Moderator Команда форума

    Сообщения:
    1.052
    Симпатии:
    175
    А скетч вы в кого заливали? Не в esp случаем?
     
    ДимДим нравится это.
  8. ДимДим

    ДимДим Новичок

    Сообщения:
    6
    Симпатии:
    0
    В его родимого )
     
  9. ДимДим

    ДимДим Новичок

    Сообщения:
    6
    Симпатии:
    0
    @Юрий Ботов спасибо за наводку. Я то чудак второй день прошиваю esp, и удивляюсь чего это она перестаёт отвечать на ат команды. Залил скетч в уно - заработало )
    PHP:
    1. #include <SoftwareSerial.h> //Подключаем библиотеку работы с Последовательным портом
    2. SoftwareSerial mySerial(9, 10);
    3.  
    4. void setup()
    5. {
    6.   Serial.begin(9600);
    7.   //Serial.setTimeout(500);
    8.   mySerial.begin(115200); //Открываем последовательный порт Esp, устанавливаем скорость 115200. Внимание!! убедитесь что Esp работает именно на этой скорости!!
    9.   mySerial.println("AT"); // Отправляем тестовую команду АТ в созданный порт, если всё работает в ответе должно прийти ОК
    10.   Serial.println("Start working!!!");
    11. }
    12.  
    13. void loop() // run over and over
    14. {
    15.   if (mySerial.available())
    16.     {
    17.       Serial.println(mySerial.readString());
    18.     }
    19.   String txt_in="";
    20.   if (Serial.available())
    21.     {
    22.       txt_in=Serial.readString();
    23.       Serial.println(txt_in);
    24.       mySerial.println(txt_in);
    25.     }
    26. }
    Но на этом мои искания не закончились.
    Я думал что прошив esp скетчем в котором есть подключение к сети и т.п. таким образом заставлю его работать с 5v реле (с которым он и был приобретён в комплекте).
    12.png
    Но как оказывается без ардуинки он работать не будет или я ошибаюсь?
     
  10. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.618
    Симпатии:
    180
    Ошибаетесь.
     
  11. ДимДим

    ДимДим Новичок

    Сообщения:
    6
    Симпатии:
    0
    Да, заработало и без ардуинки. Попробовал зажечь светодиод, подключив его к пину 2 и залив в есп скетч:
    PHP:
    1.  /**
    2. * WiFi розетка. Версия 1.0
    3. * Copyright (C) 2015 http://samopal.pro
    4. */
    5. #include <ESP8266WiFi.h>
    6. #include <WiFiClient.h>
    7. #include <ESP8266WebServer.h>
    8. #include <ESP8266mDNS.h>
    9.  
    10. // GPIO, куда подцелено реле
    11. uint8_t PowerPin = 2;
    12. bool    PowerOn  = false;
    13.  
    14. // Имя хоста
    15. const char* host = "esp8266-power";
    16. // Вместо звездочек свои параметры WiFi сети
    17. const char* ssid = "***";
    18. const char* password = "****";
    19.  
    20. ESP8266WebServer server(80);
    21.  
    22. void setup() {
    23. // Последовательный порт для отладки
    24.   Serial.begin(115200);
    25.   Serial.printf("\n\nFree memory %d\n",ESP.getFreeHeap());
    26.  
    27.   // Инициализация выхода реле
    28.   pinMode(PowerPin , OUTPUT);
    29.   digitalWrite(PowerPin , PowerOn);
    30.  
    31. // Подлючение к WiFi
    32.  
    33.   WiFi.mode(WIFI_AP_STA);
    34.   WiFi.begin(ssid, password);
    35.   if(WiFi.waitForConnectResult() == WL_CONNECTED){
    36. // Запуск WEB-сервера
    37.      MDNS.begin(host);
    38.      server.on ( "/", HTTP_handleRoot );
    39.      server.onNotFound ( HTTP_handleRoot );
    40.      server.begin();  
    41.      //Serial.printf( "HTTP server ok! Open http://%s.local in your browser\n", host);
    42.      Serial.println(WiFi.localIP());
    43.   }
    44.   else {
    45.      Serial.printf("WiFi started is fail");
    46.   }
    47.    
    48. }
    49.  
    50.  
    51. void loop() {
    52.   server.handleClient();
    53.    delay(50);
    54. }
    55.  
    56.  
    57. /*
    58. * Оработчик главной страницы сервера
    59. */
    60. void HTTP_handleRoot(void) {
    61.   bool stat = false;
    62.  
    63.   if( server.hasArg("stat") ){
    64.      if( strncmp(server.arg("stat").c_str(),"1",1) == 0 )stat = true;
    65.   }
    66.   else {
    67.      stat = PowerOn;
    68.   }
    69.  
    70.   String out = "";
    71.  
    72.   out =
    73. "<html>\
    74.  <head>\
    75.    <meta charset=\"utf-8\" />\
    76.    <title>WiFi розетка</title>\
    77.    <style>\
    78.      body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\
    79.    </style>\
    80.  </head>\
    81.  <body>\
    82.    <h1>WiFi розетка. Версия 1.0</h1>\n";
    83.  
    84.   if( stat ){
    85.       out+="\
    86.    <h2>Состояние: Включено</br>\
    87.    <a href=\"/?stat=0\">Выключить</a></h2>\
    88.    ";
    89.   }
    90.   else {
    91.       out+="\
    92.    <h2>Состояние: Выключено</br>\
    93.    <a href=\"/?stat=1\">Включить</a><h2>\
    94.    ";          
    95.   }
    96.    out+= "\
    97.  </body>\
    98. </html>";
    99.    server.send ( 200, "text/html", out );
    100.    if( stat != PowerOn ){
    101.       PowerOn = stat;
    102.       digitalWrite(PowerPin , PowerOn);
    103.       if( PowerOn )Serial.println("Power is ON");
    104.       else Serial.println("Power is OFF");
    105.    }
    106.  
    107. }
    Включается и выключается через веб интерфейс. Но стоит собрать модуль воедино (есп и реле), реле не щелкает (вкл/выкл), но светодиод на плате есп по прежнему реагирует на команды (загорается/тухнет). Видимо что то производители не так наваяли на схеме релюшки?
     
  12. ДимДим

    ДимДим Новичок

    Сообщения:
    6
    Симпатии:
    0
    Решено:
    Код (Text):
    1. // GPIO, куда подцелено реле
    2. uint8_t PowerPin = 0;
    Пин на плате реле не 2 а 0.
     

Поделиться этой страницей