首页 > 其他分享 >stm32 M750基于4g的物联网(阿里云)环境监测系统设计求助

stm32 M750基于4g的物联网(阿里云)环境监测系统设计求助

时间:2024-11-13 19:49:54浏览次数:3  
标签:include show 16 stm32 lcd DTU 4g M750 adcx

前言:基于正点原子的,用的阿里云平台,之前的主函数设备上传数据代码是这个,按下KEY0后成功输送给阿里云


		key = key_scan(0);  //按键
        if(key == KEY0_PRES)
        {
					
    snprintf(DTU_DATA, sizeof(DTU_DATA),        //将数据以json形式传送到阿里云
        "{\"method\":\"thing.event.property.post\","
        "\"id\":\"%s\","
        "\"params\":{"
        "\"Humidity\":%d,"
        "\"temperature\":%d,"
        "\"AQI\":%d"
        "},"
        "\"version\":\"1.0.0\"}", 
        "unique-request-id",  
        humidity, 
        temperature,
        AQI); 
					
			  printf("Sending data: %s\n", DTU_DATA);
						
				atk_idm750c_uart_printf("%s\r\n", DTU_DATA);
		
        }
				

这上面的是之前成功上传的数据

*************************************************************************分界线

现在的问题是:代码没变过,同样的操作,但是上传阿里云时提示6207错误代码,如下图

根据阿里云帮助文档物模型属性、事件、服务的Alink JSON数据格式和Topic_物联网平台(IoT)-阿里云帮助中心

的这个位置

我进行了代码更改,更改图如下:

long currentTime = get_current_timestamp_ms();这个函数是我用的一个简单时间戳

上传数据时还是提示6207,我已经很无奈了,不知道是不是位置搞错了,请教大佬,我的这个代码应该如何更改?

附带主函数如下:

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./USMART/usmart.h"
#include "./BSP/LED/led.h"
#include "./BSP/LCD/lcd.h"
#include "./BSP/DHT11/dht11.h"
#include "./BSP/ADC/adc.h"
#include "./BSP/KEY/key.h"
#include "./BSP/ATK_IDM750C/atk_idm750c.h"
#include "./BSP/ATK_IDM750C/atk_idm750c_uart.h"
#include "stm32f1xx_hal.h"
#define DEMO_DTU_TEST_DATA               "ALIENTEK ATK-IDM750C TEST"

// 阿里云物联网平台参数
#define DTU_ALIYUN_PRODUCTKEY           "k1wd9etVnLn"
#define DTU_ALIYUN_DEVICENAME           "4GM750"


long get_current_timestamp_ms(void)
	{
    // 获取自系统启动以来的毫秒数
    return (long)HAL_GetTick();
}

void show_mesg(void)
{
    /* LCD显示实验信息 */
    lcd_show_string(30, 130, 200, 16, 16, "Temp:  C", BLUE);
    lcd_show_string(30, 150, 200, 16, 16, "Humi:  %", BLUE);
    lcd_show_string(30, 170, 200, 16, 16, "air quality:", BLUE);
    lcd_show_string(30, 190, 200, 16, 16, "VOL: .", BLUE); /* 先在固定位置显示小数点 */
    lcd_show_string(30, 30, 200, 16, 16, "KEY0: Send Message", BLUE);   /* 按下发送信息 */
    /* 串口输出实验信息 */
    printf("********************************\r\n");
    printf("STM32\r\n");
    printf("ATK-IDM750C\r\n");
    printf("ATOM@ALIENTEK\r\n");
    printf("********************************\r\n");
}



int main(void)
{
    uint8_t x = 0;
    uint8_t t = 0;
    uint8_t temperature;
    uint8_t humidity;
    uint16_t adcx;
    uint16_t AQI;
    float temp;
    uint8_t *buf;
    uint8_t key;
    char kile_temperature[20];
    char kile_humidity[20];
    char kile_adcx[20];
    char DTU_DATA[256];

    HAL_Init();                         /* 初始化HAL库 */
    sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
    delay_init(72);                     /* 延时初始化 */
    usart_init(115200);                 /* 串口初始化为115200 */
    led_init();                         /* 初始化LED */
    lcd_init();                         /* 初始化LCD */
    adc_init();                         /* 初始化ADC */
    key_init();                         /* 初始化KEY */
    dht11_init();

    lcd_show_string(30, 110, 200, 16, 16, "DHT11 OK", RED);
    lcd_show_string(30, 90, 200, 16, 16, "MQ135 OK", RED);

    delay_ms(1000);

    demo_run();                         /* 运行示例程序 */
    show_mesg();                        /* 显示实验信息 */

    delay_ms(500);

    while (1)
    {
        if (t % 10 == 0) /* 每100ms读取一次 */
        {
            dht11_read_data(&temperature, &humidity);             /* 读取温湿度值 */
            lcd_show_num(30 + 40, 130, temperature, 2, 16, BLUE); /* 显示温度 */
            lcd_show_num(30 + 40, 150, humidity, 2, 16, BLUE);    /* 显示湿度 */

            adcx = adc_get_result_average(ADC_ADCX_CHY, 10);    /* 获取通道5的转换值,10次取平均 */
            sprintf(kile_adcx, "%d", adcx);
            lcd_show_xnum(124, 170, adcx, 5, 16, 0, BLUE);      /* 显示ADCC采样后的原始值 */
            AQI = adcx;

            temp = (float)adcx * (3.3 / 4096);                  /* 获取计算后的带小数的实际电压值,比如3.1111 */
            adcx = temp;                                        /* 赋值整数部分给adcx变量,因为adcx为u16整形 */
            lcd_show_xnum(64, 190, adcx, 1, 16, 0, BLUE);      /* 显示电压值的整数部分,3.1111的话,这里就是显示3 */

            temp -= adcx;                                       /* 把已经显示的整数部分去掉,留下小数部分,比如3.1111-3=0.1111 */
            temp *= 1000;                                       /* 小数部分乘以1000,例如:0.1111就转换为111.1,相当于保留三位小数。 */
            lcd_show_xnum(80, 190, temp, 3, 16, 0X80, BLUE);   /* 显示小数部分(前面转换为了整形显示),这里显示的就是111. */
        }

        sprintf(kile_temperature, "%d", temperature);
        sprintf(kile_humidity, "%d", humidity);

        delay_ms(10);
        t++;
        key = key_scan(0);  // 按键
        if (key == KEY0_PRES)
        {
            // 构建JSON数据
            long currentTime = get_current_timestamp_ms(); // 示例时间戳,您需要替换为实际的时间戳
            snprintf(DTU_DATA, sizeof(DTU_DATA), 
           "{\"id\":\"%s\",\"version\":\"1.0\",\"sys\":{\"ack\":0},\"params\":{\"Humidity\":{\"value\":%d},\"temperature\":{\"value\":%d},\"AQI\":{\"value\":%d}},\"method\":\"thing.event.property.post\"}", 
				currentTime, // id字段
				humidity,      // 湿度属性值
				temperature,   // 温度属性值
				AQI);         // 空气质量指数属性值
						
            printf("Sending data: %s\n", DTU_DATA); // 确保这里有分号结束语句
            atk_idm750c_uart_printf("%s\r\n", DTU_DATA);
        }

        if (x == 1)
        {
            LED1_TOGGLE();
            x = 0;
        }

        buf = atk_idm750c_uart_rx_get_frame();
        if (buf != NULL)
        {
            printf("%s", buf);
            atk_idm750c_uart_rx_restart();
        }
    }
}

标签:include,show,16,stm32,lcd,DTU,4g,M750,adcx
From: https://blog.csdn.net/SABERLU/article/details/143750670

相关文章

  • 基于STM32设计的矿山环境监测系统(NBIOT)_262
    文章目录一、前言1.1项目介绍【1】开发背景【2】研究的意义【3】最终实现需求【4】项目硬件模块组成1.2设计思路【1】整体设计思路【2】上位机开发思路1.3项目开发背景【1】选题的意义【2】摘要【3】国内外相关研究现状【5】参考文献1.4......
  • 基于STM32设计的大棚育苗管理系统(4G+华为云IOT)_265
    文章目录一、前言1.1项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成【4】设计意义【5】国内外研究现状【6】摘要1.2设计思路1.3系统功能总结1.4开发工具的选择【1】设备端开发【2】上位机开发1.5参考文献1.6系统框......
  • 基于STM32的扫码取件系统设计思路:PWM、TCP/HTTP、SQLite等技术
    一、项目概述随着电子商务的迅猛发展,快递取件的智能化和便捷性需求日益增长。本项目旨在设计一款基于STM32F103C8T6单片机的扫码取件系统,结合语音播报模块、WiFi模块、显示模块、舵机控制电路和按键电路,实现高效、智能的取件功能。用户通过扫描二维码即可快速取件,同时系统......
  • STM32外设之GPIO&LED指示灯模块程序设计
    文章目录一、STM32外设之GPIO二、CT117E-M4的LED电路原理三、LED指示灯模板程序设计一、STM32外设之GPIO1.GPIO的8种工作模式:模式配置模式寄存器输出类型寄存器输出速度寄存器上/下拉寄存器输入浮空00不使用不使用00输入上拉00不使用不使用01输入下拉00不使用不使用......
  • 4G模组软件指南 | 必读篇之模块信息(hmeta)
    今天我讲解的这篇关于4G模组软件的模块信息属于必读篇,望珍惜!1、模块信息概述模块信息是每一个模块携带的信息,就像人的身份证一样,这些信息确定了模块的唯一性;包含设备唯一id,硬件型号,模组的硬件版本号,固件版本号等;模块远程升级需要上传模块信息,解决和分析某些问题的时候......
  • NVR接入录像回放平台EasyCVR视频分析设备平台视频监控热知识分享:2.4G和5G的路由器区别
    在当今数字化时代,无线网络已成为我们生活中不可或缺的一部分,而无线路由器作为连接数字世界的关键设备,其性能和功能直接影响着我们的网络体验。随着技术的发展,用户对无线路由器的需求不再仅限于基本的联网功能,而是开始追求更高速、更稳定、更安全的网络服务。同时,对于安防视频监控......
  • 嵌入式高频面试题:STM32基础外设篇
    1、UART通信的波特率如何进行设置波特率由UART的时钟频率和分频器设置决定,在初始化UART时配置相应的波特率寄存器2、常见的通信接口3、iic总线的原理iIC总线是一种串行双向通信总线,用于连接主机和从设备。它有两种线路分别是时钟线(SCL)和数据线(SDA)主机通过时钟线控制通......
  • STM32+cubemx岸电绞车超速报警
    一、项目背景与概述    在当今高度自动化和智能化的时代,对电子系统的功能和性能要求不断提高。本项目旨在基于STM32微控制器开发一个岸电绞车超速报警模块,提供实时监测与控制其旋转速度,确保安全运行。该系统综合运用了嵌入式软件开发技术、硬件电路设计以及信号处......
  • STM32—OLED模块
    OLED(OrganicLightEmittingDiode)显示屏因其轻薄、响应速度快、视角宽、色彩鲜艳等特点,在嵌入式系统中得到广泛应用。本文将详细介绍如何使用STM32微控制器通过I2C接口驱动OLED显示屏,并提供完整的代码实现。OLED模块简介OLED显示屏是一种自发光显示技术,具有轻薄、低功耗......
  • 暂时关闭EXTI外部中断的一个坑 HK32(stm32没有测试过)
    一开始的外部中断是通过这个宏函数来关闭的和开启#defineDisableEXTI_Key()(EXTI->IMR&=~((1<<KEY1_Pin)+(1<<KEY2_Pin)+(1<<KEY3_Pin)))//PA0、PC2、3#defineEnableEXTI_Key()(EXTI->IMR|=((1<<KEY1_Pin)+(1<<KEY2_Pin)+(1<<KEY3_Pin)))......