用Python控制硬件8-简易实验板

用Python控制硬件8-简易实验板

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

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

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

注意共有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下需要下载驱动:github.com/pengshulin/m

安装正确后识别成COM口:

如果使用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


实验板控制继电器动作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
实验板模拟交通灯https://www.zhihu.com/video/1163476429609603072

控制IO口就是这么简单。

发布于 2019-10-04

文章被以下专栏收录

    本人长期从事嵌入式软硬件开发工作:设计过多款手持式/在线式工业仪表,在研发测试环节广泛使用Python辅助开发,自主设计的MCUSH开源应用平台(http://mcush.com)使单片机能通过交互式协议接口与PC交互,二者的联动可以方便PC用Python灵活地控制设备端,提高了开发测试效率。 该专栏计划将这几年来的实战开发经验教训以独立的案例形式一一展示出来,与行业工程师相互交流,共同进步。