ESP32 I2C
Introduction to I2C interface, Sensors: SSD1306, HTU21DF, MAX30102, MLX90614, BMP085/BMP280 etc.
I2C (Inter-Integrated Circuit bus)
|  |  | 
I2C Primer
Start Condition followed by 7-Bit Address of 0x64 and a Write command set.
 Successful I2C Write Byte Transmission
Successful I2C Write Byte Transmission
 Successful I2C Read Transmission
Successful I2C Read Transmission


NodeMCU-32S pinout

0.96” OLED

Arduino Library: Adafruit SSD1306

Examples>Adafruit SSD1306>ssd1306_128x64_i2c
Sketchbook>OLED
 

HTU21DF - Relative Humidity and Temperature Digital Output
!!! 3.3V only !!!
 Features: Datasheet
Features: Datasheet
- Use I2C interface
- Typical humidity accuracy of ±2%
- Typical temperature accuracy of ±0.3C
- Operates from 0 to 100% humidity but this sensor isn’t recommended for harsh environments where it could come in contact with water (such as rain).
Arduino Library: Adafruit HTU21DF

Sketchbook>HTU21DF
 
 

MAX30102 PPG (Photoplethysmogram) sensor
 Features: Datasheet
Features: Datasheet
- Heart-Rate Monitor and Pulse Oximeter Sensor in LED Reflective Solution
- Tiny 5.6mm x 3.3mm x 1.55mm 14-Pin Optical Module
    - Integrated Cover Glass for Optimal, Robust Performance
 
- Ultra-Low Power Operation for Mobile Devices
- Programmable Sample Rate and LED Current for Power Savings• Low-Power Heart-Rate Monitor (< 1mW)
    - Ultra-Low Shutdown Current (0.7μA, typ)
- Fast Data Output Capability High Sample Rates
 
- Robust Motion Artifact Resilience: High SNR
- -40°C to +85°C Operating Temperature Range
Arduino Library: Sparkfun MAX3010x


Examples>Sparkfun MAX3010x Pulse and Proximity Sensor Library>Example1_Basic_Readings

- put index finger on MAX30102 will read higher value on R & IR
  Examples>Sparkfun MAX3010x Pulse and Proximity Sensor Library>Example4_HeartBeat_plotter   
Sketch> Sensors> MAX30102_OLED_BPM
MLX90614 Infrared Thermometer
- Factory calibrated in wide temperature range: -40 to 125 ˚C for sensor temperature and -70 to 380 ˚C for object temperature.
- High accuracy of 0.5°C over wide temperature range (0..+50°C for both Ta and To)
- High (medical) accuracy calibration
- Measurement resolution of 0.02°C
- SMBus compatible digital interface
- Available in 3V and 5V versions
- Automotive grade
MLX90614::readObjectTempC()

Arduino Library: Adafruit MLX90614
 Adafruit_MLX90614.h
Adafruit_MLX90614.h
Adafruit_MLX90614.cpp
MLX90614.read16() will read 2 bytes + pec
uint16_t Adafruit_MLX90614::read16(uint8_t a) {
  uint8_t buffer[3];
  buffer[0] = a;
  // read two bytes of data + pec
  bool status = i2c_dev->write_then_read(buffer, 1, buffer, 3);
  if (!status)
    return 0;
  // return data, ignore pec
  return uint16_t(buffer[0]) | (uint16_t(buffer[1]) << 8);
}
MLX90614.write16() will write 1 address + 2 bytes + pec
void Adafruit_MLX90614::write16(uint8_t a, uint16_t v) {
  uint8_t buffer[4];
  buffer[0] = _addr << 1;
  buffer[1] = a;
  buffer[2] = v & 0xff;
  buffer[3] = v >> 8;
  uint8_t pec = crc8(buffer, 4);
  buffer[0] = buffer[1];
  buffer[1] = buffer[2];
  buffer[2] = buffer[3];
  buffer[3] = pec;
  i2c_dev->write(buffer, 4);
}
Examples>Adafruit MLX90614 Library>mlxtest
 

BH1750 Ambient Light Sensor (光照感測器)

- 採用ROHM原裝BH1750FVI晶片
- 供電電源 :3-5v
- 資料範圍:0-65535
- 感測器內置16bitAD轉換器
- 直接數位輸出,省略複雜的計算,省略標定
- 不區分環境光源
- 接近於視覺靈敏度的分光特性
- 可對廣泛的亮度進行1勒克斯的高精度測
Arduino Library: BH1750

Examples> BH1750> BH1750advanced

Barometer(氣壓計)

BMP085
 Features: Datasheet
Features: Datasheet
- Pressure sensing range: 300-1100 hPa (9000m to -500m above sea level)
- Up to 0.03hPa / 0.25m resolution
- -40 to +85°C operational range, +-2°C temperature accuracy
- 2-pin i2c interface on chip
- V1 of the breakout uses 3.3V power and logic level only
- V2 of the breakout uses 3.3-5V power and logic level for more flexible usage
Arduino Library: Adafruit BMP085 Library

Examples>Adafruit_BMP085_Library>BMP085test
 

- Open serial-monitor & set baud=9600
 
BMP280
Features: Technical Data
- Operating Range: Pressure: 300…1100 hPa , Temperature: -40…85°C
- Absolute accuracy: ~ ±1 hPa
- Relative accuracy: ± 0.12 hPa (typical), equivalent to ±1 m
- Average typical current consumption (1 Hz data rate): 3.4 μA @ 1 Hz
- Average current consumption (1 Hz data refresh rate): 2.74 μA, typical (ultra-low power mode)
- Average current consumption in sleep mode: 5.5 msec (ultra-low power preset)
- Supply voltage VDDIO: 1.2 … 3.6 V
- Supply voltage VDD: 1.71 … 3.6 V
- Resolution of data: Pressure: 0.01 hPa ( < 10 cm) , Temperature: 0.01° C
- Temperature coefficient offset(+25°…+40°C @900hPa): 1.5 Pa/K, equiv. to 12.6 cm/K
- Interface: I²C and SPI
Arduino Library: Adafruit BMP280 Library

Examples>Adafruit_BMP280_Library>bmp280test

- run Sketch>I2C_scanner to find I2Cdev addr = 0x76
- modify bmp280test.ino to set I2Cdev addr in bmp.begin(0x76) 
- Open serial-monitor & set baud=9600
 
This site was last updated June 17, 2025.

