[STM32+LORA] keil环境下如何使用JSON格式发送数据

##首先需要添加下载cJSON库文件

链接:GitHub - DaveGamble/cJSON: Ultralightweight JSON parser in ANSI C

然后添加文件到工程中,修改test,c文件

示例代码:

void send_json()
{
    // 假设的变量值
    char hostID[] = "00000001";
    char terminalID[] = "00000001";
    int temperature = 24;
    char smoke[] = "No";
    int CO = 0;
    char burntSmell[] = "0";
    char selfExtinguishing[] = "No";

    // 创建根对象
    cJSON *root = cJSON_CreateObject();
    
    // 向JSON对象中添加数据
    cJSON_AddItemToObject(root, "Host ID", cJSON_CreateString(hostID));
    cJSON_AddItemToObject(root, "Terminal ID", cJSON_CreateString(terminalID));
    cJSON_AddItemToObject(root, "Msg Type", cJSON_CreateString(smoke));
    cJSON_AddItemToObject(root, "Instr SN", cJSON_CreateString("007"));
    cJSON_AddItemToObject(root, "Instr Type", cJSON_CreateString("Query Terminal"));
    cJSON_AddItemToObject(root, "Instr Echo", cJSON_CreateString("Reply OK"));
    cJSON_AddItemToObject(root, "Temperature", cJSON_CreateNumber(24));
    cJSON_AddItemToObject(root, "Smoke", cJSON_CreateString(smoke));
    cJSON_AddItemToObject(root, "CO", cJSON_CreateNumber(CO));
    cJSON_AddItemToObject(root, "Burnt Smell", cJSON_CreateNumber(burnsmell));
    cJSON_AddItemToObject(root, "Self-extinguishing", cJSON_CreateString());

    // 将JSON结构转化为字符串
    char *json_data = cJSON_Print(root);
    
    if (json_data)
    {
        // 发送JSON字符串
        LoRa_Send(json_data, rt_strlen(json_data));
        // 释放cJSON_Print分配的内存
        cJSON_free(json_data);
    }
    
    // 删除cJSON对象,释放内存
    cJSON_Delete(root);
}

最后看实际情况修改栈区空间大小

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这里是一个简单的 STM32+LORA 芯片 SX1278 主从通信的程序设计参考,供您参考: 1. 硬件准备: - STM32F4开发板 - LoRa 模块 SX1278 - 杜邦线若干 - 5V 2A电源 - USB转串口线 2. 程序设计: - 安装 Keil MDK 开发环境,并创建一个新的 STM32 工程。 - 在工程中新建一个 main.c 文件,并编写代码实现 LoRa 模块的初始化、主从通信等操作。 - 在 main.c 文件中引入相应的头文件,例如:#include "stm32f4xx.h"、#include "sx1278.h" 等。 - 在 main 函数中初始化串口、LoRa 模块、GPIO 等基础配置,例如: ```c int main(void) { // 初始化串口 USART_Init(); // 初始化 LoRa 模块 SX1278_Init(); // 配置 GPIO GPIO_Configuration(); // ... } ``` - 在主从通信前,需要设置 LoRa 模块的工作模式(主/从),例如: ```c void SX1278_SetMode(uint8_t mode) { SX1278_Write(REG_LR_OPMODE, (SX1278_Read(REG_LR_OPMODE) & RFLR_OPMODE_MASK) | mode); } ``` - 主从通信时,需要设置 LoRa 模块的频率、数据速率、功率等参数,例如: ```c void SX1278_SetTxConfig(uint32_t freq, uint32_t bw, uint32_t sf, uint32_t cr, uint32_t power) { uint8_t bw_sf_reg = 0; switch (bw) { case 125000: bw_sf_reg |= 0x70; break; // ... } switch (sf) { case 6: bw_sf_reg |= 0x60; break; // ... } SX1278_Write(REG_LR_MODEMCONFIG1, bw_sf_reg); SX1278_Write(REG_LR_MODEMCONFIG2, (SX1278_Read(REG_LR_MODEMCONFIG2) & RFLR_MODEMCONFIG2_SF_MASK) | (sf << 4)); SX1278_Write(REG_LR_MODEMCONFIG3, 0x04); SX1278_Write(REG_LR_PACONFIG, power); SX1278_Write(REG_LR_FRFMSB, (uint8_t)((freq >> 16) & 0xFF)); SX1278_Write(REG_LR_FRFMID, (uint8_t)((freq >> 8) & 0xFF)); SX1278_Write(REG_LR_FRFLSB, (uint8_t)(freq & 0xFF)); } ``` - 主从通信时,需要发送和接收数据,例如: ```c void SX1278_SendPacket(uint8_t *buf, uint8_t size) { SX1278_SetMode(RFLR_OPMODE_STANDBY); SX1278_Write(REG_LR_FIFOADDRPTR, SX1278_Read(REG_LR_FIFOTXBASEADDR)); SX1278_Write(REG_LR_PAYLOADLENGTH, size); SX1278_WriteFifo(buf, size); SX1278_SetMode(RFLR_OPMODE_TRANSMITTER); while ((GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) == Bit_RESET); while ((GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) == Bit_SET); } uint8_t SX1278_ReceivePacket(uint8_t *buf, uint8_t size) { uint8_t rx_len = 0; if (SX1278_Read(REG_LR_IRQFLAGS) & RFLR_IRQFLAGS_PAYLOADCRCERROR_MASK) { SX1278_Write(REG_LR_IRQFLAGS, RFLR_IRQFLAGS_PAYLOADCRCERROR_MASK); } else { rx_len = SX1278_Read(REG_LR_RXNBBYTES); SX1278_Write(REG_LR_FIFOADDRPTR, SX1278_Read(REG_LR_FIFORXCURRENTADDR)); SX1278_ReadFifo(buf, rx_len); } return rx_len; } ``` 3. 编译和下载程序: - 在 Keil MDK 中编译程序,生成可执行文件。 - 使用 ST-Link 下载程序到 STM32 开发板中进行调试。 以上是一个简单的 STM32+LORA 芯片 SX1278 主从通信的程序设计参考,可以根据您的实际需求进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值