Скрыть объявление
Управляйте вашими ESP8266 и другими устройствами прямо с телефона из любой точки мира, где есть интернет!
Подробности и обсуждение IoT Manager в этой теме. Официальный сайт приложения и документация IoTmanager.ru
Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Общие вопросы по Arduino IDE для ESP8266

Тема в разделе "ESP8266 Arduino IDE", создана пользователем Victor, 28 мар 2015.

  1. JustACat

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

    Сообщения:
    568
    Симпатии:
    121
    А почему бы не использовать именно system_restart SDK'шный? Или сознательно отход от Esspressifского SDK? Спрашиваю на полном серьезе, то есть, объясните, пожалуйста, в чем минус system_restart?
    Или может он как раз в итоге и делает именно переход на 0x40000080?
     
  2. jcmvbkbc

    jcmvbkbc Читатель

    Сообщения:
    179
    Симпатии:
    17
    Это restart, наверно, но никак не reset.
     
    JustACat нравится это.
  3. igrr

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

    Сообщения:
    70
    Симпатии:
    23
    system_restart сохраняет во флэш настройки wifi перед тем, как сделать собственно restart. Но настройки сохраняются также и после всех вызовов sdk-шных функций. Зачем тогда их лишний раз сохранять?

    Название да, неправильное, но вроде бы это не критично.
     
    JustACat нравится это.
  4. bolwoi

    bolwoi Читатель

    Сообщения:
    18
    Симпатии:
    5
    Друзья. Подскажите, пожалуйста.
    Имеем программу, посылающую в каждом цикле loop пакет по UDP.
    Все передается отлично, НО вот после 326 пакета, не зависимо от его размера, проц уходит в ресет.
    В чем может быть проблема?
     
  5. JustACat

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

    Сообщения:
    568
    Симпатии:
    121
    bolwoi, а по времени? Нечаянно это не через 15 примерно минут происходит? (хотя, это из другой немного оперы, не выспался я сегодня)
    Если нет, то попробуйте подробнее написать: приведите пример кода (лучше весь). Лог вывода в UART и т.п. (только не забывайте про теги Код и Спойлер, пожалуйста)
     
  6. bolwoi

    bolwoi Читатель

    Сообщения:
    18
    Симпатии:
    5
    От времени не зависит. Исключительно по числу пакетов. Я пробовал разные интервалы между посылками.
     
  7. bolwoi

    bolwoi Читатель

    Сообщения:
    18
    Симпатии:
    5
    Вот код:
    Раскрыть Спойлер
    Код (Text):
    1.  
    2. [HASHTAG]#include[/HASHTAG] <ESP8266WiFi.h>
    3. [HASHTAG]#include[/HASHTAG] <WiFiUdp.h>
    4.  
    5. int status = WL_IDLE_STATUS;
    6. /*char ssid[] = "*****"; //  your network SSID (name)
    7. char pass[] = "*****";    // your network password (use for WPA, or use as key for WEP)*/
    8.  
    9. char ssid[] = "*****"; //  your network SSID (name)
    10. char pass[] = "*****";    // your network password (use for WPA, or use as key for WEP)
    11.  
    12. char ClientIPMask[] = "192.168.100.255";
    13. unsigned int ClientPort = 53333;
    14. unsigned int localPort = 2390;      // local port to listen on
    15. char packetBuffer[255]; //buffer to hold incoming packet
    16. char  ReplyBuffer[] = "acknowledged";       // a string to send back
    17. byte OutBuf [10] = {0};
    18. WiFiUDP Udp;
    19. byte value = 0;
    20. int packetSize = 0;
    21.  
    22. void setup() {
    23.   Serial.begin(115200);
    24.   WiFi.mode(WIFI_STA);//: выбрать режим WIFI_AP (точка доступа), WIFI_STA (клиент), илиr WIFI_AP_STA (оба режима одновременно).
    25.   Serial.println("BEGINING");
    26.   WiFi.begin(ssid, pass);
    27.   while ( WiFi.status() != WL_CONNECTED)
    28.   {
    29.     Serial.print("Attempting to connect to SSID: ");
    30.     Serial.println(ssid);
    31.     delay(3000);
    32.   }
    33.   Serial.println("Connected to wifi");
    34.   printWifiStatus();
    35.   delay (100);
    36.   Udp.begin(localPort);
    37.   delay (100);}
    38.  
    39. void loop()
    40. {
    41.   packetSize = Udp.parsePacket();
    42.   if (packetSize)
    43.   {
    44.     Serial.print("Received packet of size ");
    45.     Serial.println(packetSize);
    46.     Serial.print("From ");
    47.     IPAddress remoteIp = Udp.remoteIP();
    48.     Serial.print(remoteIp);
    49.     Serial.print(", port ");
    50.     Serial.println(Udp.remotePort());
    51.  
    52.     int len = Udp.read(packetBuffer, 255);
    53.     if (len > 0) packetBuffer[len] = 0;
    54.     Serial.print("Contents: ");
    55.     Serial.print(len );
    56.     Serial.println("Bytes");
    57.  
    58.     Serial.println(packetBuffer);
    59.   }
    60.  
    61.   OutBuf[0] = value;
    62.   OutBuf[1] = value+1;
    63.   OutBuf[2] = value+2;
    64.   OutBuf[3] = value+3;
    65.   OutBuf[4] = value+4;
    66.   OutBuf[5] = value+5;
    67.   OutBuf[6] = value+6;
    68.   OutBuf[7] = value+7;
    69.   OutBuf[8] = value+8;
    70.   OutBuf[9] = value+9;
    71.  
    72.   Udp.beginPacket("192.168.100.255", 53333);
    73.   Udp.write(OutBuf, 10);
    74.   Udp.endPacket();
    75.   value++;
    76.   delay (100);
    77. }
    78.  
    79.  
    80. void printWifiStatus()
    81. {
    82.   // print the SSID of the network you're attached to:
    83.   Serial.print("SSID: ");
    84.   Serial.println(WiFi.SSID());
    85.  
    86.   // print your WiFi shield's IP address:
    87.   IPAddress ip = WiFi.localIP();
    88.   Serial.print("IP Address: ");
    89.   Serial.println(ip);
    90. }
    91.  


    Вот он лог:
    Раскрыть Спойлер
    Код (Text):
    1.  
    2. Attempting to connect to SSID: TP-LINK_7D9E32
    3. Attempting to connect to SSID: TP-LINK_7D9E32
    4. Attempting to connect to SSID: TP-LINK_7D9E32
    5. Attempting to connect to SSID: TP-LINK_7D9E32
    6. Attempting to connect to SSID: TP-LINK_7D9E32
    7. Attempting to connect to SSID: TP-LINK_7D9E32
    8. Connected to wifi
    9. SSID: TP-LINK_7D9E32
    10. IP Address: 192.168.100.18
    11.  
    12. ets Jan  8 2013,rst cause:4, boot mode:(3,0)
    13.  
    14. wdt reset
    15. load 0x40100000, len 26856, room 16
    16. tail 8
    17. chksum 0xf1
    18. load 0x3ffe8000, len 2604, room 0
    19. tail 12
    20. chksum 0x30
    21. ho 0 tail 12 room 4
    22. load 0x3ffe8a30, len 1984, room 12
    23. tail 4
    24. chksum 0xf7
    25. csum 0xf7
    26.  


    В другой версии Arduino IDE уже 354 пакета передается нормально.

    Извиняйте за размашистость. Не знал как делать. Исправился.
     
    Последнее редактирование модератором: 13 апр 2015
    JustACat нравится это.
  8. igrr

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

    Сообщения:
    70
    Симпатии:
    23
    @bolwoi насколько свежая у вас версия? недавно поправили баг в Udp, память не освобождалась при некоторых условиях.
    Было бы полезно вставить в loop вывод текущего объема оставшейся памяти, чтобы посмотреть, из-за чего проблема:

    Код (Text):
    1.  
    2. extern "C" {
    3.  #include "user_interface.h"
    4. }
    5. // later
    6. Serial.println(system_get_free_heap_size());
    7.  
    Также можно добавить побольше отладочной инфы:
    Код (Text):
    1.  
    2. Serial.setDebugOutput(true); // <- в функции setup, после Serial.begin
    3.  
    и в hardware/esp8266com/esp8266/cores/esp8266/debug.h
    Код (Text):
    1.  
    2. #define DEBUGV(...) ets_printf(__VA_ARGS__)
    3. //#define DEBUGV(...)
    4.  
     
    Victor нравится это.
  9. bolwoi

    bolwoi Читатель

    Сообщения:
    18
    Симпатии:
    5
    96 пост, вторая ссылка - это, как я понимаю, последняя версия (поправите, ежели не так).
    Вот в ней, и в предыдущей такая проблема. В последней в логе упоминалось что-то про heap.
    В общем, сейчас попробую.
     
  10. igrr

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

    Сообщения:
    70
    Симпатии:
    23
    Так, я наврал — фикс был в части, касающейся TCP. С UDP наверное что-то новое. Так как до недавнего времени он нормально и не работал, то его никто и не тестировал продолжительное время. Видимо еще какой-то баг с освобождением ресурсов.
     
  11. bolwoi

    bolwoi Читатель

    Сообщения:
    18
    Симпатии:
    5
    Вот что получилось:
    Раскрыть Спойлер
    Код (Text):
    1.  
    2. /////////// Это начало
    3. Attempting to connect to SSID: TP-LINK_7D9E32
    4. scandone
    5. add 0
    6. aid 10
    7. pm open phy_2,type:2 0 0
    8. cnt
    9. Attempting to connect to SSID: TP-LINK_7D9E32
    10.  
    11. connected with TP-LINK_7D9E32, channel 6
    12. dhcp client start...
    13. Attempting to connect to SSID: TP-LINK_7D9E32
    14. Attempting to connect to SSID: TP-LINK_7D9E32
    15. ip:192.168.100.18,mask:255.255.255.0,gw:192.168.100.1
    16. Connected to wifi
    17. SSID: TP-LINK_7D9E32
    18. IP Address: 192.168.100.18
    19. :ur 0
    20.  
    21. 34816
    22. :ur 0
    23.  
    24. 34696
    25. :ur 0
    26.  
    27. 34592
    28. :ur 0
    29.  
    30. 34488
    31. :ur 0
    32.  
    33. 34384
    34. :ur 0
    35.  
    36. 34280
    37. :ur 0
    38.  
    39. 34176
    40. :ur 0
    41.  
    42. 34072
    43. :ur 0
    44.  
    45. 33968
    46. :ur 0
    47.  
    48. 33864
    49. :ur 0
    50.  
    51. 33760
    52. :ur 0
    53.  
    54. 33656
    55. :ur 0
    56.  
    57. 33552
    58. :ur 0
    59.  
    60. 33448
    61. :ur 0
    62.  
    63. 33344
    64. :ur 0
    65.  
    66. 33240
    67. :ur 0
    68.  
    69. 33136
    70. :ur 0
    71.  
    72. 33032
    73. :ur 0
    74.  
    75. 32928
    76. :ur 0
    77.  
    78. 32824
    79. :ur 0
    80.  
    81. 32720
    82. :ur 0
    83.  
    84. 32616
    85. :ur 0
    86.  
    87. 32512
    88. :ur 0
    89.  
    90. 32408
    91. :ur 0
    92.  
    93. 32304
    94. :ur 0
    95.  
    96. 32200
    97. :ur 0
    98.  
    99. 32096
    100.  
    101. ////   Конец с куском следующего начала )))
    102. 2736
    103. :ur 0
    104.  
    105. 2632
    106. :ur 0
    107.  
    108. 2528
    109. :ur 0
    110.  
    111. 2424
    112. :ur 0
    113.  
    114. 2320
    115. :ur 0
    116.  
    117. 2216
    118. :ur 0
    119.  
    120. 2112
    121. :ur 0
    122.  
    123. 2008
    124. :ur 0
    125.  
    126. 1904
    127. :ur 0
    128.  
    129. 1800
    130. :ur 0
    131.  
    132. 1696
    133. :ur 0
    134.  
    135. 1592
    136. :ur 0
    137.  
    138. 1488
    139. :ur 0
    140.  
    141. 1384
    142. :ur 0
    143.  
    144. 1280
    145. :ur 0
    146.  
    147. 1176
    148. :ur 0
    149.  
    150. No heap available, failed to malloc 1152
    151. Fatal exception (28):
    152. epc1=0x402415e2, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000008, depc=0x00000000
    153. del if0
    154. usl
    155. sul 3 0
    156.  
    157.  ets Jan  8 2013,rst cause:4, boot mode:(3,0)
    158.  
    159. wdt reset
    160. load 0x40100000, len 31668, room 16
    161. tail 4
    162. chksum 0xaa
    163. load 0x3ffe8000, len 1548, room 4
    164. tail 8
    165. chksum 0x57
    166. load 0x3ffe8610, len 2476, room 0
    167. tail 12
    168. chksum 0x62
    169. csum 0x62
    170. rяBEGINING
    171. scandone
    172. Attempting to connect to SSID: TP-LINK_7D9E32
    173. scandone
    174. add 0
    175. aid 10
    176. pm open phy_2,type:2 0 0
    177. cnt
    178.  
    179. connected with TP-LINK_7D9E32, channel 6
    180. dhcp client start...
    181. Attempting to connect to SSID: TP-LINK_7D9E32
    182. Attempting to connect to SSID: TP-LINK_7D9E32
    183. ip:192.168.100.18,mask:255.255.255.0,gw:192.168.100.1
    184. Connected to wifi
    185. SSID: TP-LINK_7D9E32
    186. IP Address: 192.168.100.18
    187. :ur 0
    188.  
    189. 34816
    190. :ur 0
    191.  
    192. 34696
    193. :ur 0
    194.  
    195. 34592
    196. :ur 0
    197.  
    198. 34488
    199. :ur 0
    200.  
    201. 34384
    202. :ur 0
    203.  
    204. 34280
    205. :ur 0
    206.  
    207. 34176
    208. :ur 0
    209.  
    210. 34072
    211. :ur 0
    212.  
    213.  
    214.  
     
  12. SamGold

    SamGold Новичок

    Сообщения:
    43
    Симпатии:
    4
    Прошу прощения что прерываю, было бы неплохо сделать еще и x32 версию для Linux, буду очень благодарен!
     
  13. igrr

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

    Сообщения:
    70
    Симпатии:
    23
    @bolwoi да, баг — забыл про счетчик ссылок. Надо отрефакторить, чтобы в следующий раз не наступить на грабли.
    У меня нет сейчас возможности проверить на esp, попробуйте пожалуйста применить у себя следующий патч:
    Раскрыть Спойлер

    Код (Text):
    1.  
    2. diff --git a/hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/WiFiUdp.cpp b/hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/WiFiUdp.cpp
    3. index 96928f2..7853865 100644
    4. --- a/hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/WiFiUdp.cpp
    5. +++ b/hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/WiFiUdp.cpp
    6. @@ -68,9 +68,11 @@ uint8_t WiFiUDP::begin(uint16_t port)
    7.  {
    8.      if (_ctx) {
    9.          _ctx->unref();
    10. +        _ctx = 0;
    11.      }
    12.  
    13.      _ctx = new UdpContext;
    14. +    _ctx->ref();
    15.      ip_addr_t addr;
    16.      addr.addr = INADDR_ANY;
    17.      return (_ctx->listen(addr, port)) ? 1 : 0;
    18. @@ -93,7 +95,7 @@ uint8_t WiFiUDP::beginMulticast(IPAddress interfaceAddr, IPAddress multicast, ui
    19.      }
    20.  
    21.      _ctx = new UdpContext;
    22. -    
    23. +    _ctx->ref();
    24.      if (!_ctx->listen(*IP_ADDR_ANY, port)) {
    25.          return 0;
    26.      }
    27. @@ -135,6 +137,7 @@ int WiFiUDP::beginPacket(IPAddress ip, uint16_t port)
    28.  
    29.      if (!_ctx)
    30.          _ctx = new UdpContext;
    31. +    _ctx->ref();
    32.      return (_ctx->connect(addr, port)) ? 1 : 0;
    33.  }
    34.  


    Если поможет — закоммичу.
    Спасибо.
     
    JustACat нравится это.
  14. bolwoi

    bolwoi Читатель

    Сообщения:
    18
    Симпатии:
    5
    А как применить патч?
     
  15. igrr

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

    Сообщения:
    70
    Симпатии:
    23
    А, пардон, у вас версия не из гита. Тогда просто в hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/WiFiUdp.cpp в районе 136 строки исправьте:
    Код (Text):
    1.  
    2.     if (!_ctx) {
    3.         _ctx = new UdpContext;
    4.         _ctx->ref();
    5.     }
    Спасибо.
     
  16. bolwoi

    bolwoi Читатель

    Сообщения:
    18
    Симпатии:
    5
    У меня там вот что имеется в этом районе. Боюсь промахнуться ))).
    Код (Text):
    1.  
    2. int WiFiUDP::beginPacket(IPAddress ip, uint16_t port)
    3. {
    4.     ip_addr_t addr;
    5.     addr.addr = ip;
    6.  
    7.     if (_ctx)
    8.         _ctx->unref();
    9.     _ctx = new UdpContext;
    10.     return (_ctx->connect(addr, port)) ? 1 : 0;
    11. }
    12.  
    Подскажите (ткните) конкретнее (сильнее). )))
     
  17. igrr

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

    Сообщения:
    70
    Симпатии:
    23
    @bolwoi ой, у вас версия без недавних фиксов. Возьмите вот файлы целиком.
     

    Вложения:

  18. bolwoi

    bolwoi Читатель

    Сообщения:
    18
    Симпатии:
    5
    Он мне ошибку компиляции заявляет:
    Код (Text):
    1.  
    2. C:\arduino-1.6.1_new\hardware\esp8266com\esp8266\libraries\ESP8266WiFi\src\WiFiUdp.cpp: In member function 'uint16_t WiFiUDP::localPort()':
    3. C:\arduino-1.6.1_new\hardware\esp8266com\esp8266\libraries\ESP8266WiFi\src\WiFiUdp.cpp:237:18: error: 'class UdpContext' has no member named 'getLocalPort'
    4.      return _ctx->getLocalPort();
    5.                   ^
    6. Ошибка компиляции.
    7.  
    А где взять версию с недавними фиксиками? :)
    Я отсюда брал https://ci.appveyor.com/api/buildjo...facts/build/windows/arduino-1.6.1-windows.zip
     
  19. igrr

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

    Сообщения:
    70
    Симпатии:
    23
  20. bolwoi

    bolwoi Читатель

    Сообщения:
    18
    Симпатии:
    5
    Запор прошел ))). Выливает пакеты на раз.
    Теперь с приемом аналогично буду пробовать тормошить и со сборками разбираться.
    Огроменное спасибо.
     
    JustACat и Victor нравится это.

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