系列目录


前言

前面一章构想了CH347多功能接口演示程序,并设计了程序的大致结构,本章将完成温湿度采集功能。

最终界面效果如下:
界面会不断显示采集到的温湿度数据;
使用指南中提供硬件的连接图。

  • 操作说明:
    在这里插入图片描述

  • 温度监测:
    在这里插入图片描述

前期准备

在一切开始前,我们先用i2c-tools工具来检测下我手上的SHT40传感器是否能正常工作。
i2c-tools工具在Linux下被广泛使用,CH347在Windows的实现如下:

https://github.com/ZhiyuanYuanNJ/CH347-I2C-TOOLS
CH347应用 USB转I2C功能之:开源项目i2c-tools工具的使用(2)

我们下载编译后,运行detect命令去SHT40是否能检测到:
在这里插入图片描述
可以看到,0x44地址的SHT40被正常识别到。

具体实现

程序中定义CH347相对应的控制类,完成打开关闭I2C读写等操作,在Ch3xx这个类中,通过MeasureThread线程来不断获取温湿度数据。
使用CH347StreamI2C_RetACK函数去收发I2C数据。

#define SHT40_ADDR 0x44
#define SHT40_COMMAND 0xfd
m_hDev = CH347OpenDevice(m_devIndex); // 打开CH347设备
CH347I2C_Set(m_devIndex, 1); // 设置I2C接口速率,位1-位0: I2C接口速度/SCL频率,
//  00=低速/20KHz,01=标准/100KHz(默认值),10=快速/400KHz,11=高速/750KHz
unsigned char writedata[2]{ SHT40_ADDR << 1, SHT40_COMMAND };
/**
 * @brief       通过I2C总线读写数据到设备
 * @param[in]  iIndex 设备索引
 * @param[in]  iWriteLength   准备写出的字节数,这里是设备地址和寄存器地址,2字节
 * @param[in]  iWriteBuffer    写入数据的指针
 * @param[in]  iReadLength  要读取的字节数
 * @param[out]  oReadBuffer  读取数据的指针,返回后是读出的数据
 * @param[out]  rAckCount   读写返回的ACK值,当前只接入了1个I2C器件,所以正常应为1
 * @return      TRUE  成功, FALSE  失败
 */
ret = CH347StreamI2C_RetACK(dev->m_devIndex, 2, writedata, 0, NULL, &sht40_sensor);
if (ret == FALSE) {
	fprintf(stderr, "write faild\n");
	dev->b_th_status = false;
	return;
}
// 等待10ms,等待SHT40处理
std::this_thread::sleep_for(std::chrono::milliseconds(10));
// 读取数据前先发送0x44设备地址,然后读取6字节数据
ret = CH347StreamI2C_RetACK(dev->m_devIndex, 1, writedata, 6, readdata, &sht40_sensor);
if (ret == FALSE) {
	fprintf(stderr, "read faild\n");
	dev->b_th_status = false;
	return;
}
if (sht40_sensor == 0) {
	dev->b_th_status = false;
} else {
	dev->b_th_status = true;
}
// 数据处理得到真实的温湿度数据
temp_raw = (readdata[0] << 8) | readdata[1];
rh_raw = (readdata[3] << 8) | readdata[4];
// 当前环境实际温度
dev->temperature = -45.0f + 175.0f * temp_raw / 65535.0f;
// 当前环境实际湿度
dev->humidity = -6.0f + 125.0f * rh_raw / 65535.0f;

界面预留了拖动控件来设置采集温湿度的间隔,默认0.5S采集一次。

当然未来可以接入更多I2C设备,实时监测更多信息,来使软件更加的完善。


总结

本章介绍了CH347/339W I2C部分的使用,使用CH347进行I2C读写的接口比较简单,只需给CH347StreamI2C_RetACK传入相应I2C设备正确的设备地址与寄存器地址即可。

接下来将借助xvcd-ch347开源项目来完成Xilinx FPGA的下载与调试。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐