Forum: Mikrocontroller und Digitale Elektronik ESP32 führt immer reset aus


von Johannes (Gast)


Lesenswert?

Hallo,
ich habe ein ESP32 mit dem ich mich mit meinem Router verbinden möchte 
und später über NTP die Uhrzeit abfragen möchte.

Mit meinem Router kann ich mich verbinden und bekomme auch eine IP 
adresse, allerdings resettet sich der ESP immer
1
static void event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data)
2
{
3
  static const char *TAG = "event handler";
4
  if(WIFI_EVENT == event_base)
5
  {
6
    if(WIFI_EVENT_WIFI_READY == event_id)
7
    {
8
      ESP_LOGI(TAG, "WIFI_EVENT_WIFI_READY");
9
    }
10
    else if(WIFI_EVENT_SCAN_DONE == event_id)
11
    {
12
      ESP_LOGI(TAG, "WIFI_EVENT_SCAN_DONE");
13
    }
14
    else if(WIFI_EVENT_STA_START == event_id)
15
    {
16
      ESP_LOGI(TAG, "WIFI_EVENT_STA_START");
17
      esp_wifi_connect();
18
    }
19
    else if(WIFI_EVENT_STA_STOP == event_id)
20
    {
21
      ESP_LOGI(TAG, "WIFI_EVENT_STA_STOP");
22
    }
23
    else if(WIFI_EVENT_STA_CONNECTED == event_id)
24
    {
25
      ESP_LOGI(TAG, "WIFI_EVENT_STA_CONNECTED");
26
    }
27
    else if(WIFI_EVENT_STA_DISCONNECTED == event_id)
28
    {
29
      ESP_LOGI(TAG, "WIFI_EVENT_STA_DISCONNECTED");
30
      if(sRetryNum < WIFI_CONFIG_MAX_RETRY)
31
      {
32
        esp_wifi_connect();
33
        sRetryNum++;
34
        ESP_LOGI(TAG, "retry to connect to the AP");
35
      }
36
      else
37
      {
38
        xEventGroupSetBits(wifiEventGroup, WIFI_FAIL_BIT);
39
      }
40
            
41
      ESP_LOGI(TAG,"connect to the AP fail");
42
    }
43
    else if(WIFI_EVENT_STA_AUTHMODE_CHANGE == event_id)
44
    {
45
      ESP_LOGI(TAG, "WIFI_EVENT_STA_AUTHMODOE_CHANGE");
46
    }
47
    else if(WIFI_EVENT_STA_WPS_ER_SUCCESS == event_id)
48
    {
49
      ESP_LOGI(TAG, "WIFI_EVENT_STA_WPS_ER_SUCCESS");
50
    }
51
    else if(WIFI_EVENT_STA_WPS_ER_FAILED == event_id)
52
    {
53
      ESP_LOGI(TAG, "WIFI_EVENT_STA_WPS_ER_FAILED");
54
    }
55
    else if(WIFI_EVENT_STA_WPS_ER_TIMEOUT == event_id)
56
    {
57
      ESP_LOGI(TAG, "WIFI_EVENT_STA_WPS_ER_TIMEOUT");
58
    }
59
    else if(WIFI_EVENT_STA_WPS_ER_PIN == event_id)
60
    {
61
      ESP_LOGI(TAG, "WIFI_EVENT_STA_WPS_ER_PIN");
62
    }
63
  }
64
  else if(IP_EVENT == event_base)
65
  {
66
    if(IP_EVENT_STA_GOT_IP == event_id)
67
    {
68
      ESP_LOGI(TAG, "IP_EVENT_STA_GOT_IP");
69
      ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;
70
      ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip));
71
      sRetryNum = 0;
72
      xEventGroupSetBits(wifiEventGroup, IP_CONNECTED_BIT);
73
      setWifiState(1);
74
    }
75
    else if(IP_EVENT_GOT_IP6 == event_id)
76
    {
77
      ESP_LOGI(TAG, "IP_EVENT_GOT_IP6");
78
    }
79
    else if(IP_EVENT_STA_LOST_IP == event_id)
80
    {
81
      ESP_LOGI(TAG, "IP_EVENT_STA_LOST_IP");
82
    }
83
  }
84
}
85
86
87
static void wifiTask(void * pvParameters)
88
{
89
  static const char *TAG = "wifi station";
90
  ESP_LOGI(TAG, "start wifiTask");
91
  wifiEventGroup = xEventGroupCreate();
92
93
  /* ======= Wi-Fi/LwIP Init Phase  ======= */
94
  ESP_ERROR_CHECK(esp_netif_init());
95
  ESP_ERROR_CHECK(esp_event_loop_create_default());
96
  esp_netif_create_default_wifi_sta();
97
98
  wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
99
  ESP_ERROR_CHECK(esp_wifi_init(&cfg));
100
  /* ======= End Wi-Fi/LwIP Init Phase  ======= */
101
102
  esp_event_handler_instance_t instance_any_id;
103
  esp_event_handler_instance_t instance_any_base;
104
  ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,
105
    ESP_EVENT_ANY_ID,
106
    &event_handler,
107
    NULL,
108
    &instance_any_id));
109
  ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT,
110
    ESP_EVENT_ANY_BASE,
111
    &event_handler,
112
    NULL,
113
    &instance_any_base));
114
115
  wifi_config_t wifi_config = {
116
    .sta = {
117
      .ssid = WIFI_CONFIG_SSID,
118
      .password = WIFI_CONFIG_PASS,
119
      .threshold.authmode = WIFI_AUTH_WPA2_PSK,
120
121
      .pmf_cfg = {
122
        .capable = true,
123
        .required = false
124
      },
125
    },
126
  };
127
128
  /* ======= Wi-Fi Configuration Phase ======= */
129
  ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) );
130
  ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) );
131
  /* ======= End Wi-Fi Configuration Phase ======= */
132
133
  /* ======= Wi-Fi Start Phase ======= */
134
  ESP_ERROR_CHECK(esp_wifi_start() );
135
136
  ESP_LOGI(TAG, "wifi_init_sta finished.");
137
138
  while(1)
139
  {
140
    EventBits_t bits = xEventGroupWaitBits(
141
      wifiEventGroup,
142
      IP_CONNECTED_BIT | WIFI_FAIL_BIT,
143
      pdFALSE,                            
144
      pdFALSE,
145
      portMAX_DELAY);
146
147
    if(bits & IP_CONNECTED_BIT)
148
    {
149
      ESP_LOGI(TAG, "connected to ap SSID:%s password:%s", WIFI_CONFIG_SSID, WIFI_CONFIG_PASS);
150
    }
151
    else if(bits & WIFI_FAIL_BIT)
152
    {
153
      ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s", WIFI_CONFIG_SSID, WIFI_CONFIG_PASS);
154
    }
155
    else
156
    {
157
      ESP_LOGE(TAG, "UNEXPECTED EVENT");
158
    }
159
    vEventGroupDelete(wifiEventGroup);
160
  }
161
  ESP_ERROR_CHECK(esp_event_handler_instance_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, instance_any_id));
162
}
163
164
void initWifiTask(void)
165
{
166
  xTaskCreate(wifiTask, "wifiTask", 16000, (void*)1, tskIDLE_PRIORITY, NULL);
167
}

Log:
1
ELF file SHA256: 8a4bae0599313399
2
3
Rebooting...
4
ets Jun  8 2016 00:22:57
5
6
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
7
configsip: 0, SPIWP:0xee
8
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
9
mode:DIO, clock div:2
10
load:0x3fff0030,len:6608
11
load:0x40078000,len:14788
12
ho 0 tail 12 room 4
13
load:0x40080400,len:3792
14
0x40080400: _init at ??:?
15
16
entry 0x40080694
17
I (29) boot: ESP-IDF v4.4.1 2nd stage bootloader
18
I (29) boot: compile time 16:40:24
19
I (29) boot: chip revision: 1
20
I (32) boot_comm: chip revision: 1, min. bootloader chip revision: 0
21
I (39) boot.esp32: SPI Speed      : 40MHz
22
I (43) boot.esp32: SPI Mode       : DIO
23
I (48) boot.esp32: SPI Flash Size : 2MB
24
I (52) boot: Enabling RNG early entropy source...
25
I (58) boot: Partition Table:
26
I (61) boot: ## Label            Usage          Type ST Offset   Length
27
I (69) boot:  0 nvs              WiFi data        01 02 00009000 00006000
28
I (76) boot:  1 phy_init         RF data          01 01 0000f000 00001000
29
I (84) boot:  2 factory          factory app      00 00 00010000 00100000
30
I (91) boot: End of partition table
31
I (95) boot_comm: chip revision: 1, min. application chip revision: 0
32
I (102) esp_image: segment 0: paddr=00010020 vaddr=3f400020 size=137d8h ( 79832) map
33
I (140) esp_image: segment 1: paddr=00023800 vaddr=3ffb0000 size=03804h ( 14340) load
34
I (146) esp_image: segment 2: paddr=0002700c vaddr=40080000 size=0900ch ( 36876) load
35
I (161) esp_image: segment 3: paddr=00030020 vaddr=400d0020 size=6d5ech (447980) map
36
I (324) esp_image: segment 4: paddr=0009d614 vaddr=4008900c size=0b318h ( 45848) load
37
I (343) esp_image: segment 5: paddr=000a8934 vaddr=50000000 size=00010h (    16) load
38
I (353) boot: Loaded app from partition at offset 0x10000
39
I (353) boot: Disabling RNG early entropy source...
40
I (365) cpu_start: Pro cpu up.
41
I (365) cpu_start: Starting app cpu, entry point is 0x40081184
42
0x40081184: call_start_cpu1 at C:/Espressif/frameworks/esp-idf-v4.4.1/components/esp_system/port/cpu_start.c:160
43
44
I (351) cpu_start: App cpu up.
45
I (379) cpu_start: Pro cpu start user code
46
I (380) cpu_start: cpu freq: 160000000
47
I (380) cpu_start: Application information:
48
I (384) cpu_start: Project name:     network_time_protocol
49
I (390) cpu_start: App version:      cfe213f-dirty
50
I (396) cpu_start: Compile time:     Jul  5 2022 16:39:35
51
I (402) cpu_start: ELF file SHA256:  8a4bae0599313399...
52
I (408) cpu_start: ESP-IDF:          v4.4.1
53
I (413) heap_init: Initializing. RAM available for dynamic allocation:
54
I (420) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
55
I (426) heap_init: At 3FFB74A8 len 00028B58 (162 KiB): DRAM
56
I (432) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
57
I (438) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
58
I (445) heap_init: At 40094324 len 0000BCDC (47 KiB): IRAM
59
I (452) spi_flash: detected chip: generic
60
I (456) spi_flash: flash io: dio
61
W (460) spi_flash: Detected size(4096k) larger than the size in the binary image header(2048k). Using the size in the binary image header.
62
I (474) cpu_start: Starting scheduler on PRO CPU.
63
I (0) cpu_start: Starting scheduler on APP CPU.
64
I (484) main: Starting program
65
I (534) main: Done nvs_flash_init
66
I (534) main: Starting Tasks
67
I (544) wifi station: start wifiTask
68
I (574) wifi:wifi driver task: 3ffc6104, prio:23, stack:6656, core=0
69
I (574) system_api: Base MAC address is not set
70
I (574) system_api: read default base MAC address from EFUSE
71
I (604) wifi:wifi firmware version: 63017e0
72
I (604) wifi:wifi certification version: v7.0
73
I (604) wifi:config NVS flash: enabled
74
I (604) wifi:config nano formating: disabled
75
I (604) wifi:Init data frame dynamic rx buffer num: 32
76
I (614) wifi:Init management frame dynamic rx buffer num: 32
77
I (614) wifi:Init management short buffer num: 32
78
I (624) wifi:Init dynamic tx buffer num: 32
79
I (624) wifi:Init static rx buffer size: 1600
80
I (624) wifi:Init static rx buffer num: 10
81
I (634) wifi:Init dynamic rx buffer num: 32
82
I (644) wifi_init: rx ba win: 6
83
I (644) wifi_init: tcpip mbox: 32
84
I (644) wifi_init: udp mbox: 6
85
I (644) wifi_init: tcp mbox: 6
86
I (654) wifi_init: tcp tx win: 5744
87
I (654) wifi_init: tcp rx win: 5744
88
I (664) wifi_init: tcp mss: 1440
89
I (664) wifi_init: WiFi IRAM OP enabled
90
I (674) wifi_init: WiFi RX IRAM OP enabled
91
I (694) phy_init: phy_version 4670,719f9f6,Feb 18 2021,17:07:07
92
I (794) wifi:mode : sta (24:62:ab:e0:1b:c0)
93
I (794) wifi:enable tsf
94
I (794) event handler: WIFI_EVENT_STA_START
95
I (794) wifi station: wifi_init_sta finished.
96
I (804) wifi:new:<1,1>, old:<1,0>, ap:<255,255>, sta:<1,1>, prof:1
97
I (804) wifi:state: init -> auth (b0)
98
I (814) wifi:state: auth -> assoc (0)
99
I (824) wifi:state: assoc -> run (10)
100
I (834) wifi:connected with FRITZ!Box Fon WLAN 7360, aid = 5, channel 1, 40U, bssid = 9c:c7:a6:ef:08:93
101
I (834) wifi:security: WPA2-PSK, phy: bgn, rssi: -49
102
I (844) wifi:pm start, type: 1
103
104
I (844) event handler: WIFI_EVENT_STA_CONNECTED
105
I (934) wifi:AP's beacon interval = 102400 us, DTIM period = 1
106
W (1044) wifi:<ba-add>idx:0 (ifx:0, 9c:c7:a6:ef:08:93), tid:0, ssn:0, winSize:64
107
I (3044) esp_netif_handlers: sta ip: 192.168.10.38, mask: 255.255.255.0, gw: 192.168.10.1
108
I (3044) event handler: IP_EVENT_STA_GOT_IP
109
I (3044) event handler: got ip:192.168.10.38
110
I (3064) wifi station: connected to ap SSID:FRITZ!Box Fon WLAN 7360 password:
111
112
assert failed: spinlock_acquire spinlock.h:123 ((result == SPINLOCK_FREE) == (lock->count == 0))
113
114
115
Backtrace:0x400819f2:0x3ffc13100x400883b9:0x3ffc1330 0x4008ef25:0x3ffc1350 0x4008b725:0x3ffc1470 0x4008b26d:0x3ffc1490 0x400d5ed4:0x3ffc14c0 0x4008b545:0x3ffc1650
116
0x400819f2: panic_abort at C:/Espressif/frameworks/esp-idf-v4.4.1/components/esp_system/panic.c:402
117
118
0x400883b9: esp_system_abort at C:/Espressif/frameworks/esp-idf-v4.4.1/components/esp_system/esp_system.c:128
119
120
0x4008ef25: __assert_func at C:/Espressif/frameworks/esp-idf-v4.4.1/components/newlib/assert.c:85
121
122
0x4008b725: spinlock_acquire at C:/Espressif/frameworks/esp-idf-v4.4.1/components/esp_hw_support/include/soc/spinlock.h:123
123
 (inlined by) xPortEnterCriticalTimeout at C:/Espressif/frameworks/esp-idf-v4.4.1/components/freertos/port/xtensa/port.c:288
124
125
0x4008b26d: vPortEnterCritical at C:/Espressif/frameworks/esp-idf-v4.4.1/components/freertos/port/xtensa/include/freertos/portmacro.h:578
126
 (inlined by) xEventGroupWaitBits at C:/Espressif/frameworks/esp-idf-v4.4.1/components/freertos/event_groups.c:379
127
128
0x400d5ed4: wifiTask at h:\projects\c\esp\esp32\ntp\build/../main/wifi.c:185 (discriminator 15)
129
130
0x4008b545: vPortTaskWrapper at C:/Espressif/frameworks/esp-idf-v4.4.1/components/freertos/port/xtensa/port.c:131

am schluss steht dort
0x400d5ed4: wifiTask at 
h:\projects\c\esp\esp32\ntp\build/../main/wifi.c:185 (discriminator 15)
das ist das xEventGroupWaitBits

woran kann das liegen, dass der immer resettet?

von uff basse (Gast)


Lesenswert?

Johannes schrieb:
> woran kann das liegen, dass der immer resettet?

Fuck!
Kannst du lesen, verstehen und umsetzen?

>>Wichtige Regeln - erst lesen, dann posten!
>>
>>..........
>>    Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

von Flip B. (frickelfreak)


Lesenswert?

Johannes schrieb:
> while(1)
>   {
>     EventBits_t bits = xEventGroupWaitBits(
>       wifiEventGroup,...)
>      ....
>     vEventGroupDelete(wifiEventGroup);
>   }

zum finden solcher patzer hilft normal, teile des programms zu 
deaktivieren, oder gleich den debugger nehmen.

: Bearbeitet durch User
von Johannes (Gast)


Lesenswert?

uff basse schrieb:
> Fuck!
> Kannst du lesen, verstehen und umsetzen?
>
>>>Wichtige Regeln - erst lesen, dann posten!
>>>
>>>..........
>>>    Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

ja, du / der der die regeln erstellt hat, habt recht.
Es war doch ein bisschen lang.

Flip B. schrieb:
> zum finden solcher patzer hilft normal, teile des programms zu
> deaktivieren, oder gleich den debugger nehmen.

ich wusste nicht wirklich wonach ich suchen sollte, da es beim ersten 
mal (und auch nur beim ersten mal) ja funktioniert hat.

Aber danke für den hinweis. Konnte den Fehler dann doch schnell finden.

Flip B. schrieb:
> vEventGroupDelete(wifiEventGroup);

ist natürlich doof, wenn man die EventGroup löscht und dann trotzdem 
noch was setzt.
mit vEventGroupClearBits passt das dann, damit nur das Bit gelöscht 
wird.

Du hast geschriben, den debugger nehmen.
Wie kann ich den denn debuggen? ich habe den ESP32 auf einem NodeMCU.
kannst du mir ein stichwort geben, wonach ich gucken muss um debuggen zu 
können? Hilfreich wäre es manchmal schon.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.