移远QuecPython(基于EC600s)开发物联网应用(三) machine模块

从这一篇开始, 我们按模块一个个看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, 可能是固件还没做好吧. 这里留个坑, 在后续专题中补上

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值