MakerGram Logo

    MakerGram

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Popular
    • Tags
    • Users
    • Groups

    cJson Library error in ESP-IDF

    Development Boards
    2
    5
    2223
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • rafitc99
      rafitc99 last edited by rafitc99

      I'm trying to parse Json using cJson Library
      But getting error Core 0 register dump: and the microcontroller is resetting.
      I'm using ESP8266 and its on SDK for writing firmware. (ESP-IDF)

      Below I'm adding complete error log and code.

      In below code this part is causing for this error and reset

              json = cJSON_Parse(version);
              out = cJSON_Print(json);
              cJSON_Delete(json);
              printf("%s\n", out);
              free(out);
      
      I (10824) example: ... socket send success
      I (10828) example: ... set socket receiving timeout success
      I (11234) example: JSon Parser calling
      Guru Meditation Error: Core  0 panic'ed (LoadProhibited). Exception was unhandled.
      Core 0 register dump:
      PC      : 0x4000bf80  PS      : 0x00000030  A0      : 0x4022f684  A1      : 0x3fff70e0  
      0x4022f684: _puts_r at /home/dongheng/workspace/espressif/newlib_xtensa-2.2.0-bin/newlib_xtensa-2.2.0/xtensa-lx106-elf/newlib/libc/stdio/../../../.././newlib/libc/stdio/puts.c:90
      
      A2      : 0x00000000  A3      : 0xfffffffc  A4      : 0x000000ff  A5      : 0x0000ff00  
      A6      : 0x00ff0000  A7      : 0xff000000  A8      : 0x401078a0  A9      : 0x0000010c  
      A10     : 0x402559f0  A11     : 0x50545448  A12     : 0x00000000  A13     : 0x40106458  
      A14     : 0x00000000  A15     : 0x3ffeaaf8  SAR     : 0x0000001d  EXCCAUSE: 0x0000001c  
      
      Backtrace: 0x4000bf80:0x3fff70e0 0x4022f684:0x3fff70e0 0x4022f724:0x3fff7110 0x4022dc31:0x3fff7120 
      0x4022f684: _puts_r at /home/dongheng/workspace/espressif/newlib_xtensa-2.2.0-bin/newlib_xtensa-2.2.0/xtensa-lx106-elf/newlib/libc/stdio/../../../.././newlib/libc/stdio/puts.c:90
      
      0x4022f724: puts at /home/dongheng/workspace/espressif/newlib_xtensa-2.2.0-bin/newlib_xtensa-2.2.0/xtensa-lx106-elf/newlib/libc/stdio/../../../.././newlib/libc/stdio/puts.c:139
      
      0x4022dc31: http_get_task at /Users/rafi/Desktop/hawk/ESP8266_RTOS_SDK/examples/protocols/http_request/main/http_request_example_main.c:208
      
      @?Z-nP?M
              'γ?	%[
                        )Q
      ?O??T5??)?))??e5??
                        ?L?C?
      	I?TZ
                  ??TR?enB?[
      	??Q
                ?ؚ?P9?)?N9?Ɇ	)dг	5?P
      NRA?)ڻ^?)?N9?B??JA?
                         %Y.??+????D	W?	??ZQH???~?N??))GD?@
                                                                %Y.?^Z1O????Eؓ?  PF???J[	!d?TP?HP'i
                                        3mʉOC??JC?%YB7օ+k?))GD?@5
                                                                %Y	J+?1mG?A??JA?
      %?                   %^u@?
      5%ʃ?E???J	M
                       %
                        ƣ??[?P?TQ+E???J	
                                              %
                                               ??C?T?nV??@
                                                          -??\)DV?Q?NX????
               %[
                 -Z?IP?L
      ?E?)??JCB??q!
      1iGq?P#??
      %??MC??JA@!%Y%.?M%,?i
                           !XG?)!Eؑ?  h?
                                       %^u???	1?Ls?Y?P??Q?A??J	?
                                                                #??C?5dԵ1?LT?P?????????m
                             \?]eFL?))E???J	?D????5l?V?1NT?
                                                             PE??M????@P?\9'??
                   +??+)GD?@?F@J??I?7?n
                                       9)5NT?,R?e7??E@@)IJ?+
      YЛ?     ?EBH??A?Z5dֵ?LT??G?1?1??mP#?EFB?CH?)!Eؑ? `n
                                                       #???7nʋ?1DT?
      ? XU?MTՋ9E??5????@
       )R}?OC??JC%YY?V?P%?1?LL[
                               !?ֳ\ZQ?N?I (306) system_api: Base MAC address is not set, read default base MAC address from EFUSE
      I (312) system_api: Base MAC address is not 
      

      /* HTTP GET Example using plain POSIX sockets
      
         This example code is in the Public Domain (or CC0 licensed, at your option.)
      
         Unless required by applicable law or agreed to in writing, this
         software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
         CONDITIONS OF ANY KIND, either express or implied.
      */
      
      #include <string.h>
      
      #include "freertos/FreeRTOS.h"
      #include "freertos/task.h"
      #include "freertos/event_groups.h"
      
      #include "esp_wifi.h"
      #include "esp_event_loop.h"
      #include "esp_log.h"
      
      #include "nvs_flash.h"
      
      #include <netdb.h>
      #include <sys/socket.h>
      #include "cJSON.h"
      
      /* The examples use simple WiFi configuration that you can set via
         'make menuconfig'.
      
         If you'd rather not, just change the below entries to strings with
         the config you want - ie #define EXAMPLE_WIFI_SSID "mywifissid"
      */
      #define EXAMPLE_WIFI_SSID CONFIG_WIFI_SSID
      #define EXAMPLE_WIFI_PASS CONFIG_WIFI_PASSWORD
      
      /* FreeRTOS event group to signal when we are connected & ready to make a request */
      static EventGroupHandle_t wifi_event_group;
      
      /* The event group allows multiple bits for each event,
         but we only care about one event - are we connected
         to the AP with an IP? */
      const int CONNECTED_BIT = BIT0;
      
      /* Constants that aren't configurable in menuconfig */
      #define WEB_SERVER "hawk-ota.herokuapp.com"
      #define WEB_PORT 80
      #define WEB_URL "http://hawk-ota.herokuapp.com/api/get-json"
      
      static const char *TAG = "example";
      
      static const char *REQUEST = "GET " WEB_URL " HTTP/1.0\r\n"
          "Host: "WEB_SERVER"\r\n"
          "User-Agent: esp-idf/1.0 esp32\r\n"
          "\r\n";
      char version[50];
      char *out;
      cJSON *json;
      /*
      void Parse_Json(char *text)
      {
          
          if (!json) {
              printf("Error before: [%s]\n", cJSON_GetErrorPtr());
          } else {
              out = cJSON_Print(json);
              cJSON_Delete(json);
              ESP_LOGI(TAG,"\n here");
              puts(out);
              free(out);
          }
      }*/
      static esp_err_t event_handler(void *ctx, system_event_t *event)
      {
          /* For accessing reason codes in case of disconnection */
          system_event_info_t *info = &event->event_info;
      
          switch(event->event_id) {
          case SYSTEM_EVENT_STA_START:
              esp_wifi_connect();
              break;
          case SYSTEM_EVENT_STA_GOT_IP:
              xEventGroupSetBits(wifi_event_group, CONNECTED_BIT);
              break;
          case SYSTEM_EVENT_STA_DISCONNECTED:
              ESP_LOGE(TAG, "Disconnect reason : %d", info->disconnected.reason);
              if (info->disconnected.reason == WIFI_REASON_BASIC_RATE_NOT_SUPPORT) {
                  /*Switch to 802.11 bgn mode */
                  esp_wifi_set_protocol(ESP_IF_WIFI_STA, WIFI_PROTOCOL_11B | WIFI_PROTOCOL_11G | WIFI_PROTOCOL_11N);
              }
              esp_wifi_connect();
              xEventGroupClearBits(wifi_event_group, CONNECTED_BIT);
              break;
          default:
              break;
          }
          return ESP_OK;
      }
      
      static void initialise_wifi(void)
      {
          tcpip_adapter_init();
          wifi_event_group = xEventGroupCreate();
          ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) );
          wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
          ESP_ERROR_CHECK( esp_wifi_init(&cfg) );
          ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM) );
          wifi_config_t wifi_config = {
              .sta = {
                  .ssid = EXAMPLE_WIFI_SSID,
                  .password = EXAMPLE_WIFI_PASS,
              },
          };
          ESP_LOGI(TAG, "Setting WiFi configuration SSID %s...", wifi_config.sta.ssid);
          ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) );
          ESP_ERROR_CHECK( esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) );
          ESP_ERROR_CHECK( esp_wifi_start() );
      }
      
      static void http_get_task(void *pvParameters)
      {
          const struct addrinfo hints = {
              .ai_family = AF_INET,
              .ai_socktype = SOCK_STREAM,
          };
          struct addrinfo *res;
          struct in_addr *addr;
          int s, r, j = 0;
          char recv_buf[64];
      
          while(1) {
              /* Wait for the callback to set the CONNECTED_BIT in the
                 event group.
              */
              xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT,
                                  false, true, portMAX_DELAY);
              ESP_LOGI(TAG, "Connected to AP");
      
              int err = getaddrinfo(WEB_SERVER, "80", &hints, &res);
      
              if(err != 0 || res == NULL) {
                  ESP_LOGE(TAG, "DNS lookup failed err=%d res=%p", err, res);
                  vTaskDelay(1000 / portTICK_PERIOD_MS);
                  continue;
              }
      
              /* Code to print the resolved IP.
      
                 Note: inet_ntoa is non-reentrant, look at ipaddr_ntoa_r for "real" code */
              addr = &((struct sockaddr_in *)res->ai_addr)->sin_addr;
              ESP_LOGI(TAG, "DNS lookup succeeded. IP=%s", inet_ntoa(*addr));
      
              s = socket(res->ai_family, res->ai_socktype, 0);
              if(s < 0) {
                  ESP_LOGE(TAG, "... Failed to allocate socket.");
                  freeaddrinfo(res);
                  vTaskDelay(1000 / portTICK_PERIOD_MS);
                  continue;
              }
              ESP_LOGI(TAG, "... allocated socket");
      
              if(connect(s, res->ai_addr, res->ai_addrlen) != 0) {
                  ESP_LOGE(TAG, "... socket connect failed errno=%d", errno);
                  close(s);
                  freeaddrinfo(res);
                  vTaskDelay(4000 / portTICK_PERIOD_MS);
                  continue;
              }
      
              ESP_LOGI(TAG, "... connected");
              freeaddrinfo(res);
      
              if (write(s, REQUEST, strlen(REQUEST)) < 0) {
                  ESP_LOGE(TAG, "... socket send failed");
                  close(s);
                  vTaskDelay(4000 / portTICK_PERIOD_MS);
                  continue;
              }
              ESP_LOGI(TAG, "... socket send success");
      
              struct timeval receiving_timeout;
              receiving_timeout.tv_sec = 5;
              receiving_timeout.tv_usec = 0;
              if (setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &receiving_timeout,
                      sizeof(receiving_timeout)) < 0) {
                  ESP_LOGE(TAG, "... failed to set socket receiving timeout");
                  close(s);
                  vTaskDelay(4000 / portTICK_PERIOD_MS);
                  continue;
              }
              ESP_LOGI(TAG, "... set socket receiving timeout success");
      
              /* Read HTTP response */
              do {
                  bzero(recv_buf, sizeof(recv_buf));
                  r = read(s, recv_buf, sizeof(recv_buf)-1);
                  
                  for(int i = 0; i < r; i++) {
                      //putchar(recv_buf[i]);
                      version[j++] = recv_buf[i];
                  }
              } while(r > 0);
              version[j++] = '\0';
              ESP_LOGI(TAG, "JSon Parser calling");
              
              json = cJSON_Parse(version);
              out = cJSON_Print(json);
              cJSON_Delete(json);
              printf("%s\n", out);
              free(out);
              j=0;
              ESP_LOGI(TAG, "... done reading from socket. Last read return=%d errno=%d\r\n", r, errno);
              close(s);
              for(int countdown = 10; countdown >= 0; countdown--) {
                  ESP_LOGI(TAG, "%d... ", countdown);
                  vTaskDelay(1000 / portTICK_PERIOD_MS);
              }
              ESP_LOGI(TAG, "Starting again!");
          }
      }
      
      
      
      
      void app_main()
      {
          ESP_ERROR_CHECK( nvs_flash_init() );
          initialise_wifi();
          xTaskCreate(&http_get_task, "http_get_task", 16384, NULL, 5, NULL);
      }
      ///Users/rafi/desktop/hawk/ESP8266_RTOS_SDK/examples/protocols/http_request
      
      1 Reply Last reply Reply Quote 0
      • salmanfaris
        salmanfaris last edited by

        @rafitc99 Are you able to fix this issue!

        rafitc99 1 Reply Last reply Reply Quote 0
        • rafitc99
          rafitc99 @salmanfaris last edited by

          @salmanfaris Yes. I fixed it. But no idea about the reason for this error.

          salmanfaris 1 Reply Last reply Reply Quote 0
          • salmanfaris
            salmanfaris @rafitc99 last edited by

            @rafitc99 How did you solved?

            rafitc99 1 Reply Last reply Reply Quote 0
            • rafitc99
              rafitc99 @salmanfaris last edited by

              @salmanfaris Actually I'm not sure what was that Core 0 register dump:
              But I parsed the JSON. Refer Here for cJSON example. But while working this one, faced another problem. HTTP response includes the whole headers, status code, and body. JSON parser only work if the whole response in the form of JSON. So, Initially stored all responses into a char buffer and cleaned all headers. By using if(response[i] == '{' ) and some flags.

              1 Reply Last reply Reply Quote 1
              • First post
                Last post

              Recent Posts

              • @Vishnuraj2003 Are you able to fix it?

                • read more
              • Hi @Vishnuraj2003 ,

                As per the documentation, I think we only route the data over the LoRa oR BT. The Wifi is used for sniffing access points for better geo-location and positioning along with GPS.

                And what is the issue you facing when connecting the tracker with gateway? Double check the FREQ on both node and gateway configuration

                • read more
              • I'm working with Seeed Studio's Wio Tracker 1110 Dev Board. According to Seeed Studio's documentation, we can use the Wi-Fi antenna inside the Wio Tracker to send data. However, when I used the Sensecraft app, it shows that the board is offline. I have tried connecting it to the Sensecap M2 Gateway but couldn't do it due to a lack of documentation. Please share any advice or resources that could help. Thank you.

                • read more
              • @binishmatheww All the best. Let us know if you need any help.

                • read more
              • @salmanfaris thanks a lot. 👍😁

                • read more
              By MakerGram | A XiStart Initiative | Built with ♥ NodeBB
              Copyright © 2023 MakerGram, All rights reserved.
              Privacy Policy | Terms & Conditions | Disclaimer | Code of Conduct