本帖最后由 独行客 于 2016-5-29 08:26 编辑
【bananapi BPI-M3】08 BMP085温度气压传感器读写笔记 所有资料镜像工具都分享到百度网盘: http://pan.baidu.com/s/1c1UzF00 没有密码,欢迎下载~~~~~~ QQ:277563381 系统是:【ubuntu-mate-15.10-desktop-armhf-raspberry-pi-2-bpi-m3-sd-emmc-20151203.img】 是之前烧写到eMMC里面的了
要提前安装好 【BPI-WiringPi】哦,这个I2C操作依赖BPI-WiringPi里面的库
1. 上实物图:
你以为模块是这样子的:
可惜现实是这样的,没有做板,自己用万能板反过来连接引出对应IO口。 这个模块是很久以前买的芯片,然后很久以前用洞洞板做的。
2. 原理图
来自官方规格书,其中只需要 电源(3.3V) 地(GND) SDA SCL 4条线 接出来即可,XCLR 悬空是不行的, (后来试验,必须上拉XCLR,否则设备会复位检测不到)相当于片选, ,只有一个芯片时要高电平使能
3. 接线说明 把模块上的 4条线 电源(3.3V) 地(GND) SDA SCL 分别接到香蕉派 BPI-M3的扩展口上,如下:
扩展口定义如下
电源(3.3V) 接扩展口 1脚 3.3V 地(GND) 接扩展口 9脚 GND SDA接扩展口 3脚TWI2-SDA SCL接扩展口 5脚TWI2-SCK
实物是这样子的:
参考别人的接线图
解释下TWI2-SDA: TWI实际就表示I2C总线,是当初atmel公司为了省去给MICROCHIP专利费而改用TWI,实际上协议基本一样的,当然现在atmel公司已经被MICROCHIP收购了。 TWI2后面的 2表示I2C的第二条I2C数据总线 ,香蕉派好像还有另外2条 TWI0 和TWI1 SDA 表示数据总线 SCL 表示时钟总线
1. 扫描I2C线上的设备 打开SSH终端,登陆后,用root账号操作 - bpi@bananapi:~$su
- 密碼:
- root@bananapi:/home/bpi#
复制代码
利用命令 来扫描I2C总线上的设备
i2cdetect -y 2 说明 -y 指定总线序号 2即刚才的TWI2
- root@bananapi:/home/bpi#i2cdetect -y 2
复制代码
发现 一个设备 77 的设备地址有设备 但是 BMP085的设备地址不是写地址0xEE吗,怎么是0x77呢? 后来才知道 0x77是设备地址的高7位,用XP自带的计算器的计算器转换后为 1110111 最后一位 读为1 写为0即: - 0xEE = 11101110B
- 0xFF= 11101111B
复制代码
读出设备里面的数据看看
5. 写(抄代码)试验模块BMP085 BING了下,github上有开源用于树莓派的BMP085源码 于是下载下来试试 地址在这:https://github.com/mvadai/BMP085 下载命令: - #git clone https://github.com/mvadai/BMP085.git
复制代码
下载后,没有Makefile,不方便编译,于是自己写了一个简单的
编译同时安装命令: 运行命令输入: - ./MV_bmp085
- root@bananapi:/home/bpi/sourceCodeBPI-M3/BMP085#./MV_bmp085
- Temperature: 28.0 *C,Pressure: 100245 Pa
复制代码
安装 然后就可以在终端任意路径调用了,当make时已经自动安装了
另外,我写了个简单脚本,每隔2秒刷新显示气压温度
- while true;
- do
- ./MV_bmp085
- sleep 2
- done
复制代码
运行脚本命令 - root@bananapi:/home/bpi/sourceCodeBPI-M3/BMP085#sh dispAll.sh
- Temperature: 28.0 *C,Pressure: 100241 Pa
复制代码
整个工程我已经修改好,打包上来了
BMP085-源码.zip
BMP085.pdf
总结: 后来测试发现总是偶尔读取温度气压不正常,用测试脚本检测: - $ while true; doi2cdetect -y 2; sleep 2; done
复制代码
偶尔可以发现设备,后来查看规格书,发现XCLR脚要拉高,悬空只有2.几伏,受点干扰就会造成模块复位(低电平), 于是强行把XCLR脚接到3.3V,理论上是要接上拉电阻到3.3V的,再测试发现问题解决
|