Skip to content

Commit 5e72797

Browse files
committed
由PlanetX改过来的
1 parent 0201eb4 commit 5e72797

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+3538
-1
lines changed

18b20.py

Whitespace-only changes.

ASR.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from microbit import *
2+
3+
4+
class ASR(object):
5+
"""基本描述
6+
7+
语音识别传感器
8+
9+
Returns:
10+
value: 识别到的语音条目
11+
"""
12+
13+
def __init__(self, RJ_pin):
14+
pass
15+
16+
def get_ASR(self):
17+
"""基本描述
18+
19+
获取语音识别条目ID
20+
21+
"""
22+
t = i2c.read(0x0B, 1)
23+
return t[0]
24+
25+
26+
if __name__ == '__main__':
27+
asr = ASR()
28+
while True:
29+
print(asr.get_ASR())

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2020 Lionkk
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
# Octopus_MicroPython
2-
Microprython Library of Octopus series sensors
2+
老版Octopus的MicroPython模块

bme280.py

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
from microbit import *
2+
3+
BME280_I2C_ADDR = 0x76
4+
5+
6+
class BME280():
7+
def __init__(self):
8+
"""基本描述
9+
10+
BME280温度, 湿度, 气压传感器
11+
12+
Returns:
13+
temperature 摄氏温度 humidity 湿度 0-100 pressure 气压 hPa altitude 海拔高度 M 根据气压换算
14+
"""
15+
self._T1 = self.__g2r(0x88)
16+
self._T2 = self.__short(self.__g2r(0x8A))
17+
self._T3 = self.__short(self.__g2r(0x8C))
18+
self._P1 = self.__g2r(0x8E)
19+
self._P2 = self.__short(self.__g2r(0x90))
20+
self._P3 = self.__short(self.__g2r(0x92))
21+
self._P4 = self.__short(self.__g2r(0x94))
22+
self._P5 = self.__short(self.__g2r(0x96))
23+
self._P6 = self.__short(self.__g2r(0x98))
24+
self._P7 = self.__short(self.__g2r(0x9A))
25+
self._P8 = self.__short(self.__g2r(0x9C))
26+
self._P9 = self.__short(self.__g2r(0x9E))
27+
self._H1 = self.__gr(0xA1)
28+
self._H2 = self.__short(self.__g2r(0xE1))
29+
self._H3 = self.__gr(0xE3)
30+
a = self.__gr(0xE5)
31+
self._H4 = (self.__gr(0xE4) << 4) + (a % 16)
32+
self._H5 = (self.__gr(0xE6) << 4) + (a >> 4)
33+
self._H6 = self.__gr(0xE7)
34+
if self._H6 > 127:
35+
self._H6 -= 256
36+
self.__sr(0xF2, 0x04)
37+
self.__sr(0xF4, 0x2F)
38+
self.__sr(0xF5, 0x0C)
39+
self.__T = 0
40+
self.__P = 0
41+
self._H = 0
42+
43+
def __short(self, dat):
44+
if dat > 32767:
45+
return dat - 65536
46+
else:
47+
return dat
48+
49+
# set reg
50+
def __sr(self, reg, dat):
51+
i2c.write(BME280_I2C_ADDR, bytearray([reg, dat]))
52+
53+
# __get reg
54+
def __gr(self, reg):
55+
i2c.write(BME280_I2C_ADDR, bytearray([reg]))
56+
t = i2c.read(BME280_I2C_ADDR, 1)
57+
return t[0]
58+
59+
# __get two reg
60+
def __g2r(self, reg):
61+
i2c.write(BME280_I2C_ADDR, bytearray([reg]))
62+
t = i2c.read(BME280_I2C_ADDR, 2)
63+
return t[0] + t[1] * 256
64+
65+
def __get(self):
66+
adc_T = (self.__gr(0xFA) << 12) + (self.__gr(0xFB) << 4) + \
67+
(self.__gr(0xFC) >> 4)
68+
var1 = (((adc_T >> 3) - (self._T1 << 1)) * self._T2) >> 11
69+
var2 = (((((adc_T >> 4) - self._T1) * ((adc_T >> 4) - self._T1)) >> 12)
70+
* self._T3) >> 14
71+
t = var1 + var2
72+
self.__T = ((t * 5 + 128) >> 8) / 100
73+
var1 = (t >> 1) - 64000
74+
var2 = (((var1 >> 2) * (var1 >> 2)) >> 11) * self._P6
75+
var2 = var2 + ((var1 * self._P5) << 1)
76+
var2 = (var2 >> 2) + (self._P4 << 16)
77+
var1 = (((self._P3 * ((var1 >> 2) * (var1 >> 2)) >> 13) >> 3) +
78+
(((self._P2) * var1) >> 1)) >> 18
79+
var1 = ((32768 + var1) * self._P1) >> 15
80+
if var1 == 0:
81+
return # avoid exception caused by division by zero
82+
adc_P = (self.__gr(0xF7) << 12) + (self.__gr(0xF8) << 4) + \
83+
(self.__gr(0xF9) >> 4)
84+
p = ((1048576 - adc_P) - (var2 >> 12)) * 3125
85+
if p < 0x80000000:
86+
p = (p << 1) // var1
87+
else:
88+
p = (p // var1) * 2
89+
var1 = (self._P9 * (((p >> 3) * (p >> 3)) >> 13)) >> 12
90+
var2 = ((p >> 2) * self._P8) >> 13
91+
self.__P = p + ((var1 + var2 + self._P7) >> 4)
92+
adc_H = (self.__gr(0xFD) << 8) + self.__gr(0xFE)
93+
var1 = t - 76800
94+
var2 = (((adc_H << 14) - (self._H4 << 20) -
95+
(self._H5 * var1)) + 16384) >> 15
96+
var1 = var2 * (((((((var1 * self._H6) >> 10) * (
97+
((var1 * self._H3) >> 11) + 32768)) >> 10) + 2097152) *
98+
self._H2 + 8192) >> 14)
99+
var2 = var1 - (((((var1 >> 15) * (var1 >> 15)) >> 7) * self._H1) >> 4)
100+
if var2 < 0:
101+
var2 = 0
102+
if var2 > 419430400:
103+
var2 = 419430400
104+
self._H = (var2 >> 12) / 1024
105+
return [self.__T, self.__P, self._H]
106+
107+
# __get Temperature in Celsius ℃
108+
def get_temperature(self):
109+
"""
110+
111+
读取摄氏温度 C
112+
113+
"""
114+
self.__get()
115+
return self.__T
116+
117+
# __get Humidity in %RH
118+
def get_humidity(self):
119+
"""
120+
121+
读取湿度 %
122+
123+
"""
124+
self.__get()
125+
return self._H
126+
127+
# __get Pressure in Pa
128+
def get_pressure(self):
129+
"""
130+
131+
读取气压 pa
132+
133+
"""
134+
self.__get()
135+
return self.__P
136+
137+
# Calculating absolute altitude
138+
def get_altitude(self):
139+
"""
140+
141+
读取海拔高度 M
142+
143+
"""
144+
self.__get()
145+
return 44330 * (1 - (self.__P / 101325) ** (1 / 5.255))
146+
147+
# normal mode
148+
def set_power_on(self):
149+
"""
150+
151+
模块开始工作,实时监测环境变量
152+
153+
"""
154+
self.__sr(0xF4, 0x2F)
155+
156+
# sleep mode
157+
def set_power_off(self):
158+
"""
159+
160+
模块休眠,保留最后一次检测的环境值,不会刷新
161+
162+
"""
163+
self.__sr(0xF4, 0)
164+
165+
166+
if __name__ == '__main__':
167+
bme = BME280()
168+
while True:
169+
print("BME280_temperature_C:", bme.get_temperature(), "C")
170+
print("BME280_humidity:", bme.get_humidity(), "%")
171+
print("BME280_pressure:", bme.get_pressure(), "hPa")
172+
print("BME280_altitude:", bme.get_altitude(), "M")
173+
print("")
174+
sleep(500)
175+

button.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from microbit import *
2+
3+
4+
class BUTTON(object):
5+
"""基本描述
6+
7+
单个按钮
8+
9+
Args:
10+
pin: 连接端口
11+
12+
"""
13+
14+
def __init__(self, pin):
15+
self.__pin = pin
16+
self.__pin.set_pull(self.__pin.PULL_UP)
17+
18+
def Is_pressed(self) -> bool:
19+
"""基本描述
20+
21+
判断按钮按下
22+
23+
Returns:
24+
boolean: 按下返回True, 未按下返回False
25+
26+
"""
27+
if self.__pin.read_digital() == 0 and self.__pin.read_digital() == 1:
28+
return True
29+
else:
30+
return False
31+
32+
33+
if __name__ == '__main__':
34+
button = BUTTON(pin1)
35+
while True:
36+
if button.Is_pressed():
37+
display.show(Image.HAPPY)
38+
else:
39+
display.clear()

co.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from microbit import *
2+
3+
4+
class CO(object):
5+
"""基本描述
6+
7+
一氧化碳传感器
8+
9+
Args:
10+
pin: 连接端口
11+
12+
Returns:
13+
value: 一氧化碳值
14+
"""
15+
16+
def __init__(self, pin):
17+
self.__pin = pin
18+
19+
def get_co(self):
20+
"""基本描述
21+
22+
获取一氧化碳值
23+
24+
"""
25+
return self.__pin.read_analog()
26+
27+
28+
if __name__ == '__main__':
29+
co = CO(pin2)
30+
while True:
31+
print(co.get_co())

co2.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from microbit import *
2+
3+
class CO2(object):
4+
"""基本描述
5+
6+
二氧化碳传感器
7+
8+
Args:
9+
pin: 连接端口
10+
11+
Returns:
12+
value: 二氧化碳含量
13+
"""
14+
15+
def __init__(self, pin):
16+
self.__pin = pin
17+
18+
def get_co2(self):
19+
"""基本描述
20+
21+
获取二氧化碳值
22+
23+
"""
24+
return 1024 - self.__pin.read_analog()
25+
26+
27+
if __name__ == '__main__':
28+
co2 = CO2()
29+
while True:
30+
print(co2.get_co2())

0 commit comments

Comments
 (0)