Skip to content

Commit c17ea0d

Browse files
authored
commint iic peripheral demo (#6)
* commit iic peripheral demo * remane iic demo path
1 parent e61b932 commit c17ea0d

File tree

2 files changed

+571
-0
lines changed

2 files changed

+571
-0
lines changed
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
'''
2+
File: i2c_qma7981.py
3+
Project: i2c
4+
File Created: Sunday, 11th March 2022 3:51:22 pm
5+
Author: elian.wang
6+
7+
-----
8+
Copyright 2022 - 2022 quectel
9+
'''
10+
11+
#import log
12+
from machine import I2C
13+
#from machine import I2C_simulation
14+
import utime as time
15+
"""
16+
1. calibration校准
17+
2. Trigger measurement触发器测量
18+
3. read data
19+
"""
20+
21+
# API 手册 http://qpy.quectel.com/wiki/#/zh-cn/api/?id=i2c
22+
# AHT10 说明书
23+
# https://server4.eca.ir/eshop/AHT10/Aosong_AHT10_en_draft_0c.pdf
24+
25+
26+
class aht10class():
27+
i2c_log = None
28+
i2c_dev = None
29+
i2c_addre = None
30+
31+
# Initialization command
32+
AHT10_CALIBRATION_CMD = 0xE1
33+
# Trigger measurement
34+
AHT10_START_MEASURMENT_CMD = 0xAC
35+
# reset
36+
AHT10_RESET_CMD = 0xBA
37+
38+
def write_data(self, data):
39+
print(self.i2c_addre, data, len(data))
40+
self.i2c_dev.write(self.i2c_addre,
41+
bytearray(0x00), 0,
42+
bytearray(data), len(data))
43+
pass
44+
45+
def read_data(self, length):
46+
print("read_data start")
47+
r_data = [0x00 for i in range(length)]
48+
r_data = bytearray(r_data)
49+
print("read_data start1")
50+
ret = self.i2c_dev.read(self.i2c_addre,
51+
bytearray(0x00), 0,
52+
r_data, length,
53+
0)
54+
print("read_data start2")
55+
print('ret',ret)
56+
print('r_data:',r_data)
57+
return list(r_data)
58+
59+
def aht10_init(self, addre=0x38, Alise="Ath10"):
60+
#self.i2c_log = log.getLogger(Alise)
61+
self.i2c_dev = I2C(I2C.I2C1, I2C.FAST_MODE) # 返回i2c对象 i2c类功能:用于设备之间通信的双线协议。
62+
print("test 11")
63+
#self.i2c_dev = I2C_simulation(I2C_simulation.GPIO19, I2C_simulation.GPIO20, 200) #asr
64+
#self.i2c_dev = I2C_simulation(I2C_simulation.GPIO10, I2C_simulation.GPIO11, 300) #zhanrui
65+
#self.i2c_dev = I2C_simulation(I2C_simulation.GPIO13, I2C_simulation.GPIO14, 500) #BC25
66+
#self.i2c_dev = I2C_simulation(I2C_simulation.GPIO3, I2C_simulation.GPIO4, 600) #gao
67+
self.i2c_addre = addre
68+
self.sensor_init()
69+
pass
70+
71+
def aht10_transformation_temperature(self, data):
72+
r_data = data
73+
# 根据数据手册的描述来转化温度
74+
humidity = (r_data[0] << 12) | (
75+
r_data[1] << 4) | ((r_data[2] & 0xF0) >> 4)
76+
humidity = (humidity/(1 << 20)) * 100.0
77+
print("current humidity is {0}%".format(humidity))
78+
temperature = ((r_data[2] & 0xf) << 16) | (
79+
r_data[3] << 8) | r_data[4]
80+
temperature = (temperature * 200.0 / (1 << 20)) - 50
81+
print("current temperature is {0}°C".format(temperature))
82+
83+
def sensor_init(self):
84+
'''
85+
传感器初始化,校准
86+
'''
87+
# calibration
88+
print("test 112")
89+
self.write_data([self.AHT10_CALIBRATION_CMD, 0x08, 0x00])
90+
print("test 113")
91+
time.sleep_ms(300) # at last 300ms
92+
print("test 114")
93+
pass
94+
95+
def ath10_reset(self):
96+
self.write_data([self.AHT10_RESET_CMD])
97+
time.sleep_ms(20) # at last 20ms
98+
99+
def Trigger_measurement(self):
100+
# Trigger data conversion
101+
self.write_data([self.AHT10_START_MEASURMENT_CMD, 0x33, 0x00])
102+
time.sleep_ms(200) # at last delay 75ms
103+
# check has success
104+
r_data = self.read_data(6)
105+
# check bit7
106+
if (r_data[0] >> 7) != 0x0:
107+
print("Conversion has error")
108+
else:
109+
self.aht10_transformation_temperature(r_data[1:6])
110+
111+
ath_dev = None
112+
113+
def i2c_aht10_test():
114+
global ath_dev
115+
ath_dev = aht10class()
116+
ath_dev.aht10_init()
117+
print("test 1")
118+
119+
# 测试十次
120+
for i in range(5):
121+
print("test 1 ",i)
122+
ath_dev.Trigger_measurement()
123+
print("test 1 end",i)
124+
time.sleep(1)
125+
126+
127+
if __name__ == "__main__":
128+
print('start')
129+
i2c_aht10_test()

0 commit comments

Comments
 (0)