美文网首页
移远QuecPython(基于EC600s)开发物联网应用(二)

移远QuecPython(基于EC600s)开发物联网应用(二)

作者: 熊爸天下_56c7 | 来源:发表于2021-05-12 09:52 被阅读0次

    一. GPIO

    1. 创建gpio对象

    from machine import Pin
    gpio = Pin(GPIOn, direction, pullMode, level)
    

    参数:

    • GPIOn: 引脚号 int类型
    EC600SCN/EC600NCN平台引脚对应关系如下(引脚号为模块外部引脚编号):
    GPIO1 – 引脚号10
    GPIO2 – 引脚号11
    GPIO3 – 引脚号12
    GPIO4 – 引脚号13
    GPIO5 – 引脚号14
    GPIO6 – 引脚号15
    GPIO7 – 引脚号16
    GPIO8 – 引脚号39
    GPIO9 – 引脚号40
    GPIO10 – 引脚号48
    GPIO11 – 引脚号58
    GPIO12 – 引脚号59
    GPIO13 – 引脚号60
    GPIO14 – 引脚号61
    GPIO15 – 引脚号62
    GPIO16 – 引脚号63
    GPIO17 – 引脚号69
    GPIO18 – 引脚号70
    GPIO19 – 引脚号1
    GPIO20 – 引脚号3
    GPIO21 – 引脚号49
    GPIO22 – 引脚号50
    GPIO23 – 引脚号51
    GPIO24 – 引脚号52
    GPIO25 – 引脚号53
    GPIO26 – 引脚号54
    GPIO27 – 引脚号55
    GPIO28 – 引脚号56
    GPIO29 – 引脚号57
    
    • direction : IN – 输入模式,OUT – 输出模式
    • pullMode : 输入输出模式
    PULL_DISABLE – 浮空模式
    PULL_PU – 上拉模式
    PULL_PD – 下拉模式
    
    • level : 0 - 设置引脚为低电平, 1- 设置引脚为高电平

    关于GPIO我想多说一下:
    我使用如下语句打印了一下Pin对象

    from machine import Pin
    print(dir(Pin))
    

    发现和官方文档描述不一致, 让我不知所措😱😱😱, 为什么没有21~29引脚呢? 难道我固件下错了? 难道是这些引脚有其它默认用途??

    2. 读取引脚电平

    Pin.read()
    

    参数:

    返回值
    PIN脚电平,0-低电平,1-高电平。

    3.设置引脚高低电平

    Pin.write(value)
    

    参数:

    • value int 0 - 当PIN脚为输出模式时,设置当前PIN脚输出低;1 - 当PIN脚为输出模式时,设置当前PIN脚输出高

    返回值
    设置成功返回整型值0,设置失败返回整型值-1。

    4. 举例: LED闪烁

    为了防止死循环无法跳出,我都用固定次数的循环代替while True

    from machine import Pin  # 导入Pin模块
    import utime  # 导入utime模块
    
    led = Pin(Pin.GPIO11, Pin.OUT, Pin.PULL_DISABLE, 0)  # GPIO11配置成输出模式,默认输出0
    for i in range(30):
      led.write(0 if led.read() else 1) #用read读取led的状态,然后取反
      utime.sleep(1)
    

    5. 举例2: 按键亮灯灭灯

    KEY1亮灭灯,KEY2结束程序

    from machine import Pin  # 导入Pin模块
    import utime  # 导入utime模块
    
    key1_pin = Pin.GPIO13 
    led1_pin = Pin.GPIO11   
    key2_pin = Pin.GPIO12   #用来打破while省的我重新烧固件 
    
    led = Pin(led1_pin, Pin.OUT, Pin.PULL_DISABLE, 0)
    key1 = Pin(key1_pin, Pin.IN, Pin.PULL_PU, 1)
    key2 = Pin(key2_pin, Pin.IN, Pin.PULL_PU, 1)
    
    
    ledflag = True
    while key2.read():
      if not key1.read():
        utime.sleep_ms(50)
        if not key1.read():
          ledflag = not ledflag
          while not key1.read():
            pass
      led.write(ledflag)
      utime.sleep_ms(10)
    
    print("end")
    

    二. 外部中断

    EC600 14个 外部中断引脚。 从GPIO1~GPIO14
    EC600SCN平台引脚对应关系如下(引脚号为模块外部引脚编号):
    GPIO1 – 引脚号10
    GPIO2 – 引脚号11
    GPIO3 – 引脚号12
    GPIO4 – 引脚号13
    GPIO5 – 引脚号14
    GPIO6 – 引脚号15
    GPIO7 – 引脚号16
    GPIO8 – 引脚号39
    GPIO9 – 引脚号40
    GPIO10 – 引脚号48
    GPIO11 – 引脚号58
    GPIO12 – 引脚号59
    GPIO13 – 引脚号60
    GPIO14 – 引脚号61

    1. 创建中断

    from machine import ExtInt
    extint = ExtInt(GPIOn, mode, pull, callback)
    

    参数:

    • GPIOn: 引脚号 int类型
    • mode : 设置触发方式:
      IRQ_RISING – 上升沿触发
      IRQ_FALLING – 下降沿触发
      IRQ_RISING_FALLING – 上升和下降沿触发
    • pull : 初始上下拉
      PULL_DISABLE – 浮空模式
      PULL_PU – 上拉模式
      PULL_PD – 下拉模式
    • callback: 中断触发回调函数

    2. 使能extint对象外部中断

    extint.enable()
    

    参数

    返回值
    成功返回整型0,失败返回整型-1。

    3. 禁用与extint对象关联的中断

    extint.disable()
    

    参数

    返回值
    成功返回整型0,失败返回整型-1。

    4. 返回引脚映射的行号

    extint.line()
    

    参数

    返回值
    引脚映射的行号。

    举例: 中断点灯

    from machine import ExtInt,Pin
    
    ledFlag = False
    key2 = Pin(Pin.GPIO12, Pin.IN, Pin.PULL_PU, 1)
    led = Pin(Pin.GPIO11, Pin.OUT, Pin.PULL_PU, 0)
    def key1_callback(args):
        global ledFlag
        ledFlag = not ledFlag
        print(args)
        print("switch led to:" , ledFlag)
        led.write(ledFlag)
    
    
    key1 = ExtInt(ExtInt.GPIO13, ExtInt.IRQ_FALLING, ExtInt.PULL_PU, key1_callback)
    key1.enable()
    while key2.read():
      pass
    

    三. PWM

    EC600SCN平台,支持PWM0-PWM3,对应引脚如下:
    PWM0 – 引脚号52
    PWM1 – 引脚号53
    PWM2 – 引脚号70
    PWM3 – 引脚号69

    1. 创建一个pwm对象

    from misc import PWM
    pwm = PWM(PWM.PWMn,PWM.ABOVE_xx, highTime, cycleTime)
    

    参数:

    2. 开启PWM输出

    pwm.open()
    

    参数

    返回值
    成功返回整型0,失败返回整型-1。

    3. 关闭PWM输出

    pwm.close()
    

    参数

    返回值
    成功返回整型0,失败返回整型-1。

    4. 举例: 呼吸灯

    这个PWM 😂😂, 没用调节占空比的API, 如果我们要做呼吸灯, 只能不断地实例化PWM类😂😂

    from misc import PWM
    import utime
    
    duty = 1
    
    for i in range(10):
        for i in range(1, 101):
            duty = i
            pwm = PWM(PWM.PWM0, PWM.ABOVE_10US, duty, 100)
            pwm.open()
            utime.sleep_ms(20)
            print(duty)
        for i in range(100, 0,-1):
            duty = i
            pwm = PWM(PWM.PWM0, PWM.ABOVE_10US, duty, 100)
            pwm.open()
            utime.sleep_ms(20)
            print(duty)
    pwm.close()
    

    四. ADC

    EC600S平台支持ADC0,ADC1,对应引脚如下
    ADC0 – 引脚号19
    ADC1 – 引脚号20

    1. 实例化一个ADC对象

    from misc import ADC
    adc = ADC()
    

    2. 打开adc

    adc.open()
    

    参数

    返回值
    成功返回整型0,失败返回整型-1。

    3. 读取指定通道的电压值,单位mV

    adc.read(ADCn)
    

    参数

    • ADCn : ADC0 – 引脚号19 ADC1 – 引脚号20

    这里我要说一下,官方手册表明两个ADC,但我板子上有4个ADC(ADC0~3), 我看了EC600S的手册的确是2个ADC,可能是开发板为EC600U预留的

    返回值
    成功返回指定通道电压值,错误返回整型-1。

    3. 关闭ADC

    adc.close()
    

    参数

    返回值
    成功返回整型0,失败返回整型-1。

    4. 举例 读取输入电压

    from misc import ADC
    import utime
    adc = ADC()
    
    for i in range(25):
      print("reading ADC :",adc.read(ADC.ADC0)/1000,"V")
      utime.sleep(1)
    

    五. UART

    1. 实例化UART对象

    from machine import UART
    uart1 = UART(UART.UART1, 115200, 8, 0, 1, 0)
    

    参数:

    2. 接收缓存器中有多少字节的数据未读

    uart.any()
    

    参数

    返回值
    返回接收缓存器中有多少字节的数据未读。

    3. 从串口读取数据

    uart.read(nbytes)
    

    参数

    • nbytes : 要读取的字节数

    返回值
    返回读取的数据。

    4. 发送数据到串口。

    uart.write(data)
    

    参数

    • data: string类型. 发送的数据

    返回值
    返回发送的字节数。

    5. 关闭串口

    uart.close()
    

    参数

    返回值
    成功返回整型0,失败返回整型-1。

    6. 举例: 串口收发

    这里, 我们使用Main串口,标号UART.UART2 , 但是注意在开发板上这个Main串口竟然是RXD1 TXD1,不要想当然弄错了 😂😂😂


    from machine import UART
    from machine import Pin  
    
    key2 = Pin(Pin.GPIO12, Pin.IN, Pin.PULL_PU, 1)
    uart = UART(UART.UART2, 115200, 8, 0, 1, 0)
    
    while key2.read():
      msgLen = uart.any()
      if msgLen:
        msg = uart.read(msgLen)
        utf8_msg = msg.decode()
        print(utf8_msg)
        uart.write('rev msg and send back: ')
        uart.write(utf8_msg)
    

    相关文章

      网友评论

          本文标题:移远QuecPython(基于EC600s)开发物联网应用(二)

          本文链接:https://www.haomeiwen.com/subject/zrtvrltx.html