====== Using the temperature & humidity sensor with H/W I2C ====== We tested to read si702x sensor with H/W I2C. {{http://dn.odroid.com/wiki_image/xu3_si702x_2.jpg}} {{http://dn.odroid.com/wiki_image/pinmap.png}} Open /etc/modprobe.d/blacklist.conf file and add drivername using following syntax: blacklist ioboard_bh1780 blacklist ioboard_bmp180 blacklist ioboard_keyled Reboot sudo reboot Compile & Run gcc -o ex_si702x ex_si702x.c odroid@odroid:~$ sudo ./ex_si702x Temperature : 28.64 °C Humidity : 43.62 % #include #include #include #define CMD_MEASURE_TEMPERATURE_HOLD 0XE3 #define CMD_MEASURE_HUMIDITY_HOLD 0xE5 #define SI702X_ADDRESS 0x40 int main(void) { unsigned char rbuf[2]; unsigned char wbuf[1]; double temperature = 0; double humidity = 0; int status = 0; // Net name I2C_1 Physical address : 0x12C70000 int fd = open("/dev/i2c-4", O_RDWR); if (fd < 0) { printf("ERROR: open failed\n"); return -1; } status = ioctl(fd, I2C_SLAVE, SI702X_ADDRESS); if (status < 0) { printf("ERROR: ioctl error\n"); close(fd); return -1; } wbuf[0] = CMD_MEASURE_TEMPERATURE_HOLD; write(fd, wbuf, 1); if (read(fd, rbuf, 2) != 2) printf("Failed to read from the i2c bus.\n"); temperature = rbuf[1] | rbuf[0] << 8; printf("Temperature : %.2lf *C\n", (temperature*175.72/65536) - 46.85) ; wbuf[0] = CMD_MEASURE_HUMIDITY_HOLD; write(fd, wbuf, 1); if (read(fd, rbuf, 2) != 2) printf("Failed to read from the i2c bus.\n"); humidity = rbuf[1] | rbuf[0] << 8; printf("Humidity : %.2lf %%\n", (humidity*125.0/65536) - 6); close(fd); }