python硬件交互_用Python控制硬件3-GPIO输入输出

单片机最直接的与外界沟通的方式的就是GPIO了:引脚输入获取用户按键、传感器状态;引脚输出控制继电器、执行开关。没有比这个再直接的了。

MCUSH的交互终端是通过“gpio”命令来控制的,先看看用法帮助:

=>gpio --help

usage: gpio [--loop[=]] [-p ] [--input[=]]

[--output[=]] [--set[=]] [--clr[=]]

[--toggle[=]] [-n] [-U] [-D]

options:

-l/--loop default 1000ms

-p/--port port[.bit] name, eg 0[.0]

-i/--input set input mode mask

-o/--output set output mode mask

-s/--set set output high mask

-c/--clr set output low mask

-t/--toggle toggle output mask

-n/--number query

-U/--pullup with pullup resister

-D/--pulldown with pulldown resister

=>

首先要说明,不同单片机端口命名方式是不同的,有用数字编号,有用字母编号(如STM32),这里统一换成用数字编号(PA对应P0,PB对应P1……)。

假设PA0连接1个用户按键(接了上拉电阻,按下低电平,松开高电平),PA1连接1个继电器控制端(输出高电平继电器动作),那么按键的检测命令是:

=>gpio -p0.0 -i

=>gpio -p0.0

1

=>

先通过“-i”参数将PA0端口设置成输入模式,第二行无任何参数,则返回这个引脚状态:1表示高电平(按键松开)。

继电器的输出控制命令是:

=>gpio -p0.1 -o -c

=>gpio -p0.1 -s

=>

“-o”参数将引脚PA1设置成输出模式,同时“-c”设置低电平。第二行“-s”参数设置高电平(继电器动作)。

通常一个端口会有多个引脚,怎样一起控制呢?假设PE口的16个引脚分别接了16个LED灯(高电平输出点亮),将它们同时点亮:

=>gpio -p4 -o 0xFFFF -s 0xFFFF

=>

如果这16个端口分别接了16个上拉的按键,同时检测它们的状态:

=>gpio -p4 -i 0xFFFF

=>gpio -p

0x0000FFFF

=>

下面再用Python演绎一遍,让PA1的继电器和PA0的按键联动(注意PA1输出与PA0输入是电平翻转的):

from mcush import *

m=Mcush.Mcush('/dev/ttyUSB0')

m.pinInput('0.0')

m.pinOutputLow('0.1')

while True:

m.pinSetVal('0.1', m.pinIsLow('0.0'))

控制IO就是这么简单,知道之前提到的循环开关机测试实验怎么写了吧?

最后写个流水灯结束本篇,下一篇讲讲蜂鸣器控制。

import time

from mcush import *

m=Mcush.Mcush('/dev/ttyUSB0')

m.gpio('4',o=0xFFFF,c=0xFFFF)

output=0x00FF

while True:

print( hex(output) )

m.gpio('4',s=output, c=(~output)&0xFFFF)

time.sleep(0.5)

output=output<<1

if output & 0x10000:

output = (output & 0xFFFF) | 0x0001

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值