APP下载

让开源硬件的选择不再成为难题

2020-12-21谢作如

中国信息技术教育 2020年23期
关键词:编程语言树莓代码

谢作如

● pinpong库的起源

2020年初,笔者受清华大学出版社的委托,组建团队来编写初中的信息技术教材。按照主编樊磊教授的要求,教材中不仅要涉及人工智能、数据科学,还要加入物联网和开源硬件等知识。这时笔者发现,教材中应该使用哪一款开源硬件,已经成为一道难题。

1.开源硬件大盘点

据不完全统计,目前市场上有一百多种开源硬件,其中在中小学市场占有率较高的有Arduino、micro:bit、掌控板等,这些开源硬件支持的编程语言和工具如表1所示。

从表1中会发现,树莓派、虚谷号、拿铁熊猫和pcDuino等开源硬件,因为都采用了性能较好的芯片,能够运行标准的Linux操作系统,所以能够支持Python语言,支持Python idle之类任何一款能够运行Linux的Python IDE。而Arduino、micro:bit和掌控板这三种市场占有率最高的开源硬件,都不支持Python。这些硬件中共同支持的编程工具,只有Arduino IDE。

Arduino的兴起,是因为其采用了标准的编程规范,简化了单片机的开发难度,毕竟创客教育面向的是非专业人群。但是Arduino IDE采用的是C/C++,在开发难度上比Python要高很多。当中小学的主流编程转向Python后,大家不得不重新寻求一种新的解决方案。因而,MicroPython一出现,就很快成为开源硬件编程语言中的热点。micro:bit和掌控板的一夜成名,MU、BXY和mPython等工具的先后面世,并且写入国家教材,正是因为其顺应了中小学编程语言发展的潮流。

2.选择开源硬件难在哪里

不同的开源硬件采用了不同的芯片,其支持的编程语言和编程工具也各自不同,甚至连引脚编号和支持的扩展模块也不同。Arduino的优势在于其外部扩展资源多,掌控板的优势在于它能够便捷联网,虚谷号的优势在于它支持标准的Python,那么究竟是选择Arduino、micro:bit还是选择掌控板、虚谷号呢?

除了Arduino IDE外,有沒有一种编程语言,用统一的编程规范来控制不同的开源硬件?答案肯定是有的,那就是新兴的Mind+、Kittenbot等图形化编程工具。因为类似Scratch、Blockly的图形化代码最终会“转化”为相应的代码,如Arduino代码或者MicroPython代码。这样就降低了编程的门槛,同样的代码规范,在不同的硬件上都通用。

3.开发pinpong库的可行性分析

笔者为什么选择用开发Python库的形式,而不是开发一个全新的编程语言,主要有如下几点理由。

(1)Python已经成为中小学主流编程语言

Python虽然古老,但因为开源而与时俱进。作为一个为非专业用户设计的编程语言,Python类似Shell,让用户不需要过多关注算法之外的细节,淡化了界面设计,成为培养学生计算思维的最好工具之一。可以肯定,接下来从初中开始,主流的编程语言一定是Python。那么用扩展库的方式,让Python又多了一项功能,是最主流也是最合理的一种选择。

(2)用Python控制开源硬件已经有一定的基础

据了解,早在2014年就有创客团队在开发一个名叫pingo的Python库。其初衷也是希望为Raspberry Pi、BeagleBone Black、pcDuino和伽利略等开源硬件的编程提供统一的API,就像Python DBAPI为Python中的数据库编程提供了统一的API一样。只是很可惜,这个项目在四年前停止了开发。除此之外,为Arduino设计的Python库还有多个,如pyfirmata和PyMata,以及虚谷号的xugu库等。

(3)能运行Python的开源硬件将越来越普及

继树莓派之后,越来越多的“派”系列产品被设计出来,如pcDuino、香蕉派和香橙派等,这些开源硬件的价格越来越亲民,因此,与其想方设法用MicroPython的方式去兼容单片机,还不如直接用Python代码去控制开源硬件。这样一来,Python的各种“无所不能”的库都可以用起来。

● pinpong库的规划

如何设计一个Python库?笔者首先确定了这个库的第一目标人群是中小学生,是初学者。其次,考虑到micro:bit和掌控板都支持MicroPython,那这个库要兼容它们的语法。因此,这个库需要具备代码简洁、语法灵活和使用简单三大特点。

1.工作原理

pinpong库选择的方案是使用标准的Python代码来控制开源硬件,这和MicroPython的做法不一样。MicroPython是借用了Python的语法风格,最终会编译为C语言。而Python中大量的库都要经过重新编写才能使用。

那么,如何通过pinpong来控制开源硬件呢?笔者借助了一个通用的串口通信协议Firmata。开源硬件会输入一个特定的固件,计算机发送命令给开源硬件,开源硬件执行命令后再反馈信息给计算机,这个过程的速度很快,如同直接控制开源硬件一样。

2.支持硬件

pinpong库将支持市场上绝大多数的开源硬件。pinpong库的设计,是为了让开发者在开发过程中不用被繁杂的硬件型号所束缚,而将重点转移到软件的实现。哪怕程序编写初期用Arduino开发,部署时改成了掌控板,只要修改一下硬件的参数就能正常运行,实现了“一次编写处处运行”。

从表1可以看出,开源硬件的品牌虽然很多,但基本上可以分为Arduino(涵盖了拿铁熊猫和虚谷号等)、ESP32(包括ESP8266和掌控板等)、micro:bit和树莓派(涵盖了pcDuino和banana派等)这四个类别。笔者给这些开源硬件分别起了一个“别名”,即board_name,如下页表2所示。目前,pinpong库已经支持Arduino、虚谷号和掌控板,其他的开源硬件支持已经在规划中。

3.基本用法

如何让代码更加简洁,并且容易理解?以Arduino UNO为例,下页表3中的代码将点亮Arduino板载的LED灯(D13引脚)。

从上述代码可以看出,初始化硬件只要正确输入硬件的品牌和型号即可。如果端口号省略,pinpong会自动扫描本机可用的所有串口,然后给硬件烧录特定的固件。这样一来,开源硬件的入门门槛降到了最低:只需要能辨别开源硬件的型号,并且知道其引脚的正确编号。

4.基础对象

pinpong的基础对象分为四种,分别为Board、Pin、Servo和I2C,具体说明如表4。

控制I/O引脚,是开源硬件的最核心的功能。pinpong库中将引脚模式分为四种,分别为Pin.IN(输?模式)、Pin.OUT(输出模式)、Pin.ANALOG(模拟输入模式)和Pin.PWM(模拟输出模式)。不同的引脚模式,对应不同的读写方法,具体如表5所示。

● 结束语

笔者很幸运地遇上了一个非常专业的创客团队,因而在短短的时间内,pinpong库成形并开始测试。笔者在0.3版上通过基本的功能测试,体验非常好。就在启动pinpong项目的这段时间内,笔者了解到更多人的需求,也越来越体会到开发pinpong库的价值。

也许pinpong库还有很多不完善之处,但是笔者相信,有这么多一线教师和专业研发团队的支持,pinpong库一定会越来越好用,会助力我国乃至全球的信息技术教育的发展,让更多的孩子爱上编程,爱上开源硬件。

猜你喜欢

编程语言树莓代码
基于JavaScript编程语言之 闭包技术在焦点轮播上的应用
计算机软件JAVA编程优势及其应用
基于计算机应用软件开发的Java编程语言研究
神秘的代码
黄金水果红树莓
树莓红了 游人醉了
一周机构净增(减)仓股前20名
重要股东二级市场增、减持明细
e络盟率先推出第三代树莓派
年度睡姿大盘点(下)