低成本玩单板机
1、标题两大名词的定义
-
低成本
:主要指较低的经济成本,而非时间成本、学习成本等。 -
单板机
:即SBC
(Single-Board Computer
),可认为是单片机
的升级加强版, 集成度更高、硬件资源更丰富、对手呆的软件开发人员更加友好(不需要画板焊接)。 至于其他特点,都是以上特点所衍生出的八股文,不说也罢。总之,想要深入学习基本原理, 或要最大程度的定制化,选单片机;若是个人小制作或者企业快速出原型的需求,可考虑单板机。
2、动机
-
玩
:想玩,回答了最根本的原因。 -
有低价
:买得起才能玩,具备了必要条件。 -
拓宽技术选型思路
:玩了能收获什么,解决了收益问题,对私能过自己心理关, 对公能对老板有交代能找财务报销。
3、选型
-
第一候选对象肯定是
树苺派
!因为它即使不是单板机的鼻祖,也属民用领域中最先开拓市场的一批, 还是名声最响的那个,资料齐全、生态丰富——唯一的缺点就是贵, 同时近几代产品的性能提升也并不算很亮眼(不能说很绝对,还要看跟谁作对比)。 -
放眼其他国外牌子的替代方案,选择不是没有,但都要加上关税,或者面对国内中间商赚差价。
-
最后看看国产方案,不难发现有很多满满
山寨“致敬”味道的“水果派”(不是“水果派解说XX”的那个, 请不要想歪),包括但不限于:香橙派、香蕉派、荔枝派、核桃派……第一感觉当然是不以为然。 然而随着搜索的深入,发觉事情并非表面那么简单。抛开国内厂商的跟风尿性以及拙劣的命名不谈, 这些年来国产芯片的进步也是肉眼可见的事实,不失为一个可考虑的方案。 - 继续对比几种国产“派”,香橙派给人留下的印象相对较深,原因有二:
- 国际化做得还行,有一批国外用户、粉丝,尽管很难统计具体数量,但综合国内外用户的评价, 容易得到更精准的评估。
- 当中的一个型号——香橙派
5
——可算作一个里程碑式的产品,在性能不差的情况下, 把价格拉低了一大截,有点像当年某米把智能手机价格拉低的情形,再对比一下产品命名, 想一想“雷布斯”和Jobs
的梗,直觉告诉我这是一款可以入手的产品。
- 如果说以上考虑都偏感性,不妨再看一看
香橙派5
主要的技术指标:CPU
:瑞芯微RK3588S
,8nm
LP制程,8
核64
位——4
个Cortex-A76
大核加4
个Cortex-A55
小核的模式,大核主频最高2.4GHz
,小核主频最高1.8GHz
,兼顾性能与功耗。 值得一提的是,有不少企业用过RK3588
做产品,即使网上公开的资料不够多, 起码也有人探过路,至少证明了这款芯片的能力,而RK3588S
作为它的阉割低功耗版, 用于个人项目或企业调研测试项目是完全没有问题的。GPU
:ARM Mali-G610
。NPU
:算力高达6Tops
。内存
:4GB
打底,最高支持32GB
。储存容量
:16MB
的或非
(NOR
)型闪存
(Flash
)、储存卡
插槽、M.2
固态硬盘接口。配套软件
:可选择的操作系统有Ubuntu
、Debian
、Android
、OpenWRT
、 香橙派“自研”系统(自研成份占多少不好说,姑且打个双引号)以及众多第三方系统, 详情可到官网查看,但暂未发现应用程序开发套件(即SDK
)和相关例程, 可能要加技术群才有(仅猜测,不作保证,后续有任何进展再更新)。应用场景
:边缘计算、人工智能、云计算、图像采集及处理、智能安防、智能家居等。
- 再与个人需求进行匹配一下,会使目标更明确,以本人的需求为例:
- 平时作为服务器来运行。至于什么样的服务,待定。
- 做内核移植、驱动开发测试。
- 后期可能会作为一个便携式开发小主机。
- 可能会采集、处理图像(需要有摄像头接口,但摄像头可以迟点买、慢慢选型号)。
- 可能会跑人工智能模型(用到
GPU
、NPU
)。
-
综上,可以预估目标板的价格应该在
400
以上(读者若不需要GPU
和NPU
还可以控制在200
以内, 甚至更低),硬件参数可以以香橙派5
为参考,若有时间还可以慢慢搜多几款对比一下, 没时间则直接入手香橙派5
也行(注意查一下价格历史、踩准打折促销时间点, 不过话说回来这款开发板已经好长时间价格没变动了),毕竟现在好多单片机开发板也卖五六百, 只不过面向的受众不同、教程资料的齐备程度也不一样。 - 若决定要入手
香橙派5
(或5B
、5 Plus
),不妨考虑一下如下建议:- 主控芯片(含
CPU
、GPU
、NPU
等)的能力最重要,需要涵盖你的核心需求, 就好比有一些高难度高风险的任务需要出去军警武警,结果你只找来普通派出所警员甚至小区保安, 肯定是不行的。 - 内存越大越好,因为各类系统、应用程序对内存的需求是永无止境的,多多益善, 但大内存也导致价格急剧上升,所以需要量力而行。
- 储存卡、固态硬盘的接口要有,方便自己随便选购随时更换。
- 其余不是必需的外设(摄像头、触摸屏、蓝牙、WiFi等),用到的时候、打折的时候再买, 并且要注意接口,最好买能在不同板之间复用的外设,那样就不需要换一款开发板又要重新买一次外设。 正是由于外设的非必要性、非紧迫性、可灵活增减的特点,所以后文专门呈现了一个最小化的硬件清单供大家参考。
- 包括香橙派在内的多数国产开发板的资料、手册、例程很欠缺,甚至部分旧型号已经找不到资料,
所以最好具备一定的
Linux
应用和内核的经验,并且有挑战、破解的心态。理论上来说也可以去逛官方论坛、 加技术群,但国内的风气和环境大家都体会过,吵、灌水多、广告多,好多问题扯半天没说到正题。 从这一方面来说,最适合新手的就是树莓派,缺点就只有“贵”,但新手都是要交学费的, 区别是交到哪里而已。
- 主控芯片(含
- 本章节以及后面章节的内容虽然是基于具体某一款的硬件产品以及某一种操作系统, 但一些原则、方向和思路是通用的,读者可以根据需要,灵活运用,也欢迎反馈补充。
4、最小化硬件清单
-
主板
:选了香橙派5
的最低档、丐版套餐——4GB内存的单独主板,五嚿水
(500
元)! 个人认为丐版套餐才最具性价比且在多数场合下已经够用,如果换成8GB
内存版本,要加150
; 换成16GB
,再加一次200
;搭配一张储存卡或一个电源适配器,均要加50
左右;搭配一个摄像头,至少加100
; 触摸屏更贵,3
、400
……所以,一开始“孤寒”(吝啬)一点吧,后期确有需要再在官方店铺以外的店按需购买! -
电源适配器
:官方要求配置5V4A
的电源适配器,但这只是最保险的规范,若预计开发板的工作负载并不大, 而且不接屏幕、不安装桌面图形化系统,把电流值降一半应该没问题——事实证明的确如此。 恰好手头上有一个5V2A
的电子书阅读器电源,以及一个同样参数的充电宝,就想试一试。先用充电宝供电, 不知是老化还是质量不行而供电不足,导致开发板反复重启(可以通过串口打印看到, 并且官方手册也明确指出供电不足会导致重启);换上电子书阅读器的电源再试,就没问题了(注意, 很多手机充电器并不是固定电压电流,而是带PD协商
的,这类充电器就不行;此外, 官方手册说通过电脑USB
口供电也不行,这个还没测试过)。所以,要把成本压缩到极致, 连电源适配器也可以自备!不过,如果后期要用开发板来编译内核、做图像处理、跑人工智能模型等, 还是要老老实实买一个5V4A
的电源(官方搭载套餐要加50
,自行在某宝其他网店购买能少一半以上), 前期不买只因需求不明确而没必要浪费钱——注:需求不明确指的是大多数人买板时踌躇满志要大干一番但到头来只跑了个Hello World
就收工的情况, 大量“未雨绸缪”预先打包购买的配件丢在一边吃灰,或拿到小黄鱼平台转卖便宜了奸商。 虽说一个小小的电源花不了多少钱,但需警惕的是需求的逐步提升,加一点钱买多一个摄像头、 再加一点买一块触摸屏……到头来很容易几百上千就没有了,还不如从一开始就严防死守卡紧预算! -
储存卡
:注意是TF
卡,又叫MicroSD
卡,是小卡而非大卡,不要搞错尺寸, 否则买回来插不进卡槽!在某宝上找一个国产牌子,32GB
容量的卡甚至能在15
元以内拿下。 注意:储存卡是必需的!原因与这款开发板的烧录方式有关,首次使用时, 即使能把系统烧到U盘或固态硬盘,插上也引导不起来,因为引导程序
未烧, 而引导程序
(用的是U-Boot
)的烧录需要插上储存卡开机进入系统之后,才能手动烧录! 这就是储存卡必须要买、而且建议买国产便宜货的原因。当然,手头上已有闲置的、8GB
以上容量的卡,也可以拿来顶住先,同时注意蹲守降价打折的大容量固态硬盘, 择机入手一块换上,那就完美了! -
USB转TTL模块
:用于串口调试。某宝上一搜就有,5
元以内拿下无甚难度。 串口的作用和意义毋需多言,玩嵌入式的人即使只出于习惯,也会配备一个,何况又便宜, 成本几乎可以忽略不计。 -
网线
和(USB
接口的)无线网卡
,二选一,或都选,反正也不贵。在某宝,无线网卡最便宜的5
元可拿下, 网线价格更不在话下,如果是出于学习、测试和个人小制作的目的,即使质量不好也问题不大, 最重要是便宜。
5、软件操作
-
访问官网或咨询客服,下载必要的使用手册、镜像、烧录软件等。
- 烧录:按照开发板的使用手册的指示,将系统镜像烧入储存卡即可。唯一有点麻烦的是,
在
Ubuntu
里运行烧录软件balenaEtcher-*.AppImage
时可能会提示缺失一个库libfuse.so.2
( 需要在命令行里操作才能看到这个报错,鼠标双击是看不到任何提示的),使用以下命令安装即可:$ sudo apt install libfuse2
-
串口配置:具体操作可参考之前的一篇文章《嵌入式Linux前期准备——软件篇.md》 的“2、串口调试工具”章节,并注意从开发板的使用手册获取正确的
波特率
。 -
开机、登录,均通过串口操作,下同。
- 修改密码(非必需操作,但建议养成这个好习惯):
$ sudo su - root $ passwd root $ exit $ passwd orangepi
- 修改登出清屏设置。登出清屏是出于安全性着想,不过若想保留完整的终端操作记录,可以考虑禁用此设置。
方法很简单,注释掉
~/.bash_logout
的清屏逻辑即可,如下所示:#if [ "$SHLVL" = 1 ]; then # [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q #fi
- 配置无线网络(若使用无线网卡):
# 新增网络。如果有多个无线网卡,需要使用“-i”选项指定操作接口。 # 新增成功后,会打印新增项的编号(后面命令要用到),首次新增是0,依次递增。 $ sudo wpa_cli add_network # 设置无线网络的名称,注意单、双引号不可省略。0是上一步打印的编号,下同 $ sudo wpa_cli set_network 0 ssid '"替换成具体名称"' # 设置密码,注意单、双引号不可省略 $ sudo wpa_cli set_network 0 psk '"替换成具体密码"' # 启用网络 $ sudo wpa_cli enable_network 0 # 通过DHCP机制来获取IP地址 $ sudo dhclient # 查看连接状态,若是连接成功则会显示wpa_state=COMPLETED, # 并且ip_address有真实可用的IP地址。 $ sudo wpa_cli status # 若连接失败,则可手动重连,然后重新执行上面的DHCP命令来获取IP地址。 $ sudo wpa_cli reconnect
- 配置有线网络(若使用网线)。若有路由器或交换机,直接插上即可,不用多说。
若电脑有多个网络接口、开发板直连电脑且通过电脑访问公网,则可进行以下配置:
- 电脑端的配置(日常使用
Ubuntu
,Windows
不知道怎么配……):# # 设置一些变量,后面要用到 # $ export INTERFACE=enp0s31f6 # 直连开发板的网络接口名称 $ export SELF_IP=192.168.1.3 $ export NETMASK=255.255.255.0 # 使用固定的IP地址。 $ printf "\nauto $INTERFACE\niface $INTERFACE inet static\naddress $SELF_IP\nnetmask $NETMASK\n" \ | sudo tee -a /etc/network/interfaces # # 较新版本的Ubuntu改用netplan, # 则手动向/etc/netplan/01-network-manager-all.yaml加入以下内容(注意格式缩进): # ethernets: # enp0s31f6: # dhcp4: no # addresses: [ 192.168.1.3/24 ] # 重启网络服务使配置生效 $ sudo /etc/init.d/networking restart # # 若是netplan,则执行: # sudo netplan apply # 开启分组转发(packet forwarding)功能。除了可以使用命令操作, # 还可以将/etc/sysctl.conf的net.ipv4.ip_forward=1一行解除注释, # 然后执行sudo sysctl -p $ sudo bash -c 'echo 1 > /proc/sys/net/ipv4/ip_forward' # # 定义转发规则 # $ sudo iptables -F $ sudo iptables -P INPUT ACCEPT $ sudo iptables -P FORWARD ACCEPT # 这里的wlx00e02da5358e是一个无线网卡的接口名称,替换成自己的无线或有线网卡名称即可 $ sudo iptables -t nat -A POSTROUTING -o wlx00e02da5358e -j MASQUERADE
- 开发板的配置:
# # 设置一些变量,后面要用到 # $ export INTERFACE=eth0 $ export SELF_IP=192.168.1.4 $ export NETMASK=255.255.255.0 $ export GATEWAY_IP=192.168.1.3 # 即电脑端的IP # 配置该接口的(静态)IP地址、掩码、默认网关等。 $ printf "\nauto $INTERFACE\niface $INTERFACE inet static\naddress $SELF_IP\nnetmask $NETMASK\ngateway $GATEWAY_IP\n" \ | sudo tee -a /etc/network/interfaces # # 上述默认网关也可以通过命令行来配置(虽然不推荐),作为备忘,也顺便给出命令(请勿执行): # sudo route add default gw $GATEWAY_IP # 或: # sudo route add -net 0.0.0.0/0 gw $GATEWAY_IP # # 重启网络服务使配置生效 $ sudo /etc/init.d/networking restart # 可选步骤:配置域名服务器地址(仅当系统不能正常解析域名才考虑做此操作) $ echo "nameserver 114.114.114.114" | sudo tee -a /etc/resolv.conf
- 参考链接:
- https://blog.csdn.net/weixin_38634173/article/details/128000797
- https://zhuanlan.zhihu.com/p/147182924
- 电脑端的配置(日常使用
-
同步日期时间:时间的准确性毋需多言。不过,系统已默认开启日期时间同步机制。 若无,则需安装及设置
timedatectl
命令,具体可自行上网搜索。 - 建议修改终端视窗大小(默认的窗口尺寸太小,在使用
VIM
时感觉尤其明显):$ sudo apt install xterm $ resize
-
设置
SSH
:系统默认已配置。 - 挂载
NFS
:- 既方便在电脑与开发板之间传输文件,也能弥补开发板储存空间的不足。
- 具体操作可参考之前的一篇文章《Linux下通过NFS挂载远程目录》, 需注意电脑作为服务器、开发板作为客户端。
- 禁用交换分区(仅限于小容量储存卡,目的是减少对卡的擦写以延长寿命,大容量固态硬盘则随意):
# 禁用前查看一下内存分配情况,以“Swap:”开头的一行若有指标不为0则继续以下操作。 $ free -m # 立即生效,重启后还原。若要永久生效,可将其写入启动脚本(可能要去掉sudo)。 $ sudo swapoff -a # 禁用后再查看内存分配情况,以“Swap:”开头的一行全部指标应为0。 $ free -m # # 就算不禁用,也建议执行以下操作来降低交换分区的使用优先级 # $ cat /proc/sys/vm/swappiness $ sudo vim /etc/sysctl.conf # 增加或修改一行:vm.swappiness=0 $ sudo sysctl -p $ cat /proc/sys/vm/swappiness