_木子_ 发表于 2020-8-31 13:41:27

pinpong:让开源硬件的编程更加简单

pinpong:让开源硬件的编程更加简单
作者:谢作如
开源硬件的出现,让中小学的编程教育不再限制在虚拟世界,开始与物理世界互动。从Arduino、树莓派和pcDuino到拿铁熊猫,各种品牌的开源硬件不断涌现,推动了我国创客教育和STEM教育的发展。2016年因为高中信息技术教材选择了Python语言,micro:bit、掌控板和虚谷号于是快速崛起,成为当前中小学创客教育的重要选择之一。
开源硬件的快速发展,也给中小学老师带来更多选择的同时,也带来了新的麻烦。因为不同的开源硬件采用的芯片不同,其支持的编程语言和编程工具也各自不同,甚至连引脚的编号,运行的电压和支持的扩展模块也不同。选择Arduino、micro:bit还是掌控板?一些刚刚入门的老师难免会陷入了选择恐惧症。有没有一种编程语言,用统一的编程规范来控制不同的开源硬件?这道看似无解的难题,随着pinpong库的出现,让我们看到了曙光。
Arduino micro:bit

掌控板

一、pinpong的原理和设计理念——————————————————————————————————————————
pinpong库是一个基于Firmata协议开发的Python硬件控制库。2020年春,当虚谷计划组委会的一线老师们提出相关需求时,上海DFRobot的创客们欣然承担了开发任务。历经三个多月,推出了测试版,得到广大教师和专家的好评。目前pinpong的最新版本为0.3。
1. pinpong的原理 pinpong是如何做到用统一的语言控制不同的硬件?其原理是给开源硬件烧录一个特定的固件,使开源硬件可以通过串口与电脑通讯,执行各种命令。这个特定的库也是一个广泛流行的开源通讯协议,名字叫做Firmata。pinpong库的名称由“Pin”和“Pong”组成,“Pin”指引脚,“pinpong”为“乒乓球”的谐音,指信号的往复。

pinpong库的工作原理
目前pinpong库支持Arduino、掌控板、micro:bit等开源硬件,同时支持虚谷号、树莓派和拿铁熊猫等。借助于pinpong库,直接用Python代码就能给各种常见的开源硬件编程。
2. pinpong的设计理念
pinpong库的设计,是为了让开发者在开发过程中不用被繁杂的硬件型号束缚,而将重点转移到软件的实现。哪怕程序编写初期用Arduino开发,部署时改成了掌控板,只要修改一下硬件的参数就能正常运行,实现了“一次编写处处运行”。
二、pinpong的编程规范——————————————————————————————————————————————————
1.pinpong的安装 pingpong库的安装和Python的其他库安装一样,在命令行下用pip命令即可。
参考命令:pip install pinpong
2.pinpong的基本用法 以Arduino UNO为例,表1.1中的代码,将点亮Arduino板载的LED灯(D13引脚)。 表 1.1 pinpong库的基本用法

从上述代码可以看出,通过pinpong库控制开源硬件的代码不仅简洁,而且容易理解。初始化硬件只要正确输入硬件的品牌和型号即可。如果端口号省略,pinpong会自动扫描本机可用的所有串口,然后给硬件烧录特定的固件。这样一来,开源硬件的入门门槛降到了最低:只要能辨别开源硬件的型号,并且知道其引脚的正确编号。
在引脚控制方面,pinpong的语法和micro:bit和掌控板是一致的,同时又兼容MicroPython的标准语法。比如,电平信号输出处改为“led.value(1)”,代码也能正常运行,非常灵活。而且,一台电脑还能同时连接多块开源硬件,彼此可以互动。
三、pinpong的应用案例——————————————————————————————————————————————————
1.数据科学应用案例:传感器数据的采集 案例背景:在新版的普通高中信息技术教材中,增加了“传感与控制”方面的学习内容。这里的“传感”指通过传感器采集外界环境中的各种信息,如温度、声音、光线等。利用pinpong库,只要在普通电脑上接上一块开源硬件,如Arduino、掌控板,然后再接相应的传感器即可。
器材清单: (1)开源硬件:Arduino
(2)扩展模块:温度传感器
参考代码: import timefrom pinpong.board import Board,PinBoard("uno").begin()adc0 = Pin(Pin.A0, Pin.ANALOG) #引脚初始化为模拟输入while True:v = adc0.read_analog() #读取A0口模拟信号数值print("A0=", v)time.sleep(0.5)
2.人工智能应用案例:迎宾机器人 案例背景:人脸识别是人工智能方面的经典应用,很多教材都会通过各种方式去实现人脸识别。本案例采用了OpenCV,实现了对人脸的识别。只要摄像头检测到人脸,就会说“您好”,并且驱动舵机摆动小手,客人打招呼。
器材清单: (1)开源硬件:Arduino
(2)扩展模块:舵机
(3)电脑配件:摄像头、小音箱
参考代码: import cv2import pyttsx3from pinpong.board import Board,Pin,Servo engine = pyttsx3.init() #初始化语音合成对象cap = cv2.VideoCapture(0) #初始化摄像头Board("uno").begin() #初始化开源硬件s1 = Servo(Pin(Pin.D9)) #初始化舵机引脚,这里我们选择D9引脚 while(True): ret, frame = cap.read()# 调用摄像头 # 将摄像头拍摄到的照片转为灰度图 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 使用opencv自带的人脸识别文件进行识别 xmlfile = r'haarcascade_frontalface_default.xml' face_cascade = cv2.CascadeClassifier(xmlfile) faces = face_cascade.detectMultiScale( gray, scaleFactor=1.15, minNeighbors=5, minSize=(5, 5),) # 当检测到人脸时,开始语音合成,并转动舵机 if len(faces)>=1: words='您好' engine.say(words) #文本转语音 engine.runAndWait() #转动舵机,在0度到90度之间摇摆 for t in range(3): s1.write_angle(0)s1.write_angle(90)
四、pinpong的优势和价值分析——————————————————————————————————————————————————
1.支持市场上绝大多数的开源硬件 pinpong库支持绝大多数的开源硬件。目前pinpong库已经支持Arduino、虚谷号和掌控板,其他的开源硬件支持已经在规划中,从表1.2可以看出。实际上,开源硬件的品牌虽然很多,但基本上可以分为Arduino(涵盖了拿铁熊猫和虚谷号等)、ESP32(包括ESP8266和掌控板等)、micro:bit和树莓派(涵盖了pcDuino和banana派等)这四个类别。
表1.2 pinpong库支持的开源硬件列表

2.信息系统的开发调试和迁移部署非常方便 pinpong库是采用串口的形式与开源硬件进行通讯,因而不管最终使用什么硬件,信息系统的开发都可以在普通电脑上进行,只要电脑上接一块Arduino或者掌控板就行。等到系统调试成功后,将代码迁移到虚谷号、树莓派和拿铁熊猫等开源硬件,或者NUC(Next Unit of Computing,Intel的迷你电脑)、HTPC(Home Theater Personal Computer,即家庭影院电脑)、Mac Mini(苹果的迷你电脑),几乎不用做任何修改即可正常运行。
3.让人工智能应用结合硬件更加方便 随着国务院发布《新一代人工智能发展规划》以来,全国各地涌现出一大批人工智能教材。但是对中小学生来说,没有结合硬件的人工智能应用总不够酷炫有趣,缺乏“生活”气息。目前Python是当之无愧的人工智能第一编程语言,也是当前绝大多数的中小学人工智能教材采用的编程语言。在pinpong库的支持下,很多人工智能应用只要增加几行代码,就能够感知外部环境,并且控制各种电机,实现多模态的交互。如本文的案例2本来就是一个经典的人脸识别案例,仅仅多加了一个舵机,人工智能应用就可爱起来。
pinpong文档:主站:https://pinpong.readthedocs.io/

余生逍遥 发表于 2024-4-8 09:32:55

serial.serialutil.SerialException: could not open port 'COM12': PermissionError(13, '拒绝访问。', None, 5)这是什么问题额,没有其他软件占用端口,也重新关了重新打开,还是不行。

DFB1x9DpSPv 发表于 2020-10-15 21:06:09

_木子_ 发表于 2020-8-31 13:41
pinpong:让开源硬件的编程更加简单
作者:谢作如
开源硬件的出现,让中小学的编程教育不再限制在虚拟世界 ...

这样的话就必须连接电脑使用了吧?

木子呢 发表于 2024-4-8 11:32:21

余生逍遥 发表于 2024-4-8 09:32
serial.serialutil.SerialException: could not open port 'COM12': PermissionError(13, '拒绝访问。', No ...

加V信:DFRobot2019,咨询下技术支持。

汤果 发表于 2020-8-31 13:57:13

点赞!这样跨平台使用起来就非常方便了~~~

_木子_ 发表于 2020-8-31 14:32:15

汤果 发表于 2020-8-31 13:57
点赞!这样跨平台使用起来就非常方便了~~~

是呢~再也不用担心了

hnyzcj 发表于 2020-8-31 15:34:53

老谢牛逼

发表于 2020-8-31 16:59:15

谢谢,学会了!

_木子_ 发表于 2020-8-31 18:01:18

诩 发表于 2020-8-31 16:59
谢谢,学会了!

{:5_131:}            

发表于 2020-9-1 16:13:08

_木子_ 发表于 2020-8-31 18:01


{:6_212:}{:6_212:}

EVE 发表于 2020-9-1 16:54:04

pinpong棒棒的

DFBJFz5siXP 发表于 2020-9-1 22:58:00

新手来学习了

20060606 发表于 2020-9-3 17:06:49

感谢分享

佛系唐法官 发表于 2020-9-5 14:55:15

学习学习

广东自考001 发表于 2020-9-6 16:38:58

汤果 发表于 2020-8-31 13:57
点赞!这样跨平台使用起来就非常方便了~~~

不错不错!自考{:6_202:}

auzn 发表于 2020-9-8 15:00:09

可以可以

DFBJFz5siXP 发表于 2020-9-23 21:30:32

看样子又有忙的了

gray6666 发表于 2020-12-23 09:02:01

有树莓派的教程案例吗?

_木子_ 发表于 2020-12-23 10:21:04

gray6666 发表于 2020-12-23 09:02
有树莓派的教程案例吗?

暂时还没有,目前只有虚谷的

Nick-ccq 发表于 2020-12-23 10:24:55

_木子_ 发表于 2020-12-23 10:21
暂时还没有,目前只有虚谷的

使用方法和虚谷的一样,就初始化哪里修改一下板子型号就可以使用

gray6666 发表于 2020-12-23 21:45:48

@收到,感谢楼上二位指导{:6_202:}

招远一中牟晓东 发表于 2021-3-9 15:58:52

树莓派也可以无门槛地使用了么?

三春牛-创客 发表于 2023-8-14 17:39:16

不错不错
页: [1] 2
查看完整版本: pinpong:让开源硬件的编程更加简单