- 移远QuecPython(基于EC600s)开发物联网应用(三)
- 移远QuecPython(基于EC600s)开发物联网应用(二)
- 移远QuecPython(基于EC600s)开发物联网应用(一)
- 移远QuecPython(基于EC600s)开发物联网应用(九)
- 移远QuecPython(基于EC600s)开发物联网应用(六)
- 移远QuecPython(基于EC600s)开发物联网应用(七)
- 移远QuecPython(基于EC600s)开发物联网应用(八)
- 移远QuecPython(基于EC600s)开发物联网应用(四)
- 移远QuecPython(基于EC600s)开发物联网应用(五)
- 使用北向 API 实现趋势监控
从这一篇开始, 我们按模块一个个看QuecPython相关内容, 虽然大家都很期待4G,IOT相关的模块, 但我们还是要从基础的machine模块开始
一. machine.Pin
详见上一篇GPIO部分 : https://www.jianshu.com/p/57e38295105a
二. machine.UART
详见上一篇UART部分
三. machine.Timer 硬件定时器
EC600s有硬件定时器0-3, 使用定时器时需注意:定时器0-3,每个在同一时间内只能执行一件任务,且多个对象不可使用同一个定时器。
1. 创建Timer对象
from machine import Timer
timer1 = Timer(Timer.Timer1)
2. 启动定时器
timer.start(period, mode, callback)
参数:
这里要注意, 传参要传关键字参数, 位置参数并不能正常运行,
此外, 回调函数有默认隐式参数args, callback里要建立形参args接收,否则报错
返回值
启动成功返回整型值0,失败返回整型值-1。
3. 关闭定时器
timer.stop()
参数:
无
返回值
启动成功返回整型值0,失败返回整型值-1。
4. 举例: 倒计时
from machine import Timer
count = 20
def timer0_callback(args):
global count
count -=1
print("默认传参:",args)
print(count)
if count <=0:
timer0.stop()
timer0= Timer(Timer.Timer0)
timer0.start(period=1000, mode=Timer.PERIODIC, callback=timer0_callback)
四. machine.ExtInt
详见上一篇UART部分
五. machine.RTC 设置rtc时间
1. 创建RTC对象
from machine import RTC
rtc = RTC()
2. 读写时间
设置和获取RTC时间,不带参数时,则用于获取时间,带参数则是设置时间;设置时间的时候,参数week不参于设置,microsecond参数保留,暂未使用,默认是0。
rtc.datetime([year, month, day, week, hour, minute, second, microsecond])
设置时间和读取时间是一个方法, 写参数就是设置,不写参数就是读取
rtc.datetime([2020, 3, 12, 1, 12, 12, 12, 0])
六. machine.I2C // I2C通讯
1. 创建IIC对象
from machine import I2C
i2c_obj = I2C(I2Cn, MODE)
2. 读取IIC总线数据
I2C.read(slaveaddress, addr,addr_len, r_data, datalen, delay)
3. I2C 总线中写入数据
I2C.write(slaveaddress, addr, addr_len, data, datalen)
4. 举例: 读取AHT10温湿度传感器
from machine import I2C
import utime
AHT10_ADDRESS = 0x38 # AHT10 i2c地址
AHT_TEMPERATURE_CONST = 200 # 温度常量
AHT_TEMPERATURE_OFFSET = 50 # 温度偏移
CMD_INITIALIZE = bytearray([0xE1, 0x08, 0x00]) # 初始化命令
CMD_RESET = bytearray(0xBA) # 复位命令
CMD_MEASURE = bytearray([0xAC, 0x33, 0x00]) # 测量命令
class AHT10:
def __init__(self, i2c):
if i2c is None:
raise ValueError('I2C object required.')
self.i2c = i2c
self.address = AHT10_ADDRESS
self.aht10_init()
self.readings_raw = bytearray(6)
self.results_parsed = [0, 0]
def aht10_init(self):
self.aht10_reset()
self.i2c.write(self.address, bytearray(0x00), 0,
CMD_INITIALIZE, len(CMD_INITIALIZE))
def aht10_reset(self):
self.i2c.write(self.address, bytearray(
0x00), 0, CMD_RESET, len(CMD_RESET))
utime.sleep(0.4)
def read_raw(self):
self.i2c.write(self.address, bytearray(0x00), 0, CMD_MEASURE, len(CMD_MEASURE))
utime.sleep(0.2)
self.i2c.read(self.address, bytearray(
0x00), 0, self.readings_raw, 6, 0)
self.results_parsed[0] = self.readings_raw[1] << 12 | self.readings_raw[2] << 4 | self.readings_raw[3] >> 4
self.results_parsed[1] = (
self.readings_raw[3] & 0x0F) << 16 | self.readings_raw[4] << 8 | self.readings_raw[5]
# 湿度
@property
def humidity(self):
self.read_raw()
return (self.results_parsed[0] / 0x100000) * 100
# 温度
@property
def temperature(self):
self.read_raw()
return (self.results_parsed[1] / 0x100000) * AHT_TEMPERATURE_CONST - AHT_TEMPERATURE_OFFSET
# 打印方法
def print(self):
print("Temperature: " + str(self.temperature) +
"C" + ", Humidity: " + str(self.humidity))
if __name__ == "__main__":
i2c = I2C(I2C.I2C1, I2C.STANDARD_MODE)
aht10 = AHT10(i2c)
for i in range(10):
aht10.print()
utime.sleep(2)
七. machine.SPI
1. 实例化SPI
from machine import SPI
spi_obj = SPI(port, mode, clk)
2. 写入数据
SPI.write(data, datalen)
3. 读取数据
SPI.read(recv_data, datalen)
4. 写入数据并接收
SPI.write_read(r_data,data, datalen)
5. 举例
待添加
八. machine.WDT //看门狗
这里说的看门狗是软狗, 应用程序发生异常不执行时进行系统重启操作
1. 实例化看门狗
from machine import WDT
wdt = WDT(period)
2.喂狗
wdt.feed()
3. 关闭软狗功能
wdt.stop()
九. LCD
QuecPython会内置一些常用的LCD屏幕的驱动, 我的板子客服告诉我不支持LCD, 可能是固件还没做好吧. 这里留个坑, 在后续专题中补上
网友评论