Bus Pirate是一个开源硬件,让开发人员能够直接通过USB和命令行程序和不同的数字,模拟接口的电子模块通讯。

SHT21号称世界上最小的数字式湿度、温度传感器,只有3x3mm大。数字接口和上一代的SHT系列传感器一样使用I2C。

SHT21的电路板可以在这里购买:
http://www.misenso.com/shop/humidity-and-temperature-sensor-sht21-breakout/

SHT21的说明书:
http://www.sensirion.com/en/pdf/product_information/Datasheet-humidity-sensor-SHT21.pdf (英文)
http://www.sensirion.com.cn/product/downimg/C-Datasheet_SHT21_V1.0.pdf (中文)

和总线海盗连接

Bus Pirate +3.3V       –>       SHT21 VCC
Bus Pirate   GND       –>       SHT21 GND
Bus Pirate   CLK       –>       SHT21 SCL
Bus Pirate MOSI       –>       SHT21 SDA

操作脚本

HiZ> m   <<< 选择总线类型,因为SHT21是I2C总线
1. HiZ
2. 1-WIRE
3. UART
4. I2C
5. SPI
6. 2WIRE
7. 3WIRE
8. KEYB
9. LCD
x. exit(without change)
(1)> 4   <<< 选择I2C总线
Set speed:
1. ~5KHz
2. ~50KHz
3. ~100KHz
4. ~400KHz
(1)> 2   <<< 选择总线时钟频率,根据SHT21手册,SHT21自适应最高400KHz的频率,所以请选择1,2或者3
Ready
I2C> W   <<< 打开3.3v电源
Power supplies ON
I2C> (1)   <<< 搜索连接到I2C总线上的设备地址
Searching I2C address space. Found devices at:
0x80(0x40 W)   <<< 找到SHT21
I2C> [0x80 0xE3][0x81 %:1000 r:3]   <<< 测量温度,读取温度数据
I2C START BIT
WRITE: 0x80 ACK
WRITE: 0xE3 ACK
I2C STOP BIT
I2C START BIT
WRITE: 0x81 ACK
DELAY 1000ms
READ: 0x59  ACK 0x4C  ACK 0x64
NACK
I2C STOP BIT
I2C> [0x80 0xE5][0x81 %:1000 r:3]   <<< 测量湿度,读取湿度数据
I2C START BIT
WRITE: 0x80 ACK
WRITE: 0xE5 ACK
I2C STOP BIT
I2C START BIT
WRITE: 0x81 ACK
DELAY 1000ms
READ: 0x8B  ACK 0x22  ACK 0xDD
NACK
I2C STOP BIT
I2C>

好了,我们获得了温度0x59 0x4C 0x64,湿度0x8B 0x22 0xDD。最后一个字节是校验位,可以忽略。同时,数据最末两位状态位需要被清零,所以我们得到

类型 原始16进制 原始2进制 结果2进制 10进制结果
温度 0x59 0x4C 01011001 01001100 01011001 01001100 22860
湿度 0x8B 0x22 10001011 00100010 10001011 00100000 35616

根据公式

温度= -46.85+175.72*S_T/2^16 =-46.85+175.72*22860/2^16 =14.4435 ℃

相对湿度 = -6+125*  S_RH/2^16 =-6+125*  35616/2^16 =61.932128906%

所以最后我们得到当前温度14.44度,相对湿度61.93%。