Xu-Blog

养一猫一狗,猫叫啵啵,狗叫没想好~~

0%

树莓派-EE工程师的玩具

树莓派的定位并不是一块用来做嵌入式开发的开发板,而是一个廉价并且高性价比的可以在一定程度取代 PC 并且硬件接口更丰富的软件开发和使用平台。有人可能会问,树莓派有 GPIO 接口,可以接很多硬件,怎么会是一个软件开发平台呢?那么我要问你 PC 有 USB 接口,可以接很多硬件,它是一个硬件开发平台吗?树莓派的 GPIO 接口,和 PC 的 USB 接口,没有本质的区别,都是用来连接硬件的,只是接口更底层一些。

那么这样看,我之前用的 arm11 开发板,是否也是软件开发平台呢?答案是否定的,这要看目标用户。我们可以把目标用户简单分为三类:硬件开发者、软件开发者和使用者。硬件开发者主要是设计、改良硬件和为新老硬件编写驱动程序等等,软件开发者主要是在现有的硬件下开发软件(通常不包括驱动程序),使用者使用现有硬件和软件而不进行开发。

我之前使用的 arm11 开发板,主要的目标用户是硬件开发者和软件开发者(可以不严谨地统称为嵌入式开发者),几乎没有使用者,因为对于没有开发经验的人,用户体验是很差的。而树莓派的主要目标用户是软件开发者(和嵌入式开发者有重叠但并不多)和使用者,用户体验很好,但几乎没有硬件开发者,因为树莓派的硬件相对比较封闭,不销售单独的 SoC 和其他芯片,硬件资料也并不是很完善,在硬件层面很难 DIY(对很底层的软件开发者也存在类似的问题)。

那么目标用户的不同,就导致树莓派虽然看起来很像其他的 arm 开发板,基本也能用和其他的 arm 开发板一样的方式使用,性质却有很大的不同。

这也解释了为什么很多嵌入式行业的软硬件开发者并不喜欢或者看好树莓派,甚至对它很不屑,而很多对嵌入式了解很少的开发者以及使用者会对树莓派趋之若鹜。

那么我为什么会对树莓派感兴趣,而对之前那块 arm 开发板无感呢?最主要的问题并不是用户体验差,而是软件方面的配套环境不完善。最重要的是 Linux 内核版本支持。官方只提供低版本的 Linux 内核(2.6 系列),如果用这个内核来配合最新的发行版使用,几乎是不可能的,会遇到许多问题,一方面是这个内核缺少很多最新发行版使用的特性,另一方面是很多硬件方面的支持不只是替换内核文件和内核模块的事情(比如有些工具也需要移植),替换起来也麻烦。如果想使用更新版本的内核,需要打各种补丁以及自行修改代码,虽然硬件的资料比较齐全,理论上可以实现,但即使是经验丰富的嵌入式开发者也很难搞定,也没有人做好了提供给别人使用。这就导致几乎只能使用官方提高的老旧 Linux 镜像(或者其他古老版本的发行版)。而这个 Linux 环境几乎毫无用户体验可言,最新版本的软件很难安装上(几乎都需要自己编译,而且容易出现编译错误),常见的 USB 外设(比如摄像头、无线网卡、蓝牙)也很难驱动起来(运气好的话,可以从其他地方找来驱动代码,修复很可能出现的编译错误)。

而树莓派的软件环境是很好的,基本可以使用最新的 Linux 内核和发行版(比如 Archlinux),并且有很多人为这个平台开发软件,用户体验有质的提升。即使是对嵌入式开发一窍不通的开发者或者使用者,也可以用树莓派做他们想做的事情。

另外我发现一个有趣的事情,折腾树莓派的人群(至少在国内),和(曾经的) Linux 桌面用户群体很相似(我曾经混迹于 Linux 桌面用户社区,很多人折腾桌面美化、系统配置、工具优化、写小脚本等等,玩 Linux 而不是用 Linux),他们主要是使用者,可能稍微会一些脚本或者其他编程语言,但并没有独立开发完整应用程序的能力和意向。这和嵌入式开发者人群是很不同的。

综上,树莓派和其他 arm 开发板的本质区别在于目标用户不同。树莓派的目标用户主要是软件开发者和使用者,而其他 arm 开发板的主要用户是硬件开发者和软件开发者。这也是树莓派能够吸引更多用户的一个重要原因。

说到树莓派,很多人喜欢把它和 Arduino 对比:前者性能高但软件结构复杂,后者性能有限但容易上手。

当要开始一个个人项目的时候,到底哪种微型计算机才合适?

首先要考虑的就是成本问题,如果真的是要做项目,那同样能实现的必定是越便宜越好,
Arduino 也就10 块钱,价格上满满的优势。

树莓派和Arduino看起来很相似,都是带控制器的小型电路板,但它们完全是属于两种不同的设备。

树莓派是基于微处理器的硬件平台,核心是 Broadcom ARM 架构 CPU,可以完整运行 Ubuntu、Windows 10 IoT Core 等操作系统,甚至板载了 USB、以太网和 HDMI 等输入输出设备接口,能外接键盘显示器等。

Arduino 则是基于微控制器的硬件平台,核心是工业控制领域常见的 ATmega 系列芯片,只能执行提前烧录进芯片的程序。比如常用的 Arduino UNO 采用的是 ATmega328,只有8位数据宽度,16MHz 晶振时钟。

正因为树莓派搭载了操作系统,所以它的软件复杂度要高得多。比如最简单的点亮一盏 LED 灯,在树莓派上你需要安装操作系统,安装 GPIO 程序库,编写代码,配置开机自动执行等。Arduino 上则极其简单,用官方提供的 IDE 工具编写 C 代码,通过 USB 烧录进芯片,开机即可运行。

总的来说,树莓派是全功能的卡片电脑,而 Arduino 是剪裁用于特定用途的微控器。对于一些简单的场景,这两款硬件都可以胜任,但还是有一些区别:如果有网络通信、图形图像、大计算量的需求,就只能选用树莓派;如果需要精细控制 GPIO,比如模拟 spi 协议和传感器通信等,则选用 Arduino 会更简单。

但是在掌握了一定的编程能力之后,完全可以联通两种硬件,树莓派做上位机负责管理系统,Arduino做下位机负责控制其他硬件,实现优势互补。

网上总有很多说法,树莓派没啥用,就是个玩具。没啥用我不认同,是个玩具我认同。

我拥有第一个树莓派挺晚的,刚到电信院这边实验室时候,老板给了些经费买一些学习用品,我选择了树莓派,当时有个师兄,也买了一样的,说要跑机器学习,也是个妙人。

树莓派能干啥,我最开始也一直没搞明白,我知道它能搭建博客,我就把自己的博客在树莓派上搭建了一个,一直开着,但是只能局域网访问,广域网需要花钱。正巧阿里云各种学生活动,一会免费赠一会9.9一年,我就这么断断续续一直走阿里云了,后来树莓派就作为本地云备份了。每次push时候输入密码我才想得起来它。算起来也是吃灰了。

这段时间一直忙项目,时间断断续续,文章更新也极度不稳定,健身也不稳定,不过偶然把树莓派的亚克力外壳掰折了,作为强迫症的我忍不了啊,这必须得拿出来捯饬捯饬了。

首先想到的当然是自己设计个壳子,淘宝做出来好几百,算了,自己开PCB板子,做顶盖,IO做支持,边上弄铜柱支撑,50。作为垃圾佬的我,还是自己拿个万用板焊吧。顶盖一拆,谁都不爱。
焊接了一个IO扩展,相当的丑了,奈何好用就行。在实验室废弃品箱子里找到一个不用的LCD1602,那不错,拿出来接上,用4bit模式,驱动代码网上现成的多的是,懒得写。代码简单,调用下os或者command,读取一下系统信息。然后显示在lcd102上。

End~~请支持原创撒花= ̄ω ̄=花撒
如果您读文章后有收获,可以打赏我喝咖啡哦~