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

Решено Как сделать reset esp8266-1

Тема в разделе "Железные вопросы по esp8266", создана пользователем Denisww, 8 май 2015.

Метки:
Статус темы:
Закрыта.
  1. Denisww

    Denisww Новичок

    Сообщения:
    20
    Симпатии:
    0
    По моему я переигрался командой AT+CIOBAUD

    Не могу вспомнить какую скорость установил. Не могу подобрать

    Уже перебирал +100. Не могу найти

    Может есть ресет ? Не шил.
     
  2. JustACat

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

    Сообщения:
    568
    Симпатии:
    121
    Denisww, есть - перепрошивка :-Р Перепрошейте ту же AT, если вы на ней сидите, и всего делов.
     
  3. Denisww

    Denisww Новичок

    Сообщения:
    20
    Симпатии:
    0
    Я использую ардуино uno
    Что за термин "сидеть на ат"?
     
  4. JustACat

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

    Сообщения:
    568
    Симпатии:
    121
    Denisww, извините, имелось ввиду, что используете в данный момент AT прошивку.
     
  5. Denisww

    Denisww Новичок

    Сообщения:
    20
    Симпатии:
    0
    Правильно ли я понимаю, что управлять с помощью ардуино через АТ команды не есть гут?
    Эффективней писать "скетчи"непосредственно в esp8266, в обход АТ команд? К примеру , если требуется большая скорость.
    Или есть другие причины, почему быстрее 100ms я не могу формировать ответ HTTP?

    я посылаю с помощью Ардуино в ESP8266 АТ команды:
    +++++скорость порта 57600++++++
    _SS_MAX_RX_BUFF=256

    # reset module> AT+RST>
    [HASHTAG]#1220[/HASHTAG] 0\0:Яo-'ю…Ж„EЈШ )ДҐЏ9хМ
    [Vendor:www.ai-thinker.com Version:0.9.2.4]

    ready

    # test esp8266>AT OK
    # speed baud>
    [HASHTAG]#1538[/HASHTAG] 0\0:AT+CIOBAUD=?

    +CIOBAUD:(9600-921600)
    OK

    # test esp8266>AT OK
    # configure for multiple connections 1>AT+CIPMUX=1 OK
    # configure as access point to 2(1=Station, 2=AP, 3=All)>
    [HASHTAG]#2008[/HASHTAG] 0\0:AT+CWMODE=2

    no change

    # turn on server on port 80>AT+CIPSERVER=1,80 OK
    # version flash>
    [HASHTAG]#2325[/HASHTAG] 0\0:AT+GMR

    0018000902-AI03
    OK

    # get ip address>
    [HASHTAG]#2484[/HASHTAG] 0\0:AT+CIFSR

    192.168.4.1
    OK

    # timeout 5>AT+CIPSTO=5 OK
    # AT esp8266>AT OK
    # AT esp8266>AT OK
    [HASHTAG]#2951[/HASHTAG] 0\0:# flush()
    # init end -----150-------------------------------------
    # main loop ---------------------------------

    Далее, если получаю запрос "+IPD", формирую ответ командой AT+CIPSEND, посылая:
    AT+CIPSEND=0,144
    HTTP/1.1 200 OK
    Content-Type: text/html
    Access-Control-Allow-Origin: *
    Content-Length: 48

    ARDUINO UNO
    pin11=0
    pin12=0
    pin13=0
    time=62
    9may

    Вот лог (формат # millis() available()\overflow()):
    скорость ответа минимум 120 микросекунд!!!

    [HASHTAG]#15285[/HASHTAG] 5\0:Link

    # 11 99\0:..
    Start loop [3]
    # 31 203\0:++++++++++++++++++++++++ +IPD0
    # 50 255\1: формирование ответа
    # 58 244\0:ClearBuffer# 60 0\0:
    # 63 0\0:send.>AT+CIPSEND=0,144 HTTP/1.1 200 OK......
    # 142 155\0:send.. ok
    # 143 155\0:++++++++++++++++++++++++
    # 144 155\0:loop iteration end

    # 147 154\0:ATIPSEND=0,144

    > HTTP/1.1 200 OK
    Content-Type: text/html
    Access-Control-Allow-Origin: *
    Content-Length: 48

    ARDUINO UNOpin11=0pin12=0pin13=0time=629may
    # 168 10\0:
    SEND OK

    [HASHTAG]#9876[/HASHTAG] 7\0:Unlink
     
  6. Victor

    Victor Administrator Команда форума

    Сообщения:
    2.211
    Симпатии:
    386
    именно так считают многие, но не все.
    а вот с этой стоковой прошивкой точно нет смыла время тратить - только намаетесь, шейте новую
     
  7. JustACat

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

    Сообщения:
    568
    Симпатии:
    121
    Denisww, хоть бы в спойлеры что ли закинули бы... Все одной простыней, даже читать не хочется... =/
     
  8. Denisww

    Denisww Новичок

    Сообщения:
    20
    Симпатии:
    0
    Сделаю, завтра утром

    Дайте пожалуйста ссылку на последнюю прошивку!!!!!
     
  9. Victor

    Victor Administrator Команда форума

    Сообщения:
    2.211
    Симпатии:
    386
    AT v0.23 SDK 1.0.1 остальные прошивки http://esp8266.ru/downloads/esp8266-firmware/#wpfb-cat-2

    только некоторые AT команды работать не будут
    Описание новых (v0.22) здесь. Для v0.23 на русском пока нет, но там добавлена только буферизация отправки данных, остальное без изменений.
     
  10. Denisww

    Denisww Новичок

    Сообщения:
    20
    Симпатии:
    0
    В архиве +arduino_test_primer.html
    Клиент PC для посылки сообщений в Arduino

    как выкладывать скетчи?
     

    Вложения:

  11. Victor

    Victor Administrator Команда форума

    Сообщения:
    2.211
    Симпатии:
    386

    4. Фото, видео, длинные тексты (код, логи и т.п.) прячьте под спойлер: [SPOILER]много текста или большая картинка[/SPOILER]
    5. Код дополнительно помещайте в тег CODE с указанием языка программирования. Например, [SPOILER][CODE=C++]ваш код на С[/CODE][/SPOILER]
     
  12. Denisww

    Denisww Новичок

    Сообщения:
    20
    Симпатии:
    0
    Основная проблема :):
    Работа точки доступа ESP8266 не выдерживает нагрузочного тестирования!

    Скетч для Arduion (раскрыть)

    Код (Text):
    1. #include <SoftwareSerial.h>
    2.  
    3. #include <avr/wdt.h>
    4.  
    5. #define DEBUG true
    6. #define REQUEST_FASTTIME 150
    7. #define CIPMUX 1// configure for multiple connections
    8. #define CWMODE 2// режим configure as access point (1=Station, 2=AP, 3=All)
    9. #define CIPSERVER_PORT 80
    10. #define CIPSTO_TIMEOUT 5
    11. #define BOUDFirst 57600 // скорость обмена по умолчанию 9600 или 38400 или 57600 или макс 921600
    12. #define BOUD 57600 // моя максимальная скорость ESP with Arduino 57600
    13. #define REQUEST_START "ARDUINO UNO"
    14. #define REQUEST_END "9may"
    15. #define CONNECTION ""
    16. //#define CONNECTION "Connection: close\r\n"
    17. //#define CONNECTION "Connection: keep-alive\r\n"
    18. #define TEG_SERVER "";
    19. //#define TEG_SERVER "Server: WebSevice\r\n";
    20. #define TEG_REFRESH ""
    21. //#define TEG_REFRESH "Refresh: 1\r\n"
    22.  
    23. long int time = millis(), time_1, time_2, time_3;
    24. int loopIterat = 3;
    25. boolean firstStop  = false;
    26. SoftwareSerial esp8266(2, 3);
    27.  
    28.  
    29. void setup()
    30. {
    31.   Serial.begin(57600);
    32.   Serial.println("_SS_MAX_RX_BUFF="+String(_SS_MAX_RX_BUFF,DEC));
    33.  
    34.   if (BOUDFirst != BOUD){
    35.     long b= BOUDFirst;
    36.     String s  = "AT+CIOBAUD=" + String(BOUD, DEC);
    37.     String r  = "";
    38.     while(true){
    39.       esp8266.begin(b);
    40.       Serial.print("esp8266.begin = ");
    41.       Serial.println(b, DEC);
    42.       while(true){
    43.         Serial.println(s);
    44.         esp8266.println(s);
    45.         Serial.println(esp8266.readString());
    46.         if(b!=BOUDFirst)break;
    47.       }
    48.       esp8266.end();
    49.     }  
    50.   }
    51.   esp8266.begin(BOUD);
    52.  
    53.   pinMode(11, OUTPUT);
    54.   digitalWrite(11, LOW);
    55.  
    56.   pinMode(12, OUTPUT);
    57.   digitalWrite(12, LOW);
    58.  
    59.   pinMode(13, OUTPUT);
    60.   digitalWrite(13, LOW);
    61.  
    62.   sendData("AT+RST", "reset module", 0);
    63.   sendData("AT", "test esp8266", REQUEST_FASTTIME);
    64.   sendData("AT+CIOBAUD=?", "speed baud", REQUEST_FASTTIME);
    65.  
    66.   if (DEBUG)sendData("AT", "test esp8266", REQUEST_FASTTIME);
    67.   sendData("AT+CIPMUX=" + String(CIPMUX), "configure for multiple connections " + String(CIPMUX), REQUEST_FASTTIME);
    68.   sendData("AT+CWMODE=" + String(CWMODE), "configure as access point to " + String(CWMODE) + "(1=Station, 2=AP, 3=All)", REQUEST_FASTTIME);
    69.   sendData("AT+CIPSERVER=1," + String(CIPSERVER_PORT), "turn on server on port " + String(CIPSERVER_PORT), REQUEST_FASTTIME);
    70.   sendData("AT+GMR", "version flash", REQUEST_FASTTIME);
    71.   sendData("AT+CIFSR", "get ip address", REQUEST_FASTTIME);
    72.   sendData("AT+CIPSTO=" + String(CIPSTO_TIMEOUT), "timeout " + String(CIPSTO_TIMEOUT), REQUEST_FASTTIME);
    73.   if (DEBUG)sendData("AT", "AT esp8266", REQUEST_FASTTIME);
    74.   //if(DEBUG)sendData("AT+CWLAP","View access point", 5000); //1 раз сработало
    75.   //Serial.println("# delay(2000)");delay(2000);
    76.   sendData("AT", "AT esp8266", REQUEST_FASTTIME);
    77.   Serial.println(""); printTime();
    78.   Serial.println("# flush()"); esp8266.flush();
    79.   Serial.println("# init end -----"+String(REQUEST_FASTTIME,DEC)+"-------------------------------------");
    80.   time_1 = millis(); time_2 = millis();
    81. }
    82.  
    83. // Основной цикл- Ждем +IPD и выталкиваем буфер
    84. void loop()
    85. {
    86.   Serial.println("# main loop ---------------------------------\n");
    87.   //while(!esp8266.overflow()){
    88.   while (true) {
    89.     if (DEBUG) if (millis() - time_1 > 1000)Serial.println(printTime(time_1) + "second 1"); time_1 = millis();
    90.     time = millis();
    91.     char c = 0; long conId = 0;
    92.     while (esp8266.available()) {
    93.       time = millis();
    94.       if ( ( c = esp8266.read() ) == '+' ) {
    95.         while (esp8266.available()<64)delay(1);
    96.         //if (!DEBUG) delay(10);
    97.         //if(millis()-time_2>2000) Serial.println(printTime(time_2)+"available------second 2---------");time_2 = millis();
    98.         if ( (c = esp8266.read()) == 'I' && (c = esp8266.read()) == 'P' && (c = esp8266.read()) == 'D' && (c = esp8266.read()) == ',')
    99.         //if(esp8266.find("IPD,"))
    100.         {
    101.           //while(!esp8266.overflow()) delay(1);
    102.           printTime();Serial.println("..");
    103.           if (!firstStop) {
    104.             Serial.println("Start loop [" + String(loopIterat++) + "]");
    105.             firstStop = true;
    106.           } else Serial.println("loop [" + String(loopIterat++) + "]");
    107.           if (CIPMUX == 1)conId = esp8266.parseInt();
    108.           if (DEBUG) {
    109.             Serial.print(printTime() + "++++++++++++++++++++++++");
    110.             Serial.print(" +IPD");
    111.             Serial.println(conId);
    112.           }
    113.           //printTime();Serial.println(">");
    114.           retriveOk(conId);
    115.           //printTime();Serial.println(">>\n");
    116.           if (DEBUG)Serial.println(printTime() + "loop iteration end");
    117.         }
    118.       } else if (DEBUG)if (c != 0)
    119.         {
    120.           if (millis() - time_3 > 10) {
    121.             Serial.println("");
    122.             printTime(time_3);
    123.             Serial.print(c);
    124.           }
    125.           else Serial.print(c);
    126.           time_3 = millis();
    127.         }
    128.     }
    129.     //delay(50);
    130.   }
    131. }
    132.  
    133. void retriveOk(long connId)
    134. {
    135.   if (DEBUG)Serial.println(printTime() + "retriveOk");
    136.  
    137.   // ищем команду /set и номер pin=
    138.   if ( esp8266.find(" /") && esp8266.read() == 's' && esp8266.find("pin=") )
    139.   {
    140.     int pin = esp8266.parseInt();
    141.     if (DEBUG)Serial.print(printTime() + "Setup pin=");
    142.     if (DEBUG)Serial.println(pin);
    143.     digitalWrite(pin, digitalRead(pin) == LOW ? HIGH : LOW);
    144.   }
    145.   // чистим буфер
    146.   if (DEBUG)printTime(); while (esp8266.available()) esp8266.read();
    147.   if (DEBUG)Serial.print("ClearBuffer");
    148.   if (DEBUG)Serial.println(printTime());
    149.  
    150.   String requestText = REQUEST_START;
    151.   // собираем инфо для ответа
    152.   for (int pin = 11; pin <= 13; pin++) {
    153.     requestText += "\npin" + String(pin, DEC) + "=";
    154.     requestText += digitalRead(pin) == HIGH;
    155.   }
    156.   requestText += "\ntime=" + String(millis() - time, DEC) + "\n";
    157.   requestText += REQUEST_END;
    158.  
    159.   String request  = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nAccess-Control-Allow-Origin: *\r\n";
    160.   request += TEG_SERVER;
    161.   request += CONNECTION;
    162.   request += TEG_REFRESH;
    163.   request += "Content-Length: "; request += String(requestText.length(), DEC) + "\r\n";
    164.   request += "\r\n" + requestText;
    165.   // стартуем обмен данными
    166.   String sSend = "AT+CIPSEND";
    167.   if (CIPMUX == 1)sSend += "=" + String(connId, DEC) + ",";
    168.   sSend += request.length();
    169.  
    170.   if (DEBUG)Serial.print(printTime() + "send.>");
    171.   if (DEBUG)Serial.println(sSend+"\r\n"+request);
    172.   esp8266.print(sSend+"\r\n"+request);
    173.   if (DEBUG)Serial.println(printTime() + "send..");
    174.  
    175.   // Очиста буфера произойдет в основном цикле
    176.   if (DEBUG)Serial.println(printTime() + "++++++++++++++++++++++++");
    177. }
    178.  
    179. // Отправка команды
    180. void sendData(String command, String comment, long int delayTime)
    181. {
    182.   Serial.print("\n# " + comment);
    183.   if(delayTime == 0)Serial.print("> ");
    184.   esp8266.println(command);
    185.   String response = delayTime != 0 ? esp8266readString(delayTime) : esp8266.readString();
    186.   {
    187.     String ss = response; ss.trim();
    188.     if (response.indexOf(command) < 0) Serial.println(command+">");
    189.     else {
    190.       ss.replace("\r\n\r\n", "\n");
    191.       String sss=command+"\r\nOK";
    192.       if( sss.equals(ss)){
    193.         Serial.print(command+" OK");
    194.         return;
    195.       }
    196.       Serial.println("");
    197.     }
    198.     printTime();
    199.     if (response.length() > 0)Serial.println(ss); else Serial.println("response = >null");
    200.   }
    201.   return;
    202. }
    203.  
    204. String printTime() {
    205.   return printTime(time);
    206. }
    207. String printTime(long int time) {
    208.   Serial.print("#");
    209.   Serial.print(LeftPad(String(millis() - time, DEC), 4, " "));
    210.   Serial.print(LeftPad(String(esp8266.available(), DEC), 4, " "));
    211.   Serial.print("\\");
    212.   Serial.print(esp8266.overflow());
    213.   Serial.print(":");
    214.   return "";
    215. }
    216.  
    217. String LeftPad(String st, int n, String s) {
    218.   if(st.length()>=n)return st;
    219.   String ss = ""; for (int i = 0; i < n - st.length(); i++)ss += s; return ss + st;
    220. }
    221.  
    222. String RightPad(String st, int n, String s) {
    223.   if(st.length()>=n)return st;
    224.   String ss = ""; for (int i = 0; i < n - st.length(); i++)ss += s; return st + ss;
    225. }
    226.  
    227. // примеры рестарта Arduino
    228. void(* resetFunc) (void) = 0;
    229. void reboot() {
    230.   wdt_disable();
    231.   wdt_enable(WDTO_15MS);
    232.   while (1) {}
    233. }
    234.  
    235. void restart(String meesage) {
    236.   Serial.println(printTime() + "Error!!!!Error!!!!Error!!!!Error!!!!");
    237.   Serial.println(meesage);
    238.   Serial.println(esp8266.readString());
    239.   return;
    240.   while (true) {
    241.     String s = esp8266.readString();
    242.     if (s.length() > 0)Serial.println(s);
    243.   }
    244.   reboot();
    245. }
    246.  
    247. String esp8266readString(long int delayTime) {
    248.   //Serial.print(", fast(" + String(delayTime) + ")>");
    249.   Serial.print(">");
    250.   String result = "";
    251.   long int delayT = delayTime + millis();
    252.   while (result.length()==0 || millis() <= delayT)
    253.     while (esp8266.available()) {
    254.       char c = esp8266.read();
    255.       result += c;
    256.     }
    257.   return result;
    258. }
    259.  
    260. String esp8266readString() {
    261.   return esp8266readString(0);
    262. }
    263.  
    264. void loop1() {
    265.   if (esp8266.available()) Serial.print(esp8266.readString());
    266. }
    267.  
     

    Вложения:

  13. Denisww

    Denisww Новичок

    Сообщения:
    20
    Симпатии:
    0
    Фото клиента. Видна скорость ответа ... и крах. На моей памяти максимум 16000 итераций (раскрыть)

    [​IMG]
    [​IMG]
     
  14. Victor

    Victor Administrator Команда форума

    Сообщения:
    2.211
    Симпатии:
    386
    @Denisww, немного инфы (правда это не очень поможет преодолеть нагрузочные тесты, но все же)
    SoftwareSerial esp8266(2, 3);
    попробуйте терминал на SoftwareSerial посадить, вывод в него подсократить, а esp8266 на UART. Попробуйте 115200 и выше
    ну и парсинг для ардуины тяжел
    if ( esp8266.find(" /") && esp8266.read() == 's' && esp8266.find("pin=") )
     
  15. Denisww

    Denisww Новичок

    Сообщения:
    20
    Симпатии:
    0
    Соглашусь, что на скорость ответа линейно влияет скорость обмена с ESP8266 и количество передаваемых данных.
    по SoftwareSerial уже на 2-ух ESP8266 выставляю максимальную скорость 57600.
    Стоит пробовать по UART ставить выше 115200 ?
    Я боюсь, что получится аналогично теме поста. Переключится в более быстрый режим получится, а вернуться нет....
    Специальная конструкция...
    " /" - есть всегда и ищется быстро,
    наличие 's' проверяется быстро,
    если 's' найдено , то ищется "pin=", которое тоже всегда есть и работает быстро..
     
  16. JustACat

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

    Сообщения:
    568
    Симпатии:
    121
    Denisww, что-то вроде у вас сходится с этой вот темой. Может объединиться в поисках решений?
    С ESP работать только через HardwareSerial! SoftwareSerial для него слишком слабый и медленный. И на 115200.
    Если при этом нужен дебаг на ПК - то его выводить уже через SoftwareSerial. Неудобно, но по-другому - никак.
    Хотя еще вариант: взять другую дуину, с несколькими аппаратными UART для тестов.
     
    Victor нравится это.
  17. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.749
    Симпатии:
    1.284
    Я правильно воспроизвел ваше незнание?
    TIME_WAIT.gif
    Советую почитать, как должно работать TCP соединение в любой из тем на форуме. Я у же устал объяснять эту фичу в TCP...
    Для "демонстрации" вашей фичи, как не следует делать в TCP сервере, специально вставил баг в исходники, странслировал и снял скриншот...
     
    Последнее редактирование: 12 май 2015
  18. Denisww

    Denisww Новичок

    Сообщения:
    20
    Симпатии:
    0
    Не понял, что за фичу Вы описываете. Прошу, точнее.
     
  19. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.749
    Симпатии:
    1.284
    Разбиралась в каждой теме, где кто писал Web.
    Вот правильная работа сервера, без нарушений спецификаций TCP:
    TCP_ok.gif
    Больше времени и счетчиков соединений с запросом-ответом ждать надоело - переполниться отладчик в Google Chrome :)
    Возьмите название прошлого скрина и в поиск по форуму... Найдете пояснения с картинками и с видео.. :)
     
  20. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.749
    Симпатии:
    1.284
Статус темы:
Закрыта.

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