[讨论交流]用Mind+玩转PinPong库

1257浏览
查看: 1257|回复: 12

[讨论交流] 用Mind+玩转PinPong库

[复制链接]
本帖最后由 汤果 于 2021-1-24 14:27 编辑

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

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

PinPong 库的设计,是为了让开发者在开发过程中不用被繁杂的硬件型号束缚,而将重点转移到软件的实现。哪怕程序编写初期用 Arduino 开发,部署时改成了掌控板,只要修改一下硬件的参数就能正常运行,实现了“一次编写处处运行”。
在使用 PinPong 库之前需要安装扩展库。点击软件右上角的【库管理】按钮,在弹出的面板中找到 pinpong,点击【安装】即可完成安装。如果安装速度较慢,可以在右上方切换不同的源。
Snipaste_2021-01-24_12-33-35.png
安装完成后就可以开始编写代码了。我们在项目文件目录中新建一个文本文件,例如名为“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 接到电脑,按下【运行】按钮即可观察效果。
GIF 2021-1-24 14-23-24.gif
那我们如果更换了主控板,代码该怎么改呢?观察上述代码,我们发现使用 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)

演示效果如下:
GIF 2021-1-24 14-21-04.gif
同理我们也可以把主控改成掌控板:
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)

也可以正常运行:
GIF 2021-1-24 14-17-41.gif
综上,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)
对比发现两者代码很接近,主要区别在于导入的模块名称及调用的方法名称不同。

gray6666  初级技神

发表于 2021-1-24 18:10:59

终于支持python了,赞一个
回复

使用道具 举报

汤果  初级技神
 楼主|

发表于 2021-1-25 06:49:59

gray6666 发表于 2021-1-24 18:10
终于支持python了,赞一个

对呀。我觉得我们接下来高中教 Python 甚至可以用 Mind+ 了呢。
回复

使用道具 举报

hnyzcj  版主

发表于 2021-1-25 09:10:51

点赞点赞
回复

使用道具 举报

穷玩猫  高级技师

发表于 2021-1-25 09:36:18

软件终生系列
回复

使用道具 举报

szjuliet  版主

发表于 2021-1-25 09:51:37

这个太赞了!
回复

使用道具 举报

rzegkly  版主

发表于 2021-1-25 15:35:44

赞一个
回复

使用道具 举报

春秋大仙  高级技师

发表于 2021-1-25 18:38:48

回复

使用道具 举报

gray6666  初级技神 来自手机

发表于 2021-3-9 22:41:24

汤果 发表于 2021-1-24 14:27
近期 Mind+ 迎来重大版本更新,新增了上传模式 micro:bit V2.0 支持,另外推出了 Python 模式。是的,你没 ...

代码运行之后,板子是否可以脱机运行?
回复

使用道具 举报

汤果  初级技神
 楼主|

发表于 2021-3-10 06:43:31

gray6666 发表于 2021-3-9 22:41
代码运行之后,板子是否可以脱机运行?

不行。这个有点像实时模式,必须一直连着电脑
回复

使用道具 举报

glwz007  中级技师

发表于 2021-4-6 17:19:54

楼主你好,非常感谢楼主分享的帖子。我请教一下,上面的例子中使用掌控板内置光线传感器时使用了esp.read_light(),如果要是使用掌控板的其他传感器,或者是其他内置元件,比如板载LED,OLED屏幕等,相关的名称如何写?有没有这方面的资料?谢谢!
回复

使用道具 举报

汤果  初级技神
 楼主|

发表于 2021-4-6 18:52:52

glwz007 发表于 2021-4-6 17:19
楼主你好,非常感谢楼主分享的帖子。我请教一下,上面的例子中使用掌控板内置光线传感器时使用了esp.read_l ...

你可以到示例文件夹找一下,里面有一些案例,应该可以找到。
回复

使用道具 举报

glwz007  中级技师

发表于 2021-4-6 20:32:12

非常感谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2021 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail