1. LSM303传感器与ESP32的硬件协同
LSM303是一款集成了3轴加速度计和3轴磁力计的复合传感器,采用I2C接口通信。这款传感器在姿态检测、电子罗盘等场景中应用广泛,其加速度测量范围可编程设置为±2g/±4g/±8g/±16g,磁力计测量范围为±1.3/±1.9/±2.5/±4.0/±4.7/±5.6/±8.1高斯。
在ESP32开发板上,我们通常使用GPIO21(SDA)和GPIO22(SCL)作为I2C通信引脚。实际接线时需要注意:
- VCC接3.3V电源(绝对不可接5V)
- GND接地
- SDA接ESP32的GPIO21
- SCL接ESP32的GPIO22
重要提示:LSM303的I2C地址有多个变体,常见的是0x19(加速度计)和0x1E(磁力计)。如果读取失败,建议先用I2C扫描工具确认实际地址。
2. MicroPython驱动实现解析
2.1 I2C总线初始化
在MicroPython中初始化I2C总线是第一步操作。ESP32的I2C接口需要设置正确的时钟频率,对于LSM303推荐400kHz:
python复制from machine import I2C, Pin
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000)
2.2 传感器寄存器配置
LSM303需要配置多个寄存器才能正常工作。加速度计的关键配置包括:
- CTRL_REG1_A(0x20): 设置数据输出率和工作模式
- CTRL_REG4_A(0x23): 设置量程和分辨率
磁力计的配置寄存器:
- CRA_REG_M(0x00): 设置数据输出率
- CRB_REG_M(0x01): 设置增益(量程)
一个完整的初始化函数示例:
python复制def init_lsm303(i2c, accel_addr=0x19, mag_addr=0x1E):
# 初始化加速度计
i2c.writeto_mem(accel_addr, 0x20, b'\x57') # 100Hz输出率,所有轴使能
i2c.writeto_mem(accel_addr, 0x23, b'\x08') # ±2g量程
# 初始
