既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)
SHT20采用的I2C通信,基本命令如下表:
其中主机通讯的时序如图
首先发送写地址,再发送命令,然后是读地址,随后等待测量即可,测量时间如下图,传感器内部设置的默认分辨率为相对湿度 12位和温度 14位。45发送NACK时可取消校验。
下面是读取数据的代码,0x40是主机地址,先发送写命令,然后写入触发测量命令,再写入读命令,准备接收数据,数据一共三字节,依次是数据高字节、低字节、校验字节。
SHT20_ADDRESS = 0x40;
u16 SHT20\_Get\_Data(u8 Cmd)
{
u16 data;
u8 addr, checksum;
u8 buf[2];
addr = SHT20_ADDRESS << 1; //IIC地址是7bit,这里需要左移1位,bit0:1-读 0-写
IIC\_Start(); //起始信号
IIC\_Write\_Byte(addr); //发送设备地址(写)
IIC\_Wait\_Ack(); //等待应答
IIC\_Write\_Byte(Cmd); //发送命令
IIC\_Wait\_Ack();
IIC\_Start(); //重启信号
IIC\_Write\_Byte(addr + 1); //发送设备地址(读)
IIC\_Wait\_Ack();
delay\_ms(70); //等待测量
buf[0] = IIC\_Read\_Byte(); //数据高位
IIC\_Ack(); //产生ACK应答
buf[1] = IIC\_Read\_Byte(); //数据低位
IIC\_Ack(); //产生ACK应答 如果这里不应答 则不传送校验位
checksum = IIC\_Read\_Byte(); //校验位
IIC\_NAck(); //不应答
IIC\_Stop(); //结束信号
data = (buf[0] << 8) + buf[1];
if(CRC\_Check(buf, 2, checksum) == 0) //校验
{
if(Cmd == SHT20_Measurement_T_HM)
{
data = (175.72 \* data / 65536 - 46.85) \* 10; //温度计算公式
}
else data = (125.0 \* data / 65536 - 6.0) \* 10; //湿度计算公式
return data;
}
else return 0xFFFF; //校验不通过返回0xFFFF
}
SHT20采用的是CRC8校验、模型为X8 + X5 +X4 +1,即CRC_MODEL = 0x131。
CRC校验的代码如下
#define CRC\_MODEL 0x131
u8 CRC\_Check(u8 \*ptr, u8 len, u8 checksum)
{
u8 i;
u8 crc = 0x00; //计算的初始crc值
while(len--)
{
crc ^= \*ptr++; //每次先与需要计算的数据异或,计算完指向下一数据
for (i = 8; i > 0; --i) //下面这段计算过程与计算一个字节crc一样
{
if (crc & 0x80)
{
crc = (crc << 1) ^ CRC_MODEL;
}
else
crc = (crc << 1);
}
}
if(checksum == crc)
{
return 0;
}
else return 1;
}
源代码和中英文手册下载地址
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)
讲解视频,并且后续会持续更新**
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)