文章目录
- 系列目录
- 前言
- 前期准备
- 具体实现
- 总结
系列目录
- CH347/339W开源项目:集SPI、I2C、JTAG、SWD、UART、GPIO多功能为一体(1)
前言
前面一章构想了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的下载与调试。
网硕互联帮助中心







评论前必须登录!
注册