中移ML307R(4G Cat1,C-SDK,OpenCPU)模组学习开发-使用i2c采集sht30温湿度数据
<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,调用测试程序
#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,如果测试有问题,可以加上日志口打印,查看问题
.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源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按一下按键,对应端口输出单个脉冲