探索MicroPython(四)--传感器应用
传感器应用
- 1. 三轴加速度计MMA7660
- 2. 温度传感器DS18B20
- 3. 温湿度传感器DHT11
- 4. 气压传感器BMP280
1. 三轴加速度计MMA7660
pyBoard中内置了一个三轴加速度计MMA7660,输出x,y,z三个轴的加速度,测量范围大概是-1.5g到1.5g。pyb中关于MMA7660的构造函数和使用方法如下所示:
示例代码为:
import pyb
from machine import Pin,I2C#初始化相关模块
accel = pyb.Accel()#测量结果
x = accel.x()
y = accel.y()
z = accel.z()
2. 温度传感器DS18B20
DS18B20是常用的温度传感器,它是单总线式传感器,连接原理图如下所示:
pyBoard中单总线模块文件是"onewire.py",DS18B20模块文件是"DS18X20.py",单总线模块的构造函数和使用方法为:
DS18B20的模块的构造函数和使用方法为:
温度传感器代码示例:
#引用相关模块
from pyb import delay
from machine import Pin,I2C
from onewire import OneWire
from ds18x20 import DS18X20#初始化DS18B20
ow= OneWire(Pin('X11')) #使能单总线
ds = DS18X20(ow) #传感器是DS18B20
rom = ds.scan() #扫描单总线上的传感器地址,支持多个传感器同时连接while True:ds.convert_temp() #温度采集转换temp = ds.read_temp(rom[0]) #温度显示,rom[0]为第1个DS18B20
3. 温湿度传感器DHT11
DHT11也是常见的和常用的湿度传感器,其也是单总线传感器。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200203132102286.png?#pic_center =300x225#pic_center =500x)
pyBoard中dht11.py文件中的构造函数和使用方法为:
DHT11的示例代码为:
#引入相关模块
from pyb import delay
from machine import Pin,I2C
from dht import DHT11#创建DTH11对象dt
dt=DHT11(Pin('X12'))
delay(1000) #首次启动停顿1秒然传感器稳定while True:dt.measure() #温湿度采集te=dt.temperature() #获取温度值dh=dt.humidity() #获取湿度值
4. 气压传感器BMP280
BMP280是常用的气压传感器,我们需要编写BMP280的驱动文件“bmp280.py”,该模块文件中的构造函数和使用方法为:
BMP280的代码示例为:
import pyb
import bmp280
from machine import Pin,I2C#初始化BMP280,I2C接口2
BMP = bmp280.BMP280(I2C(2))#测量结果
Tem = BMP.getTemp()
Pre = BMP.getPress()
Alt = BMP.getAltitude()
bmp280.py中的代码为:
BMP280_I2C_ADDR = const(0x76)class BMP280():def __init__(self, i2c):self.i2c = i2cself.dig_T1 = self.get2Reg(0x88)self.dig_T2 = self.short(self.get2Reg(0x8A))self.dig_T3 = self.short(self.get2Reg(0x8C))self.dig_P1 = self.get2Reg(0x8E)self.dig_P2 = self.short(self.get2Reg(0x90))self.dig_P3 = self.short(self.get2Reg(0x92))self.dig_P4 = self.short(self.get2Reg(0x94))self.dig_P5 = self.short(self.get2Reg(0x96))self.dig_P6 = self.short(self.get2Reg(0x98))self.dig_P7 = self.short(self.get2Reg(0x9A))self.dig_P8 = self.short(self.get2Reg(0x9C))self.dig_P9 = self.short(self.get2Reg(0x9E))self.mode = 3self.osrs_p = 3self.osrs_t = 1self.setReg(0xF4, 0x2F)self.setReg(0xF5, 0x0C)self.filter = 3self.T = 0self.P = 0self.version = '1.0'def short(self, dat):if dat > 32767:return dat - 65536else:return dat# set regdef setReg(self, reg, dat):self.i2c.writeto(BMP280_I2C_ADDR, bytearray([reg, dat]))# get regdef getReg(self, reg):self.i2c.writeto(BMP280_I2C_ADDR, bytearray([reg]))t = self.i2c.readfrom(BMP280_I2C_ADDR, 1)return t[0]# get two regdef get2Reg(self, reg):self.i2c.writeto(BMP280_I2C_ADDR, bytearray([reg]))t = self.i2c.readfrom(BMP280_I2C_ADDR, 2)return t[0] + t[1]*256def get(self):adc_T = (self.getReg(0xFA)<<12) + (self.getReg(0xFB)<<4) + (self.getReg(0xFC)>>4)var1 = (((adc_T>>3)-(self.dig_T1<<1))*self.dig_T2)>>11var2 = (((((adc_T>>4)-self.dig_T1)*((adc_T>>4) - self.dig_T1))>>12)*self.dig_T3)>>14t = var1+var2self.T = ((t * 5 + 128) >> 8)/100var1 = (t>>1) - 64000var2 = (((var1>>2) * (var1>>2)) >> 11 ) * self.dig_P6var2 = var2 + ((var1*self.dig_P5)<<1)var2 = (var2>>2)+(self.dig_P4<<16)var1 = (((self.dig_P3*((var1>>2)*(var1>>2))>>13)>>3) + (((self.dig_P2) * var1)>>1))>>18var1 = ((32768+var1)*self.dig_P1)>>15if var1 == 0:return # avoid exception caused by division by zeroadc_P = (self.getReg(0xF7)<<12) + (self.getReg(0xF8)<<4) + (self.getReg(0xF9)>>4)p=((1048576-adc_P)-(var2>>12))*3125if p < 0x80000000:p = (p << 1) // var1else:p = (p // var1) * 2var1 = (self.dig_P9 * (((p>>3)*(p>>3))>>13))>>12var2 = (((p>>2)) * self.dig_P8)>>13self.P = p + ((var1 + var2 + self.dig_P7) >> 4)return [self.T, self.P]# get Temperature in Celsiusdef getTemp(self):self.get()return self.T# get Pressure in Padef getPress(self):self.get()return self.P# Calculating absolute altitudedef getAltitude(self):return '%.2f'%(44330*(1-(self.getPress()/101325)**(1/5.256)))# sleep modedef poweroff(self):self.setReg(0xF4, 0)# normal modedef poweron(self):self.setReg(0xF4, 0x2F)
探索MicroPython(四)--传感器应用相关推荐
- 由于开发者通过接口修改了菜单配置_Android SDK开发艺术探索(四)个性化配置...
一.前言 本篇是Android SDK开发艺术探索系列的第四篇文章.介绍了通过流式API设计思想优雅地实现SDK的自定义选项配置需求. 目录概览: 一.前言 二.SDK自定义配置2.1.什么是自定义配 ...
- Docker在英雄联盟游戏中的实践探索(四)
本文讲的是Docker在英雄联盟游戏中的实践探索(四),[编者的话]这篇博客是Riot的Docker实践系列博客的第四篇,主要讨论了如何添加一个基于Nginx的代理容器,以及如何用Compose来管理 ...
- android权限级别探索(四),Work Profile/Profile Owner的开启与功能
一.什么是Work Profile 因为Work Profile在体验上与Device Owner和Device admin有很大的差别,所以在讲怎么开启profileOwner之前先讲一下什么是 ...
- 探索MicroPython(一)--基础介绍
基础知识 1. MicroPython简介 2. 支持的微控制器平台 3. 开发套件简介 1. MicroPython简介 MicroPython是 Python 3编程语言的精简高效实现,包括Pyt ...
- Jetpack Compose 深入探索系列四: Compose UI
通过 Compose runtime 集成 UI Compose UI 是一个 Kotlin 多平台框架.它提供了通过可组合函数发出 UI 的构建块和机制.除此之外,这个库还包括 Android 和 ...
- 前后端分离的探索(四)
文桥,13级机械电子工程系,大四学生.在LSGO软件技术团队负责前端部分,本图文是介绍目前流行的前后端分离技术的第四篇(一共六篇),希望大家能够对这块有所了解.
- Android深度探索第四章感想
第四章讲的是源代码的下载和编译.Android源代码中包含了很多东西,如内嵌在Android系统中的应用程序(拍照.计算器.日历.相册.拨号器等等)的源代码:Android SDK带的各种工具的源代码 ...
- 探索MicroPython(三)--基础操作示例
基础操作示例 1. LED 2. 按键 3. GPIO 4. 外部中断 5. I2C总线 6. ADC 7. DAC 8. UART 1. LED pyBoard中一共有4个LED,分别是是LED(1 ...
- 探索MicroPython(二)--搭建开发环境
搭建开发环境 1. 简述 2. 安装Python3 3. 安装Mu 4. 安装驱动 5. 更新固件 6. 运行程序 1. 简述 pyBoard上使用了STM32自身flash的一定空间作为U盘与电脑进 ...
最新文章
- 春运渡劫!Python给我抢回家的火车票
- Android游戏开发指南lt;一gt;背景地图
- html5 如何实现客户端验证上传文件的大小
- luogu P1007 独木桥
- 人工智能AI实战100讲(七)-原理+代码实战 | 双目视觉中的极线校正
- 学习 - java位运算符
- php里的utf-8编码,php – 修复损坏的UTF-8编码
- hashMap 底层原理+LinkedHashMap 底层原理+常见面试题
- 在HTML中插入回车换行
- DP练习(初级):ZigZag
- 诡异的dp(凸多边形分割):catalan数
- paip.日期时间操作以及时间戳uapi php java python 总结
- java ssm基于springboot的设备巡检系统
- 烂土豆 (ms16-075) 提权方法
- 解决google扩展程序已损坏的问题
- SameSite cookie 理解与设置
- 我们祝你虎虎生威! 百条春节短信奉送
- String.contains()方法
- (链表)Java 求解环形链表 II
- amp;quot;等java转义
热门文章
- yum install git Could not resolve host: ftp.twaren.net; Unknown error
- php mkdir用户,PHP mkdir()无写权限的问题解决方法
- 怎样让html中元素不被其他元素遮挡_Web前端开发之HTML元素
- 小程序的 rpx布局问题
- mysql参数之innodb_buffer_pool_size大小设置
- 坑:找到LoadRunner中Recording Options和 Run Time Settings配置选项确实的原因
- day05 数据类型
- vertical-align属性探究
- Debit and Credit Memo
- 两个getchar,一个getchar,getch的不同点 出现的不同情况