用Mind+玩转PinPong库

2021-01-242.8万
AI 快速预览详细 收起
本文介绍了Mind+新推出的Python模式,支持micro:bit V2.0和PinPong库。通过PinPong库,用户可以在不同主控板上实现跨设备编程,只需修改少量代码即可。文章详细展示了如何使用PinPong库读取模拟引脚数据,并提供了多个示例代码。


近期 Mind+ 迎来重大版本更新,新增了上传模式 micro:bit V2.0 支持,另外推出了 Python 模式。是的,你没听错,就是目前很流行的编程语言 Python。那我们就不用再单独安装 Python 编程环境,可以直接在 Mind+ 中编写用 PinPong 库控制的代码了!
用Mind+玩转PinPong库图1
下面我们一起来看一下这全新的 Python 模式吧。
Python 模式介绍
用Mind+玩转PinPong库图2
将软件更新到 1.7.0 RC1.0 后可以在原先右上角模式切换处看到新增了一个【Python模式】选项。点击【Python模式】即可切换到 Python 模式。在 Python 模式中我们可以看到界面分为三个部分:左上方是代码编辑区,左下方是终端信息输出区,右侧是文件管理区。我们可以看到软件左上角有【模块】和【代码】两个选项可以切换。当前状态是代码编程界面,适合代码熟练的同学手工编写代码。
用Mind+玩转PinPong库图4
切换到模块编程,我们可以看到 Mind+ 经典的界面布局。是不是很像上传模式呢?左侧是积木块,中间是脚本编辑区,右侧是自动生成的代码和终端显示区。这边的使用方法和上传模式类似,也有【扩展】可以加载。不过目前扩展只有“海龟绘图”和“代码生成器”,用户库暂未开放。模块编程适合那些对 Python 语法不熟悉,想要学习Python 的同学。
用Mind+玩转PinPong库图3对于那些有一定 Python 语言基础的同学可能更习惯手工编写代码,可以选择代码编程模式。但有时候可能会忘记一些代码的语法,此时可以点击右上角的【图形区】按钮,打开左侧的图形化代码面板。找到想要使用的积木块,拖动到中间代码编辑区即可自动生成该积木的 Python 代码。简直不要太友好~~
用PinPong库编写代码
PinPong 库是一套控制开源硬件主控板的 Pyhton 库,基于Firmata协议并兼容 MicroPython 语法。借助于 PinPong 库,直接用 Python 代码就能给各种常见的开源硬件编程。其原理是给开源硬件烧录一个特定的固件,使开源硬件可以通过串口与电脑通讯,执行各种命令。

PinPong 库的名称由“Pin”和“Pong”组成,“Pin”指引脚,“PinPong”为“乒乓球”的谐音,指信号的往复。

PinPong 库的设计,是为了让开发者在开发过程中不用被繁杂的硬件型号束缚,而将重点转移到软件的实现。哪怕程序编写初期用 Arduino 开发,部署时改成了掌控板,只要修改一下硬件的参数就能正常运行,实现了“一次编写处处运行”。
在使用 PinPong 库之前需要安装扩展库。点击软件右上角的【库管理】按钮,在弹出的面板中找到 pinpong,点击【安装】即可完成安装。如果安装速度较慢,可以在右上方切换不同的源。
用Mind+玩转PinPong库图5
安装完成后就可以开始编写代码了。我们在项目文件目录中新建一个文本文件,例如名为“main.py”。打开 PinPong 库文档,找到示例代码,粘贴到文件中。
import time
from pinpong.board import Board,Pin,ADC

Board("uno").begin()               #初始化,选择板型(uno、leonardo、xugu)和端口号,不输入端口号则进行自动识别
#Board("uno","COM36").begin()      #windows下指定端口初始化
#Board("uno","/dev/ttyACM0").begin() #linux下指定端口初始化
#Board("uno","/dev/cu.usbmodem14101").begin()   #mac下指定端口初始化

adc0 = ADC(Pin(Pin.A0)) #将Pin传入ADC中实现模拟输入 模拟输入方法1
#adc0 = Pin(Pin.A0, Pin.ANALOG) #引脚初始化为电平输出 模拟输入方法2

while True:
  v = adc0.read()  #读取A0口模拟信号数值 模拟输入方法1
  #v = adc0.read_analog() #读取A0口模拟信号数值 模拟输入方法2
  print("A0=", v)
  time.sleep(0.2)

这段代码实现的主要功能是读取模拟引脚 A0 的数据,主控板是 Arduino。我们可以在 A0 接入一个光线传感器,读取环境光线的强弱。

将传感器连接好后把 Arduino 接到电脑,按下【运行】按钮即可观察效果。
用Mind+玩转PinPong库图6
那我们如果更换了主控板,代码该怎么改呢?观察上述代码,我们发现使用 PinPong 库分为几个步骤。
1.导入 PinPong 库:from pinpong.board import Board,Pin,ADC
2.指定主控类型:Board("uno").begin()
3.定义引脚:adc0 = ADC(Pin(Pin.A0))
4.读取引脚数据:v = adc0.read()
更换了主控板,我们只需要修改主控类型及对应的引脚信息就完成了程序的迁移。例如下方便是将主控板更换为 micro:bit 后的代码:
import time
from pinpong.board import Board,Pin,ADC

Board("microbit").begin() #改动1

adc0 = ADC(Pin(Pin.P0)) #改动2

while True:
  v = adc0.read()
  print("A0=", v)
  time.sleep(0.2)

演示效果如下:
用Mind+玩转PinPong库图7
同理我们也可以把主控改成掌控板:
import time
from pinpong.board import Board,Pin,ADC

Board("handpy").begin() #改动1

adc0 = ADC(Pin(Pin.P0))

while True:
  v = adc0.read()
  print("A0=", v)
  time.sleep(0.2)

也可以正常运行:
用Mind+玩转PinPong库图8
综上,PinPong 库编写的代码很方便迁移,更改主控后代码改写量很少,让用户更注重核心代码的实现。
当然,读取光线这个命题其实也不一定要用光线传感器。例如 micro:bit 和 掌控板的板载资源就可以实现环境光线强弱的检测。下面分别用 PinPong 库调用 micro:bit 和掌控板的板载资源来实现光线检测。
micro:bit
import time
from pinpong.board import Board,MSensor

Board("microbit").begin()


micro = MSensor()

while True:
    print(micro.get_brightness())   #读取环境光
    time.sleep(0.2)

掌控板
import time
from pinpong.board import Board,HSensor

Board("handpy").begin()

esp = HSensor()

while True:
    print(esp.read_light())         #读取环境光强度
    time.sleep(0.2)
对比发现两者代码很接近,主要区别在于导入的模块名称及调用的方法名称不同。

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(9)
glwz007
glwz007
非常感谢!
glwz007
glwz007
楼主你好,非常感谢楼主分享的帖子。我请教一下,上面的例子中使用掌控板内置光线传感器时使用了esp.read_light(),如果要是使用掌控板的其他传感器,或者是其他内置元件,比如板载LED,OLED屏幕等,相关的名称如何写?有没有这方面的资料?谢谢!
汤果
汤果
作者
回复glwz007
你可以到示例文件夹找一下,里面有一些案例,应该可以找到。
gray6666
gray6666
代码运行之后,板子是否可以脱机运行?
汤果
汤果
作者
回复gray6666
不行。这个有点像实时模式,必须一直连着电脑
春秋大仙
春秋大仙
评论内容
rzegkly
rzegkly
赞一个
szjuliet
szjuliet
这个太赞了!
穷玩猫
穷玩猫
软件终生系列
hnyzcj
hnyzcj
点赞点赞
gray6666
gray6666
终于支持python了,赞一个
汤果
汤果
作者
回复gray6666
对呀。我觉得我们接下来高中教 Python 甚至可以用 Mind+ 了呢。
- 没有更多了 -