ESP-TCP (1/34) --- ESP-IDF 下组 JSON 报文

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ustccw/article/details/78181045

Part 1 : 前言

ESP32 是一颗性能优越的 WiFi+BT/BLE 的物联网芯片。主要特性有: 1) 2.4 GHz Wi-Fi 加蓝牙双模芯片; 2) 采用 TSMC 低功耗 40nm 技术; 3)功耗性能和射频性能最佳; 4) 安全可靠,易于扩展至各种应用。
ESP32 集成了双核 160 MHz MCU、两个浮点运算单元 (FPU)、硬件安全加速器、电容触摸传感器、霍尔传感器、ADC、DAC、蓝牙/Wi-Fi 协议栈、TR 滤波器、双工器、功率放大器、接收低噪声放大器、射频 balun 和天线开关。ESP32 的外围器件不超过 10 个,即可实现强大的处理性能、可靠的安全性能,以及 Wi-Fi 和蓝牙功能。ESP32 可作为独立系统运行应用程序或是主机 MCU 的从设备,通过 SPI / SDIO 或 I2C / UART 接口提供 Wi-Fi 和蓝牙功能。ESP32 专为移动设备、可穿戴电子产品和物联网应用而设计。该款芯片拥有业内最高水平的低功耗芯片的所有特征,比如精细分辨时钟门控、省电模式和动态电压调整等。ESP32 集成了更多的元器件,性能稳定,易于制造,工作温度范围达到 -40°C 到 +125°C。ESP32 还集成了先进的自校准电路,实现了动态自动调整,可以消除外部电路的缺陷以及适应外部条件的变化。

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

JSON 具有体积小,跨平台,组织结构自由的天然优势。 标准的 CJSON 库不到 100KB, 相比于其他的交换格式, 如 XML 交换格式,体积则大的多。 JSON 具有跨平台的优势,只要支持 C99 标准的地方都可以支持 CJSON,同时 CJSON 组织内容很自由,根下面可以有任意个 Item ,每个 Item 又可以有任意个 Item, 可自由递归,自由拼接。相比于传统的 Web 端数据交换方式,具有天然优势。

Part 2 : 示例代码

/* combine JSON package Example

   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 "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "cJSON.h"
#include <string.h>

void test_json(void) {
    uint8_t json[512] = {0};

    cJSON *root = cJSON_CreateObject();
    cJSON *sensors = cJSON_CreateArray();
    cJSON *id1 = cJSON_CreateObject();
    cJSON *id2 = cJSON_CreateObject();
    cJSON *iNumber = cJSON_CreateNumber(10);

    cJSON_AddItemToObject(id1, "id", cJSON_CreateString("1"));
    cJSON_AddItemToObject(id1, "temperature1", cJSON_CreateString("23"));
    cJSON_AddItemToObject(id1, "temperature2", cJSON_CreateString("23"));
    cJSON_AddItemToObject(id1, "humidity", cJSON_CreateString("55"));
    cJSON_AddItemToObject(id1, "occupancy", cJSON_CreateString("1"));
    cJSON_AddItemToObject(id1, "illumination", cJSON_CreateString("23"));

    cJSON_AddItemToObject(id2, "id", cJSON_CreateString("2"));
    cJSON_AddItemToObject(id2, "temperature1", cJSON_CreateString("23"));
    cJSON_AddItemToObject(id2, "temperature2", cJSON_CreateString("23"));
    cJSON_AddItemToObject(id2, "humidity", cJSON_CreateString("55"));
    cJSON_AddItemToObject(id2, "occupancy", cJSON_CreateString("1"));
    cJSON_AddItemToObject(id2, "illumination", cJSON_CreateString("23"));

    cJSON_AddItemToObject(id2, "value", iNumber);

    cJSON_AddItemToArray(sensors, id1);
    cJSON_AddItemToArray(sensors, id2);

    cJSON_AddItemToObject(root, "sensors", sensors);
    char *str = cJSON_Print(root);

    uint32_t jslen = strlen(str);
    memcpy(json, str, jslen);
    printf("%s\n", json);

    cJSON_Delete(root);
    free(str);
    str = NULL;
}


void app_main()
{
    printf("test json...\n");

    while(1){
        vTaskDelay(1000/portTICK_RATE_MS);
        printf("heap size:%d\n", esp_get_free_heap_size());
        test_json();
    }

}

完整代码见 github: JSON Packaging Demo

Part 3 : 说明

  1. 在编译该示例前,你需要熟悉 ESP32 的开发环境,如 ESP-IDF 入门指南
  2. 需要注意示例中的 README.md
展开阅读全文

没有更多推荐了,返回首页