中移ML307A(4G Cat1,C-SDK,OpenCPU)模组学习开发-使用i2c采集sht30温湿度数据

<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ML307A_OPEN" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

 

 

测试

1,把文件拷贝到自己工程的 custom_main\src\ 路径下

 

 

这里还有串口的配置,用于串口打印,建议也拷贝过去,如果自己已经有自己的串口打印,则不需要拷贝

 

 

2,设置下.h文件和.c文件引用

#追加 .h文件路径 (custom/custom_main/src)
INC      += -I'$(CUSTOM_MAIN_DIR)/src'
#追加源文件(.c文件)
OC_FILES += $(CUSTOM_MAIN_DIR)/src/uart.c
OC_FILES += $(CUSTOM_MAIN_DIR)/src/sht3x.c

 

3,连接上传感器

例程是使用I2C0

 

 

 

 

 

4,调用测试程序

 

 

 

复制代码
#include "cm_sys.h"
#include "cm_os.h"
#include "cm_mem.h"
#include "stdio.h"
#include "stdlib.h"
#include "stdarg.h"
#include <string.h>



#include "uart.h"
#include "sht3x.h"



/********************************************uart0**************************************************/
uartStruct uart0={0};//定义串口结构体变量
void uartRecvData(uint32_t flags, char *data, int len)
{
    uartSendData(&uart0, data, len);//把接收的数据返回
}


/********************************************Sht30**************************************************/
osThreadId_t osThreadIdSht30;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadIdSht30Fun(void *param)
{
    cm_i2c_cfg_t config = {
        CM_I2C_ADDR_TYPE_7BIT,
        CM_I2C_MODE_MASTER,
        CM_I2C_CLK_100KHZ
    };
    int32_t ret=0;
    sht3x_init(&sht3x, SHT3X_DEV_ADDR);
    char print_buff[100];
    int len=0;
    while (1)
    {
        //启动i2c
        if (cm_i2c_open(SHT3X_I2C_ID, &config)!=0)
        {
            cm_log_printf(0,"i2c init err, ret = %d\n", ret);
            osDelay(1000/5);//延时
            cm_i2c_close(SHT3X_I2C_ID);
            osDelay(20/5);//延时
        }
        else
        {
            cm_log_printf(0,"i2c init ok\n");
            // 启动传感器
            osDelay(20/5);//延时
            ret = sht3x_begin(&sht3x);
            if (ret != 0) 
            {
                cm_log_printf(0,"SHT3x begin failed\n");
                osDelay(1000/5);//延时
                cm_i2c_close(SHT3X_I2C_ID);
                osDelay(20/5);//延时
            }
            else
            {
                osDelay(20);//延时
                while (1) 
                {
                    ret = sht3x_measure(&sht3x);// 读取传感器数据
                    if (ret != 0) 
                    {
                        cm_log_printf(0,"Failed to read from SHT3x\n");
                        break;
                    }
                    else
                    {
                        //打印温湿度数据
                        len = snprintf(print_buff, sizeof(print_buff), "Temperature: %.2f C, Humidity: %.2f %%\n", sht3x.temperature, sht3x.humidity);
                        uartSendData(&uart0, print_buff, len);//串口发送可以改成自己的

                        cm_log_printf(0,"Temperature: %.2f C, Humidity: %.2f %%\n", sht3x.temperature, sht3x.humidity);
                    }
                    osDelay(100);  //延时读取一次数据
                }
            }
        }
    }
}


//相当于程序的main函数
int cm_opencpu_entry(char * param)
{
    //配置串口
    uart0.uartId = 0;//配置串口号
    uart0.uartRecvCb = uartRecvData;//设置接收数据函数
    uart0.config.baudrate = 115200;//波特率
    uart0.config.byte_size = CM_UART_BYTE_SIZE_8;//数据位数
    uart0.config.flow_ctrl = CM_UART_FLOW_CTRL_NONE;//硬件流控
    uart0.config.parity = CM_UART_PARITY_NONE;//奇偶校验
    uart0.config.stop_bit = CM_UART_STOP_BIT_ONE;//停止位
    uart0.config.is_lpuart = 0;//若要配置为低功耗模式可改为1
    if (uart_init(&uart0) !=0)//初始化串口
    {
        return -1;
    }

    
    //配置任务sht30
    osThreadAttr_t app_task_attr = {0};
    app_task_attr.name  = "osThreadIdSht30";//任务名字-随意
    app_task_attr.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
    app_task_attr.priority = osPriorityNormal;//任务优先级-普通优先级
    //返回任务句柄                                 任务函数        给任务函数的参数       任务配置    
    osThreadIdSht30 = osThreadNew((osThreadFunc_t)osThreadIdSht30Fun,      NULL,         &app_task_attr);

    return 0;
}
复制代码

4,编译下载,然后使用串口调试助手查看

可以只连接串口模块的GND 和 RX(只接收数据)

 

 

 

5,如果测试有问题,可以使用日志口打印,查看问题

 

 

 

 

 

 

 

 

.

posted on   广源时代  阅读(410)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2021-09-09 1-CH579+Air724UG(4G GPRS)远程升级篇(自建物联网平台)-CH579升级程序跳转流程说明
2016-09-09 FPGA按一下按键,对应端口输出单个脉冲

导航

支付宝 QQ群
点击右上角即可分享
微信分享提示