怎样做网站营销,做数据权威的网站,wordpress新浪图床,嵊州建设银行取款网站简介
使用BearPi IOT Std开发板及其扩展板E53_SC1#xff0c; SC1上有I2C1 的光照强度传感器BH1750 和 EEPROM AT24C02#xff0c; 本次主要就是读取光照强度;
主板: 主芯片: STM32L431RCT6LED : PC13 \ 推挽输出\ 高电平点亮串口: Usart1I2C使用 : I2C1E53_SC1扩展板 : LE…简介
使用BearPi IOT Std开发板及其扩展板E53_SC1 SC1上有I2C1 的光照强度传感器BH1750 和 EEPROM AT24C02 本次主要就是读取光照强度;
主板: 主芯片: STM32L431RCT6LED : PC13 \ 推挽输出\ 高电平点亮串口: Usart1I2C使用 : I2C1E53_SC1扩展板 : LED PB9 \ 推挽输出 \ 高电平点亮光照强度传感器BH1750EEPROM芯片 : AT24C02步骤
创建项目 参考 BearPi IOT Std板 RT-Thread 工程创建开启rt-thread i2c支持 rtconfig.h 文件中添加
/* rt-thread 开启i2c支持 */
#define RT_USING_I2C // RT-Thread开启I2C
#define RT_USING_I2C_BITOPS // RT-Thread 启用 I2C 位操作功能/* 注册i2c1设备 */
#define BSP_USING_I2C1 // 开启I2C1, 启用该块代码
#define BSP_I2C1_SCL_PIN 22 // i2c1初始化的时候使用
#define BSP_I2C1_SDA_PIN 23 // i2c1初始化的时候使用env 指令 scons --targetmdk5 -s 更新支持模块到Keil工程文件中 编译烧录 list device # 可以看到i2c1 设备了 添加使用代码
#include board.h
#include rtthread.h
#include drv_gpio.h
#ifndef RT_USING_NANO
#include rtdevice.h
#endif /* RT_USING_NANO */int main(void)
{struct rt_i2c_bus_device *i2c_bus; /* I2C总线设备句柄 */float lux 0.0;uint8_t temp[2];uint8_t cmd 0x11;rt_kprintf(---Welcome use BearPi---\n);
i2c_bus (struct rt_i2c_bus_device *)rt_device_find(i2c1); // 获取注册i2c1设备if (i2c_bus ! RT_NULL){rt_kprintf(init succeed!\n);rt_kprintf(send result: %d\n, rt_i2c_master_send(i2c_bus, 0x23, RT_I2C_WR, cmd, 1)); // 发送连续读H分辨率模式到BH1750rt_thread_mdelay(180); // 延时180msrt_kprintf(recv result: %d\n, rt_i2c_master_recv(i2c_bus, 0x23, RT_I2C_RD, temp, 2)); // 读取BH1750传来的光照强度数据/* 计算光照强度数据 */lux (float)((temp[0]8)|temp[1]);lux / (float)(1.2);rt_kprintf(LUX : %f\n, lux);}
}编译烧录串口打开 复位查看
前言后说 读取BH1750地址差异 裸机API HAL_I2C_Master_Transmit DeviceAddress 是 0x46(写) HAL_I2C_Master_Receive, DeviceAddress 是 0x47(读) RT-Thread API rt_i2c_master_send, Address 是 0x23 rt_i2c_master_recv, Address 是 0x23 两者的差异主要是裸机API中的设备地址包含了读/写位 0100011 0(包含写/读位) - 0x46(写) 0100011 1(包含写/读位) - 0x47(读) 0100011(不包含写/读位) - 0x23 使用 rt_kprintf 打印不了浮点数 将 rt-thread/src/kservice.c 里面 rt_kprintf 实现函数中的 length rt_vsnprintf(rt_log_buf, sizeof(rt_log_buf) - 1, fmt, args); 改为 length vsnprintf(rt_log_buf, sizeof(rt_log_buf) - 1, fmt, args); 记得加上头文件和Keil中设置Micro Lib库支持
项目代码
参考
RT-Thread I2C总线设备 BearPi IOT Std板 RT-Thread 工程创建 BearPi Std 板从入门到放弃 - 先天神魂篇2(RT-Thread LED PWM驱动)