简介
pinpong 库是一套控制开源硬件主控板的 Python 库,基于 Firmata 协议并兼容 MicroPython 语法,借助于 pinpong 库,直接用 Python 代码就能给各种常见的开源硬件编程。
用法
引脚序号
Duo
pinpong | PIN NAME | Pin# | Pin# | PIN NAME | pinpong |
---|---|---|---|---|---|
0 | GP0 | 1 | 40 | VBUS | |
1 | GP1 | 2 | 39 | VSYS | |
GND | 3 | 38 | GND | ||
2 | GP2 | 4 | 37 | 3V3_EN | |
3 | GP3 | 5 | 36 | 3V3(OUT) | |
4 | GP4 | 6 | 35 | ||
5 | GP5 | 7 | 34 | ||
GND | 8 | 33 | GND | ||
6 | GP6 | 9 | 32 | GP27 | 27 |
7 | GP7 | 10 | 31 | GP26 | 26 |
8 | GP8 | 11 | 30 | RUN | |
9 | GP9 | 12 | 29 | GP22 | 22 |
GND | 13 | 28 | GND | ||
10 | GP10 | 14 | 27 | GP21 | 21 |
11 | GP11 | 15 | 26 | GP20 | 20 |
12 | GP12 | 16 | 25 | GP19 | 19 |
13 | GP13 | 17 | 24 | GP18 | 18 |
GND | 18 | 23 | GND | ||
14 | GP14 | 19 | 22 | GP17 | 17 |
15 | GP15 | 20 | 21 | GP16 | 16 |
25 | GP25 | LED |
引脚复用配置
注意,Duo 的很多引脚功能是复用的,在使用 pinpong
库来控制 Duo 各引脚的功能时,要先确认一下引脚当前的状态是不是自己需要的功能, 如果不是,可以用duo-pinmux
命令来切换为所需功能
具体方法请参考: 引脚复用配置
GPIO
板载 LED 闪烁
这是一个让 Duo 板载 LED 闪烁的例子,可以直接在 Duo 中新建 blink.py
文件,或者在电脑中创建好之后通过 SSH 上传到 Duo 中。
提示
Duo LED 引脚的序号是 25,如果使用其他引脚外接 LED,序号请参考上面的表格。
blink.py
文件的内容:
# -*- coding: utf-8 -*-
# 实验效果:控制 MilkV-Duo 板载 LED 灯一秒闪烁一次。
# Function: Control the MilkV-Duo onboard LED light to flash once per second.
# 接线:使用电脑连接一块 MilkV-Duo 主控板。
# Wiring: Use a computer to connect a MilkV-Duo board.
# 在启动程序前请使用 duo-pinmux 确认引脚复用在正确的功能上。
# Please use duo-pinmux to confirm that the pins are multiplexed to the correct functions before starting the program.
import time
from pinpong.board import Board,Pin
Board("MILKV-DUO").begin() # 初始化,选择板型,不输入板型则进行自动识别;Initialize, select the board type, if you do not enter the board type, it will be automatically identified.
led = Pin(Pin.D14, Pin.OUT) # 引脚初始化为电平输出;The pin is initialized as output.
while True:
led.value(1) # 输出高电平;Output High.
print("1")
time.sleep(1) # 等待1秒 保持状态;Stay 1s.
led.value(0) # 输出低电平;Output Low.
print("0")
time.sleep(1) # 等待1秒 保持状态;Stay 1s.
在 Duo 的终端中执行 python blink.py
命令:
[root@milkv-duo]~# python blink.py
milkv-duo
__________________________________________
| ____ _ ____ |
| / __ \(_)___ / __ \____ ____ ____ _ |
| / /_/ / / __ \/ /_/ / __ \/ __ \/ __ `/ |
| / ____/ / / / / ____/ /_/ / / / / /_/ / |
|/_/ /_/_/ /_/_/ \____/_/ /_/\__, / |
| v0.5.2 Designed by DFRobot /____/ |
|__________________________________________|
1
0
1
0
会看到 LED 间隔 1 秒闪烁。
注意
当前 Duo 的默认固件上电后 LED 会自动闪烁,这个是通过开机脚本实现的,在测试该 blink 例子的时候,需要将 LED 闪烁的脚本禁用,在 Duo 的终端中执行:
mv /mnt/system/blink.sh /mnt/system/blink.sh_backup && sync
reboot
测试完 blink 程序后,如果需要恢复 LED 闪烁脚本,执行下面的命令即可:
mv /mnt/system/blink.sh_backup /mnt/system/blink.sh && sync
reboot
外接按钮
这是外接按钮的例子,程序会每隔 0.1s 读取一次 GPIO 状态并将其打印在屏幕上。请在 Duo 中创建或使用 SSH 上传 button.py
文件。
button.py
文件内容:
# -*- coding: utf-8 -*-
# 实验效果:终端输出 MilkV-Duo 上的引脚电平。
# Function: The terminal outputs the pin level on MilkV-Duo.
# 接线:使用电脑连接一块 MilkV-Duo 主控板,主控板 D0 接一个按钮模块。
# Wiring: Connect MilkV-Duo board to computer, and connect the board D0 to a button module.
# 在启动程序前请使用 duo-pinmux 确认引脚复用在正确的功能上。
# Please use duo-pinmux to confirm that the pins are multiplexed to the correct functions before starting the program.
import time
from pinpong.board import Board,Pin
Board("MILKV-DUO").begin() # 初始化,选择板型,不输入板型则进行自动识别;Initialize, select the board type, if you do not enter the board type, it will be automatically identified.
btn = Pin(Pin.D0, Pin.IN) # 引脚初始化为电平输入;The pin is initialized as Input.
while T rue:
v = btn.value() # 读取引脚电平;Read pin level.
print(v) # 终端打印读取的电平状态;Print pin level.
time.sleep(0.1)
在开发板 GP0 上连接一个按钮模块,并在 Duo 的终端中执行 python button.py
命令:
[root@milkv-duo]~# python ./button.py
milkv-duo
__________________________________________
| ____ _ ____ |
| / __ \(_)___ / __ \____ ____ ____ _ |
| / /_/ / / __ \/ /_/ / __ \/ __ \/ __ `/ |
| / ____/ / / / / ____/ /_/ / / / / /_/ / |
|/_/ /_/_/ /_/_/ \____/_/ /_/\__, / |
| v0.5.2 Designed by DFRobot /____/ |
|__________________________________________|
1
1
1
1