该模块与Arduino连接时采用单总线的连接方式,且需接一个4.7K的上拉电阻才能使用
在这条单线上最多可以拥有多达127个设备,当我们需要使用其中之一时,主设备就会启动复位脉冲,并且开始从从设备接收应答脉冲。然后便开始搜索ROMs(每个生产的设备都拥有一个独特的64位ROM代码,比如说序列号。序列号的前一部分定义了一个设备的序列,比如,0x10代表DS18S20,而对于DS18B20来说则为0x28,当然所有序列号剩余的部分也都是唯一的序号。)最后,主设备就会匹配ROM命令,从而来选择必要的从设备。并且所有单线的总线上的数据传输都是以字节的形式进行的,这主要是因为,当该模块与Arduino连接后,是Arduino中的OneWire库来负责所有的底层操作,我们只需要发送和接收字节。
所有的数据和命令都必须首先通过单总线来传输最低有效位。当我们需要获取温度的测量值时,需要发出convert命令。当传感器接收到这个命令时,将会启动数据转换的过程-通过测量产生两个字节。这是一个相对比较缓慢的过程,大约需要750毫秒左右,所以需要的发出命令之后等待一段时间。最终,所有的采集的数据都存储在暂存器(传感器的RAM)中。我们可以读取它,从而获取温度数据,也可以写入它,来设置警报阈值,指定传感器的分辨率。
想要读取暂存器,首先我们需要发出一个read convert命令,之后我们就会接收到九个字节的数据,如图所示
接着就需要通过下面这个公式来转换得到温度数据
Temp = ((HighByte << 8) + LowByte ) *0.0625