从Processing到Python

    周贤杰 李玲雪 薛港潇

    

    

    

    创客书籍《爱上Arduino》(Massimo Banzi著)中,介绍了一个叫做“互动云”的互动媒体作品。这个作品利用Processing程序语言编写代理程序(proxy),通过网络从makezine.com下载RSS文件并提取文件中的所有关键词,然后再计算“peace、love、Arduino”三个词的数量,并且根据这三个数据产生一个代表色彩的RGB值,最后通过USB接口传给Arduino,点亮一个RGB灯,显示出具有特定意义的灯光色彩。

    这个作品的实现,需要作者了解Processing的使用方法和功能,同时要具备Arduino的编程能力,熟悉串口通信和引脚控制,难度比较大。但是笔者发现,借助pinpong库,并借助Python语言的requests库(网页爬虫),实现这个项目的难度就降低了。

    ● 作品的创意思路

    笔者准备用新的方案,重新实现(remake)这个“互动云”作品。因为技术更新,makezine.com上已经不提供RSS文件订阅了,笔者改用“DF创客论坛”上的帖子信息。具体思路如下:

    在“DF创客论坛”搜索“pinpong”,在返回的网页信息中找三个关键字,分别为“arduino”“虚谷号”和“掌控板”,得到不同的关键字出现次数,然后分别对应0~255的数字,赋值为R、G、B,然后用pinpong库来对应控制R、G、B三种颜色(RGB灯)。

    这个RGB灯光的颜色就代表了pinpong库的用户中,使用“arduino”“虚谷号”和“掌控板”这三种开源硬件的比例。随着用户作品发布数量的变化,这个灯光的色彩也在同步变换,是不是很有意义?

    ● 作品的原理分析

    “互动云”作品是一个典型的网页爬虫结合开源硬件的案例。网络爬虫是信息输入,灯光显示是信息的输出,工作流程如图1所示。

    从图1可以看出,获取信息、处理信息和输出信息,都需要特定的库来实现,如爬虫使用requests、网页文本分析使用Beautiful Soup库、开源硬件的驱动则需要pinpong。对这三个库的简要介绍如下页表所示。

    ● 作品的硬件搭建

    作品的硬件其实非常简单,开源硬件加上RGB全彩LED模块即可。开源硬件可以使用任何一块Arduino、掌控板或者micro:bit等。考虑到RGB的LED模块不够亮,笔者在boson Kit中找了一个WS2812 RGB全彩灯带模块。

    器材清單:任何一块Arduino、Arduino扩展板、WS2812 RGB全彩灯带。

    笔者将灯带连接在Arduino的数字口P7(其实从P2~P13,任何一个引脚都可以),作品实物连接如图2所示。

    因为使用了灯带,所以在引用pinpong库时,需要导入“NeoPixel”包。指令为:from pinpong.board import Board,Pin,NeoPixel。

    ● 作品的代码编写

    平时教学已经习惯了用Jupyter Notebook,这次的代码习惯上用Jupyter Notebook来写。

    首先要打开DF社区,在搜索栏搜索pinpong,然后在地址栏中得到URL地址,即https://mc.dfrobot.com.cn/search.php?mod=forum&searchid=44&orderby=lastpost&ascdesc=desc&searchsubmit=yes&kw=pinpong。具体的代码也非常简洁,为了方便理解,笔者分为三个部分来呈现,具体见下方二维码。

    笔者统计了一下,代码仅二十多行。而《爱上Arduino》中的项目,Processing的代码加上Arduino的代码,要超过一百多行。Python加pinpong的优势就显示出来了。

    ● 作品的测试和部署

    计算机接上Arduino,运行代码后,Arduino将自动烧写一个特定的固件,然后就能看到Jupyter上输出关键词“Arduino”“虚谷号”和“掌控板”出现的次数。然后Arduino连接的RGB灯带就开始点亮。要呈现什么样的创意外观呢?既然是“互动云”,就可以做成“云”的样子,将硬件封装在棉花中,如图3所示。

    在这个作品部署的过程中,pinpong的优势再次得到了显示。因为原来的作品用Processing,Processing对硬件的要求要高一些,无论是安装程序还是运行程序都不如Python方便快速。笔者选择了一款能够运行Linux的硬件作为处理信息的“主机”,价格不到百元,使用的是国产芯片RK3308(ROCK PI开发板),经过测试,运行非常流畅。