前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >中移ML307R(4G Cat1,C-SDK,OpenCPU)模组学习开发-使用i2c采集sht30温湿度数据

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

作者头像
杨奉武
发布2024-09-10 08:47:45
2270
发布2024-09-10 08:47:45
举报
文章被收录于专栏:知识分享

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

测试

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

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

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

'custom_main/src/uart.c',

'custom_main/src/sht3x.c',

current_dir + '/custom_main',

3,连接上传感器

例程是使用I2C1

4,调用测试程序

代码语言:javascript
复制
#include "custom_main.h"

#include "stdio.h"
#include "stdlib.h"

#include "cm_fs.h"
#include "cm_mem.h"
#include "cm_sys.h"
#include "cm_sim.h"
#include "cm_rtc.h"
#include "cm_os.h"
#include "cm_i2c.h"

#include "cm_gpio.h"
#include "cm_iomux.h"
#include "cm_uart.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);
                    }
                    osDelay(100);  //延时读取一次数据
                }
            }
        }
    }
}


int cm_opencpu_entry(void *param)
{
    (void)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,如果测试有问题,可以加上日志口打印,查看问题

.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 测试
    • 1,把文件拷贝到自己工程的 custom_main\src\ 路径下
      • 这里还有串口的配置,用于串口打印,建议也拷贝过去,如果自己已经有自己的串口打印,则不需要拷贝
    • 2,设置下.h文件和.c文件引用
      • 3,连接上传感器
        • 例程是使用I2C1
      • 4,调用测试程序
        • 4,编译下载,然后使用串口调试助手查看
          • 可以只连接串口模块的GND 和 RX(只接收数据)
        • 5,如果测试有问题,可以加上日志口打印,查看问题
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档