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

一. 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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容