作为一个伪Geek,2019年下半年看到树莓派4出来之后,小手一抖买了两个。很多朋友问我:树莓派可以用来干啥?本篇就来总结一下树莓派的各种用途,只有想不到的,没有树莓派做不到的!

树莓派是什么

树莓派是一系列为编程教育而设计的只有信用卡大小的微型电脑(单板计算机)。下图是当前最新款RaspberryPi 4 Model B(图片来自www.yahboom.com):

这么多接口的单板计算机,实际只有掌心大小,而另一款RaspberryPi Zero/ZeroW,甚至只比大拇指大一点。硬件接口丰富,低功耗高性能,竟然还这么便宜,让我如何忍住剁手的冲动?

作为一台便携电脑,树莓派可以…

树莓派4B出来的时候,某些标题党自媒体宣传“替代PC”,但Linux系统的PC市场份额很低,桌面软件生态不完善,作为PC用途而言,注定只是一个小众选择。我其中一台树莓派4B来当PC用,总体体验不错,下面从一个软件开发者的使用角度一一分析。

普通办公场景

阿特伍德定律告诉我们:Any application that can be written in JavaScript, will eventually be written in JavaScript。推导一下就是:一切以前在客户端做的事情,最终都将可以在浏览器上做。

各种软件的Web化,让浏览器成为操作系统之上的“操作系统”,树莓派3B+就可以比较流畅地运行Chromium,树莓派4B表示打开数十个Web页面毫无压力。所以,能跑浏览器就可以满足满足大多数普通办公场景,树莓派CPU和GPU的算力也完全足以应对办公场景了。

办公用途装什么系统合适?对于普通终端用户,安卓系统的软件生态则更加繁荣,装Android可以覆盖更多办公娱乐场景(毕竟已经破产锤子TNT工作站已经验证了安卓PC的可行性😆);专业领域用户装Raspbian则更合适,比如我这样的程序猿。

下面我们以软件开发者的角度,来细数各种具体的用途的用户体验(安装Raspbian系统为例)。

编程教育用途

树莓派基金会是一个慈善组织,让更多人可以接受到编程教育是树莓派的初衷。买一个老少皆宜的树莓派给孩子玩,比去什么少儿编程强多了。个人认为孩子参加少儿编程课程毫无必要。计算机科学是建立在基础学科根基上的,而编程语言又是建立在计算机科学上的,连数学物理基础都没有的低年级孩子学这个,如建空中楼阁。让孩子玩的开心、锻炼逻辑思维的方式多了去了,除非孩子对这方面有兴趣,否则不建议刻意参与编程教育课程。

玩树莓派就不一样了,低年级孩子可以练练动手能力和逻辑思维,高年级孩子和成年人可以学到计算机领域的专业知识。Raspbian自带各种花式编程教育软件,有兴趣就深入探索,无兴趣就关机多去参加户外运动。

  • Education - Logoo - …

Python开发:体验非常棒

Python不仅在机器学习领域现在是头把交椅,在嵌入式开发应该也是弱类型语言第一

  • 树莓派上Python的硬件开发库非常完善,甚至很多库都兼容Arduino上跑micropython
  • Python本身的跨平台特性,脚本写好放在哪都能跑,比如在树莓派上跑Tensorflow甚至是PyTorch都可以!不过在机器学习方面,树莓派的算力就捉襟见肘了。

Golang开发:差强人意

总体来说,能写能跑,但不能愉快的单步调试,因为Go的Debug工具dlv目前还不支持ARM(2020/02/20更新:https://github.com/go-delve/delve/issues/118 这个持续将近5年的Issue终于关闭了,下个版本的dlv将支持ARM下Debug)。

另一个问题是Go的主场不在嵌入式开发,硬件相关库兼容性和稳定性不足。比如APA102这个LED灯带模块的硬件驱动库,Python库用起来没有任何问题,但Golang的库(https://github.com/google/periph)却显示不了完整彩色,只有个别颜色可以亮起来。

当然,如果是做区块链或者Web服务,交叉编译到ARM在树莓派上跑是没有问题的,但这就不属于在树莓派上开发调试的用途了。

JS/TS开发:几乎满分

大部分常用的VSCode插件在树莓派上都能正常运行。因此在VSCode下,开发JS/TS,甚至C#(.Net Core平台)都是零障碍的。

  • 前端开发体验完美,虽然Webpack构建时间比i7 7700的机子要慢一倍多,但Hot Reload仍然是秒级,丝毫不影响开发
  • 使用JS/TS开发NodeJS后端体验完美,常用的带C++ Binding的npm库也都能在ARM下正常编译
  • 嵌入式开发差强人意,一些硬件模块在npm找不到合适的库,rpi-gpio在树莓派4上有问题,毕竟ECMAScript的主场在大前端领域

小结

通过上面几个例子可以看出,作为开发者是可以尝试使用树莓派来替代PC做日常开发的,主流编程语言及其工具链、三方库大多保持着对ARM的兼容性,而且小型项目在开发阶段对计算资源要求并不高,树莓派接上两个屏幕,配一个机械键盘,足以应对很多项目了。

若是C/C++开发,vim配置成IDE一把梭也能搞起来,很多库make三连都能成功;若是Python、JS开发,体验与普通PC并无二致。而局限性也不少,比如:ARM Linux下很难做客户端开发;算力有限,大型项目和一些细分领域只能用高性能PC。

作为一台服务器,树莓派可以…

  • Web服务器
  • 跳板机,代理机:FRP,Sock5
  • 私有云存储/NAS
  • 爬虫机,下载机
  • 分布式计算、网格计算、边缘计算节点:SETI公益计算
  • 路由器:USB转以太网卡,OpenWrt软路由
  • N合一之术:容器化 Docker Containerd K3S https://k3s.io/

作为一个多媒体终端,树莓派可以…

  • 流媒体 Camera 照相机、家庭监控: 共享鱼缸、直播
  • 多媒体中心、机顶盒: Television OpenELEC/Kodi
  • 语音、视频通信终端:树莓派电话项目,Conference - BareSIP

作为物联网设备,树莓派可以…

上面的用途,基本都不会用到那40Pin引脚,而这40Pin引脚,是树莓派变身物联网设备的精髓所在: https://pinout.xyz/

  • 硬件模块控制中心: 这是最简单的用途,引脚直接连接传感器或者其他硬件模块;或是UART连上其他算力更弱的MCU如Arduino变身上位机
  • 智能小车、机器人:Robot
  • 无人机飞控:Aircraft
  • 智能音箱: Intelli Mic/Speaker
  • 智能家居中控:Hass.io

总结

树莓派的博通SoC中的CPU是ARM架构的,其他同算力级别的单板计算机,CPU也大多是基于ARM的,少数是基于x86架构的芯片。精简指令集(RISC)的ARM架构芯片,比复杂指令集(CISC)的x86架构芯片功耗低很多,这在物联网、移动端至关重要,因此不管是苹果A系列、华为麒麟系列、高通骁龙系列处理器,都是基于ARM架构的。就单板计算机而言,同类产品还有这些:

  • Nano Pi系列:国内友善电子发售的硬件开源单板计算机,性价比也很高,不同配置的型号很多,有兴趣可以试一试
  • BananaPi/OrangePi:俗称香蕉派/香橙派,兼容树莓派的开源硬件产品(树莓派硬件并不开源),据说稳定性不如树莓派,目前4代树莓派4核Cortex-A72 CPU的性能成倍提升,感觉这些板子几乎没有性价比优势了
  • Rock Pi及基于瑞芯微RK系列芯片的开发板:主打高性能和音视频处理能力,国内大多数机顶盒和智能电视都是RK系列芯片,RK3288、RK3399等等ARM芯片,相关的单板计算机产品性能是超过树莓派的,而且主板大多早已支持双摄、双4K视频输出,搭配安卓系统在生态上非常成熟。当然缺点就是价格和配件也稍贵一些。
  • Intel Edison/Galileo/Joule/Curie:英特尔的x86嵌入式板子,我有一块好友赠送的Edison板子,做工精致,400MHz的双核Quark处理器,虽然算力有限,但是能直接跑x86的二进制程序,硬件接口兼容Arduino,价格不菲喔
  • 其他小众板子,大多数跑Linux的都ARM架构的,比如华硕ThinkBoard、荔枝派等等,也有例外,比如某宝上还有卖国产RISC-V架构的平头哥芯片开发板。

虽然专业是做软件开发,但我非常热衷于收集这些板子当业余玩票。除了树莓派系列,还玩了一些AVR(Arduino系列)、ESP(ESP8266系列)、STC(朋友赠送的89C51,89C52)单片机开发板以及一堆传感器和模块。即使我不了解数电、模电这些电子专业知识,用现成的模块搭一搭电子积木也其乐无穷。面对这些硬件的时候,站在巨人肩膀上寥寥数行代码,可以规律地传输着一个个字节、控制着电子流动,让电子的能量变成声波、光波、热量、动能,或是感知这个世界,这岂不是一件极其有趣的事情?