交通灯控制实验_用Python控制硬件8-简易实验板

346a2991825933edd17a976d3d25d68a.png

前面几篇基本演示了MCUSH/Python的基本用法,这次搭个廉价的实验板,方便大家动手实践。

首先从某宝下单,买如下任一款实验板(STM32F103C8 CortexM3主控芯片),20元以内。

679a02d710c486b3bf1a8c18e6ef049f.png

下载预编译好的固件:https://github.com/pengshulin/mcush/tree/master/build。用STLINK等工具烧入工具(烧写方法这里就不介绍了,网上有许多教程)。

b61f64a3e6f6d874370665135d33c495.png

注意共有4各个版本,对应2种板子(蓝/黑),2种端口方式(VCP/UART)的组合。

VCP是USB虚拟串口,Linux下无须驱动,自动可识别成/dev/ttyACMx:

~ dmesg | tail -n5
[1453924.041945] usb 1-4: Product: mcush vcp
[1453924.041951] usb 1-4: Manufacturer: mcush designed by pengshulin
[1453924.041957] usb 1-4: SerialNumber: 50FF69064883525649292287
[1453924.042471] usb 1-4: ep 0x82 - rounding interval to 1024 microframes, ep desc says 2040 microframes
[1453924.043164] cdc_acm 1-4:1.0: ttyACM0: USB ACM device
~ ls -l /dev/ttyACM*
crw-rw---- 1 root dialout 166, 0 10月  4 16:00 /dev/ttyACM0
~ 

Windows下需要下载驱动:https://github.com/pengshulin/mcush/tree/master/vcp_driver/1.4.0

安装正确后识别成COM口:

82540c010fcfd6dbd17815b5f42f8772.png

如果使用UART版本固件还需要用USB转串口板,安装相应驱动。需要注意串口引脚是PA9/PA10。

推荐在LINUX环境下使用VCP的固件。VCP不受波特率限制,速度会快很多。

第一个例子:驱动继电器循环动作:

继电器控制端口PB9,接通2秒,断开0.5秒,反复循环。

# GPIO - Relay on/off test
import time
from mcush import *
RELAY = '1.9'  # PB9 Pin
s = Mcush.Mcush('/dev/ttyACM0')
s.pinOutput(RELAY)
counter = 0
while True:
    print( 'Count: %d'% counter )
    s.pinSet(RELAY)
    time.sleep(2)
    s.pinClr(RELAY)
    time.sleep(0.5)
    counter += 1
431d2528851d007a4c2284b7b31e6b49.png
实验板控制继电器动作https://www.zhihu.com/video/1163473347064344576

第二个例子:模拟交通灯:

需要两组三色灯,绿黄红分别接PA0~PA2,PA3~PA5,换灯周期10秒,换灯时黄灯闪1秒,反复循环。

# Traffic lights control
import time
from mcush import *
GREEN = '0.0'  # PA0
YELLOW = '0.1'  # PA1
RED = '0.2'  # PA2
GREEN2 = '0.3'  # PA3
YELLOW2 = '0.4'  # PA4
RED2 = '0.5'  # PA5
DELAY = 10  # light switch delay time
s = Mcush.Mcush(‘/dev/ttyACM0’)
s.pinOutputLow([GREEN, YELLOW, RED, GREEN2, YELLOW2, RED2])
# yellow blink for 5 seconds
for i in range(5):
    s.pinSet([YELLOW, YELLOW2])  # on
    time.sleep(0.5)
    s.pinClr([YELLOW, YELLOW2])  # off
    time.sleep(0.5)
while True:
    # green
    s.pinSet([GREEN, RED2])  # on
    for i in range(DELAY):
        print( "green %d"% (DELAY-i) )
        time.sleep( 1 )
    s.pinClr([GREEN, RED2])  # off
    # yellow
    print( "yellow" )
    s.pinSet([YELLOW, YELLOW2])  # on
    time.sleep( 1 )
    s.pinClr([YELLOW, YELLOW2])  # off
    # red
    print( "red" )
    s.pinSet([RED, GREEN2])  # on
    for i in range(DELAY):
        print( "red %d"% (DELAY-i) )
        time.sleep( 1 )
    s.pinClr([RED, GREEN2])  # off
    # yellow
    print( "yellow" )
    s.pinSet([YELLOW, YELLOW2])  # on
    time.sleep( 1 )
    s.pinClr([YELLOW, YELLOW2])  # off
989e77b8b37a233e6704b2b3e35182cc.png
实验板模拟交通灯https://www.zhihu.com/video/1163476429609603072

控制IO口就是这么简单。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值