用Mind+玩转PinPong库
本帖最后由 汤果 于 2021-1-24 14:27 编辑近期 Mind+ 迎来重大版本更新,新增了上传模式 micro:bit V2.0 支持,另外推出了 Python 模式。是的,你没听错,就是目前很流行的编程语言 Python。那我们就不用再单独安装 Python 编程环境,可以直接在 Mind+ 中编写用 PinPong 库控制的代码了!
下面我们一起来看一下这全新的 Python 模式吧。
Python 模式介绍
将软件更新到 1.7.0 RC1.0 后可以在原先右上角模式切换处看到新增了一个【Python模式】选项。点击【Python模式】即可切换到 Python 模式。在 Python 模式中我们可以看到界面分为三个部分:左上方是代码编辑区,左下方是终端信息输出区,右侧是文件管理区。我们可以看到软件左上角有【模块】和【代码】两个选项可以切换。当前状态是代码编程界面,适合代码熟练的同学手工编写代码。
切换到模块编程,我们可以看到 Mind+ 经典的界面布局。是不是很像上传模式呢?左侧是积木块,中间是脚本编辑区,右侧是自动生成的代码和终端显示区。这边的使用方法和上传模式类似,也有【扩展】可以加载。不过目前扩展只有“海龟绘图”和“代码生成器”,用户库暂未开放。模块编程适合那些对 Python 语法不熟悉,想要学习Python 的同学。
对于那些有一定 Python 语言基础的同学可能更习惯手工编写代码,可以选择代码编程模式。但有时候可能会忘记一些代码的语法,此时可以点击右上角的【图形区】按钮,打开左侧的图形化代码面板。找到想要使用的积木块,拖动到中间代码编辑区即可自动生成该积木的 Python 代码。简直不要太友好~~
用PinPong库编写代码
PinPong 库是一套控制开源硬件主控板的 Pyhton 库,基于Firmata协议并兼容 MicroPython 语法。借助于 PinPong 库,直接用 Python 代码就能给各种常见的开源硬件编程。其原理是给开源硬件烧录一个特定的固件,使开源硬件可以通过串口与电脑通讯,执行各种命令。
PinPong 库的名称由“Pin”和“Pong”组成,“Pin”指引脚,“PinPong”为“乒乓球”的谐音,指信号的往复。
PinPong 库的设计,是为了让开发者在开发过程中不用被繁杂的硬件型号束缚,而将重点转移到软件的实现。哪怕程序编写初期用 Arduino 开发,部署时改成了掌控板,只要修改一下硬件的参数就能正常运行,实现了“一次编写处处运行”。在使用 PinPong 库之前需要安装扩展库。点击软件右上角的【库管理】按钮,在弹出的面板中找到 pinpong,点击【安装】即可完成安装。如果安装速度较慢,可以在右上方切换不同的源。
安装完成后就可以开始编写代码了。我们在项目文件目录中新建一个文本文件,例如名为“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 接入一个光线传感器,读取环境光线的强弱。
http://imgtest.dfrobot.com.cn/DFRobotCnWikiImage/DFR0026_Diagram.png
将传感器连接好后把 Arduino 接到电脑,按下【运行】按钮即可观察效果。
那我们如果更换了主控板,代码该怎么改呢?观察上述代码,我们发现使用 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)
演示效果如下:
同理我们也可以把主控改成掌控板:
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)
也可以正常运行:
综上,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)
对比发现两者代码很接近,主要区别在于导入的模块名称及调用的方法名称不同。
终于支持python了,赞一个 gray6666 发表于 2021-1-24 18:10
终于支持python了,赞一个
对呀。我觉得我们接下来高中教 Python 甚至可以用 Mind+ 了呢。 点赞点赞 软件终生系列 这个太赞了! 赞一个 {:6_209:}{:6_209:} 汤果 发表于 2021-1-24 14:27
近期 Mind+ 迎来重大版本更新,新增了上传模式 micro:bit V2.0 支持,另外推出了 Python 模式。是的,你没 ...
代码运行之后,板子是否可以脱机运行? gray6666 发表于 2021-3-9 22:41
代码运行之后,板子是否可以脱机运行?
不行。这个有点像实时模式,必须一直连着电脑{:5_119:} 楼主你好,非常感谢楼主分享的帖子。我请教一下,上面的例子中使用掌控板内置光线传感器时使用了esp.read_light(),如果要是使用掌控板的其他传感器,或者是其他内置元件,比如板载LED,OLED屏幕等,相关的名称如何写?有没有这方面的资料?谢谢! glwz007 发表于 2021-4-6 17:19
楼主你好,非常感谢楼主分享的帖子。我请教一下,上面的例子中使用掌控板内置光线传感器时使用了esp.read_l ...
你可以到示例文件夹找一下,里面有一些案例,应该可以找到。 非常感谢!
页:
[1]