Bus Pirate玩转SHT21湿度传感器
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%。