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

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

时间:2024-09-09 11:02:49浏览次数:4  
标签:OpenCPU include cm 温湿度 sht3x uart0 串口 i2c

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

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

 

 

测试

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

 

 

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

 

 

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

'custom_main/src/uart.c', 'custom_main/src/sht3x.c', current_dir + '/custom_main',

 

 

3,连接上传感器

例程是使用I2C1

 

 

 

 

 

4,调用测试程序

 

 

 

#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,如果测试有问题,可以加上日志口打印,查看问题

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

标签:OpenCPU,include,cm,温湿度,sht3x,uart0,串口,i2c
From: https://www.cnblogs.com/yangfengwu/p/18404168

相关文章

  • STM32L431RC 光照度+温湿度+电机+ESP8266+腾讯云+CSDN 项目
    鱼弦:公众号【红尘灯塔】,CSDN博客专家、内容合伙人、新星导师、全栈领域优质创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)STM32L431RC光照度+温湿度+电机+ESP8266+腾讯云+CSDN项目介绍1.项目概述......
  • I2C总线为什么要接上拉电阻
    I2C总线为什么要接上拉电阻I2C为什么要接上拉电阻?因为它是开漏输出。开漏输出为什么是开漏输出?I2C协议支持多个主设备与多个从设备在一条总线上,如果不用开漏输出,而用推挽输出,会出现主设备之间短路的情况,所以总线一般会使用开漏输出。上拉电阻1、为什么要接上拉电阻?接上拉......
  • Arduino基础入门学习——使用DHT11温湿度传感器获取温湿度
    使用DHT11温湿度传感器获取温湿度一、前言二、DHT11介绍三、准备工作四、程序代码五、运行结果六、结束语一、前言老规矩,再来一句名言激励激励大家,当然,也激励自己(狗头):             读书百遍,其义自见。——晋·陈寿二、DHT11介绍DHT11采用单总线......
  • I2C通信中,使用FIFO时的读写时序
    在I2C通信中,使用FIFO(First-InFirst-Out)缓冲区可以显著提高数据传输的效率和可靠性。当使用FIFO时,读写时序会有一些特定的要求和优化,以确保数据传输的正确性和高效性。下面详细介绍使用FIFO时的读写时序。读写时序的基本原则在使用I2CFIFO时,读写时序需要考虑以下几个方面:初......
  • 基于Keil软件实现软件I2C读写MPU6050(江协科技HAL库)
    软件I2C读写MPU6050实验是基于江协科技STM32的HAL库工程模板创建的(可以在作品“基于江科大STM32创建的HAL库工程模板”中的结尾处获取工程模板的百度网盘链接)复制“OLED显示”的工程文件——“4-1 OLED显示屏”,并命名为“10-1 软件I2C读写MPU6050 ”。打开工程,把下面的程序......
  • stm32之I2C通信协议
    文章目录前言一、I2C通信协议二、I2C硬件电路三、I2C时序基本单元3.1起始与终止信号3.2发送与接收一个字节3.3发送与接收应答四、I2C时序分析4.1指定地址写4.2当前地址读4.3指定地址读前言提示:本文主要用作在学习江科大自化协STM32入门教程后做的归纳总结笔......
  • I2C软件模拟与Delay寄存器延迟函数
    环境芯片:STM32F103ZET6库:来自HAL的STM32F1XX.H原理图有图可知SCL和SDA两条线接到了PB10和PB11Driver_I2C.h#ifndef__DRIVER_I2C#define__DRIVER_I2C#include"stm32f1xx.h"#include"Com_Delay.h"//定义拉高SCL引脚的宏操作#defineSCL_HIGH(GPIOB->ODR|......
  • UART\SPI\I2C的区别与联系
    UART全双工(两根线tx,rx),无时钟线,只能两个设备SPI全双工(两根线tx、rx+时钟线+片选),一主多从,扩展了接入的设备,同步传输,速度更快I2C半双工(一根数据线+时钟线),多主一从或者多主多从UART(UniversalAsynchronousReceiver/Transmitter)全双工:意味着数据可以同时在两个方向上......
  • 铁电存储器(FM24W256)I2C读写驱动(2):写保护、设备地址、读写方式
    0参考资料FM24W256(Cypress公司生产)数据手册本例使用的FM24W256(soic-8封装)引脚示意图如下:1写保护WP引脚是写保护引脚,当WP被拉高时FM24W256写入无效,拉低时才能正常写入数据。该引脚在芯片内部下拉。相关描述如下:2FM24W256设备地址和AT24CXX系列EEPROM类似,FM24W25......
  • uart, spi, i2c波形分析
    1.uart发送三个字母“C”“U”“S”,格式是1个起始位+8个数据位+1个停止位常用的是三根线,GND,TX,RX,只需要一根线就可以完成uart协议分析,如下是RX的信号采样。 2.spi常用的是四根线,cs(片选)+sclk(时钟)+mosi+miso需要采样三根线完成spi协议分析。2.1首先片选......