• Categories
  • Recent
  • Popular
  • Tags
  • Users
  • Groups
  • Register
  • Login
MakerGram Logo

MakerGram

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

cJson Library error in ESP-IDF

Development Boards
2
5
2.4k
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 10 Nov 2020, 11:06 10 Nov 2020, 11:05

    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 12 Nov 2020, 13:54

      @rafitc99 Are you able to fix this issue!

      rafitc99 1 Reply Last reply 12 Nov 2020, 14:19 Reply Quote 0
      • rafitc99
        rafitc99 @salmanfaris last edited by 12 Nov 2020, 14:19

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

        salmanfaris 1 Reply Last reply 13 Nov 2020, 06:18 Reply Quote 0
        • salmanfaris
          salmanfaris @rafitc99 last edited by 13 Nov 2020, 06:18

          @rafitc99 How did you solved?

          rafitc99 1 Reply Last reply 19 Nov 2020, 15:19 Reply Quote 0
          • rafitc99
            rafitc99 @salmanfaris last edited by 19 Nov 2020, 15:19

            @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
            2 out of 5
            • First post
              2/5
              Last post

            Recent Posts

            • @Vishnuraj2003 Are you able to fix it?

              27 Oct 2024, 08:12 • 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

              10 Aug 2024, 17:26 • 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.

              10 Aug 2024, 15:48 • read more
            • @binishmatheww All the best. Let us know if you need any help.

              3 Oct 2023, 14:37 • read more
            • @salmanfaris thanks a lot. 👍😁

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