查看: 482|回复: 1
打印 上一主题 下一主题

读取小e开发板上的BMP180传感器

[复制链接] qrcode

23

主题

36

帖子

102

积分

注册会员

Rank: 2

积分
102
楼主
跳转到指定楼层
发表于 2016-7-2 04:35 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 shaoziyang 于 2016-7-2 16:36 编辑

小e开发板上带有BMP180气压传感器,使用micropython,可以很方便的读取传感器参数。

首先BMP180驱动,然后就可以直接读取。

  1. from bmp180 import BMP180

  2. b=BMP180(2,14)
  3. b.getTemp()
  4. b.getPress()
  5. b.getAltitude()
复制代码

BMP180的micropython驱动

  1. import machine, time
  2. from machine import I2C, Pin

  3. BMP180_I2C_ADDR = const(0x77)

  4. class BMP180():
  5.     def __init__(self, pSDA, pSCL):
  6.         self.i2c = I2C(scl=Pin(pSCL), sda=Pin(pSDA), freq = 100000)
  7.         self.AC1 = self.short(self.get2Reg(0xAA))
  8.         self.AC2 = self.short(self.get2Reg(0xAC))
  9.         self.AC3 = self.short(self.get2Reg(0xAE))
  10.         self.AC4 = self.get2Reg(0xB0)
  11.         self.AC5 = self.get2Reg(0xB2)
  12.         self.AC6 = self.get2Reg(0xB4)
  13.         self.B1 = self.short(self.get2Reg(0xB6))
  14.         self.B2 = self.short(self.get2Reg(0xB8))
  15.         self.MB = self.short(self.get2Reg(0xBA))
  16.         self.MC = self.short(self.get2Reg(0xBC))
  17.         self.MD = self.short(self.get2Reg(0xBE))
  18.         self.UT = 0
  19.         self.UP = 0
  20.         self.B3 = 0
  21.         self.B4 = 0
  22.         self.B5 = 0
  23.         self.B6 = 0
  24.         self.B7 = 0
  25.         self.X1 = 0
  26.         self.X2 = 0
  27.         self.X3 = 0

  28.     def short(self, dat):
  29.         if dat > 32767:
  30.             return dat - 65536
  31.         else:
  32.             return dat
  33.    
  34.     def setReg(self, dat, reg):
  35.         buf = bytearray(2)
  36.         buf[0] = reg
  37.         buf[1] = dat
  38.         self.i2c.writeto(BMP180_I2C_ADDR, buf)
  39.         
  40.     def getReg(self, reg):
  41.         buf = bytearray(1)
  42.         buf[0] = reg
  43.         self.i2c.writeto(BMP180_I2C_ADDR, buf)
  44.         t = self.i2c.readfrom(BMP180_I2C_ADDR, 1)
  45.         return t[0]
  46.    
  47.     def get2Reg(self, reg):
  48.         a = self.getReg(reg)
  49.         b = self.getReg(reg + 1)
  50.         return a*256 + b

  51.     def measure(self):
  52.         self.setReg(0x2E, 0xF4)
  53.         time.sleep_ms(5)
  54.         self.UT = self.get2Reg(0xF6)
  55.         self.setReg(0x34, 0xF4)
  56.         time.sleep_ms(5)
  57.         self.UP = self.get2Reg(0xF6)

  58.     def getTemp(self):
  59.         self.measure()
  60.         self.X1 = (self.UT - self.AC6) * self.AC5/(1<<15)
  61.         self.X2 = self.MC * (1<<11) / (self.X1 + self.MD)
  62.         self.B5 = self.X1 + self.X2
  63.         return (self.B5 + 8)/160
  64.         
  65.     def getPress(self):
  66.         self.getTemp()
  67.         self.B6 = self.B5 - 4000
  68.         self.X1 = (self.B2 * (self.B6*self.B6/(1<<12))) / (1<<11)
  69.         self.X2 = (self.AC2 * self.B6)/(1<<11)
  70.         self.X3 = self.X1 + self.X2
  71.         self.B3 = ((self.AC1*4+self.X3) + 2)/4

  72. ...
复制代码

驱动文件下载






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

88

帖子

4

积分

新手上路

Rank: 1

积分
4
沙发
发表于 2016-7-2 04:35 PM | 只看该作者
使用前,需要将两个蓝色的短路块连上。

SCL = GPIO14
SDA = GPIO2
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表