云计算百科
云计算领域专业知识百科平台

CH347/339W开源项目:集SPI、I2C、JTAG、SWD、UART、GPIO多功能为一体(2)

文章目录

  • 系列目录
  • 前言
  • 前期准备
  • 具体实现
  • 总结

系列目录

  • 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的下载与调试。

赞(0)
未经允许不得转载:网硕互联帮助中心 » CH347/339W开源项目:集SPI、I2C、JTAG、SWD、UART、GPIO多功能为一体(2)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!