Firefly
在衣服自己洗前面的文章中的,大家都有看到提及FireFly这个东西,它到底是什么呢?
其实在更久远一点,衣服自己洗用的是香蕉派,其实包括树莓派,它们都是一类性质的东西,低功耗单板电脑。
让我从官司上复制几张图片,让大家看看。
这么多年来,一直稳定地运行着,比香蕉派什么的稳定多了。
在衣服自己洗前面的文章中的,大家都有看到提及FireFly这个东西,它到底是什么呢?
其实在更久远一点,衣服自己洗用的是香蕉派,其实包括树莓派,它们都是一类性质的东西,低功耗单板电脑。
让我从官司上复制几张图片,让大家看看。
这么多年来,一直稳定地运行着,比香蕉派什么的稳定多了。
在 Firefly 通过编译安装的升级 python 的时候,编译始终有些乱七八糟的错误。一气之下,就更新了固件到 Ubuntu 18.04 系统上,再编译升级报错就少了很多,一点点终于升级成功了。
可是按照网上的操作安装 opencv-python 时总是提示找不到,怀疑是这个并没有针对 ARM 的版本吧。使用 python-opencv 只有 2.7 的可以安装上。
只好通过网上的帖子,编译安装 opencv,当前最新的版本是 4.3,按照这里,还有这里。经过漫长的等待,虽然有很多警告,不过终于是安装成功了。
先下载最新的版本
wget https://github.com/opencv/opencv/archive/4.3.0.tar.gz
然后解压缩 tar zxvf opencv.4.3.0.tar.gz
进入到其目录,并创建 build 子目录
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE ..
make -j4
sudo make install
最后可以使用 import cv2 来验证
网上的帖子里说在使用 cmake 时传递的参数会导致很多错误,所以就直接使用了最少的参数。好在没有什么问题。
在安装好 Python3 后,使用 pip3 安装 pillow,总是报错 The headers or library files could not be found for jpeg, a required dependency when compiling Pillow from source.
搜索了一圈,最后在这里找到了解决问题的方法。
在我把移动硬盘带到单位后,一个很自然的想法就是想实现远程离线下载。衣服自己洗的小米盒子以前就是开了个远程下载,不过没有怎么使用过。再加上后来小朋友比较喜欢到处探索,在家里就比较困难了。
首先,我们需要去迅雷的网站上下载Xware的固件,此时最新的固件版本号是1.0.31,以后后续的更新应该是可以查找类似的帖子。
下载完成后,解压缩到某个目录下,并设置权限
sudo chmod -R 777 xunlei
sudo ./portal
需要强调的是,迅雷的下载是需要管理员权限的。运行该程序后,会联网请求迅雷的服务器并生成一个激活码。
打开 http://yuancheng.xunlei.com/,然后选择添加设备,输入刚才获取的激活码。一旦添加成功,就可以通过该网页添加下载任务了。
衣服自己洗发现Firefly在办公网络下无法下载ed2k资源,感觉非常的奇怪。
这里有2个比较重要的信息是:
1、衣服自己洗使用家里的香蕉派运行portal程序始终没有成功过,网络上也搜索过,按网络上的说法,似乎是无法解析remote.yuancheng.xunlei.com,也就是说是小区的宽带问题。说起这个宽带,简直了。
2、迅雷官方每次在发布的时候,都提供了好几个不同的版本供大家使用。衣服自己洗是以树莓派做关键字去搜索的。大家都说树莓派使用Xware1.0.31_armel_v5te_glibc这个版本就可以了,但是在单位和家里刚开始尝试的时候都失败了。后来挨个尝试,发现居然是要使用Xware1.0.31_cubieboard 才可以,不然就会提示未找到目录的错误提示。这个问题坑了好多天,都快要放弃的时候才找到可用的版本。
在前面的文章中,衣服自己洗提及为了打开自带的Led灯,而不得不安装golang的环境,后来在官网上发现了他们有开源python版本的库:pyFireflyP,开源地址为https://github.com/T-Firefly/pyFireflyP。
对于linux系统而言,很多都已经自带python了,而且安装也比golang容易的多。
从github上clone或者下载这个包,然后进入到目录下安装:
cd pyFireflyP
sudo python setup.py install
我的Firefly运行后会报错,显示FireflyP do not support <Rockchip (Device Tree)>! 应该是系统内核没有正确赋值,按照官方的说法,只需要修改setup.py文件,把 fplat=check_plat() 直接改成:fplat=’rk3288’,然后再次运行安装即可。
对于测试,运行 sudo python demo/gpio_test.py,就可以看到Firefly上的蓝灯和黄灯来回交替显示的效果了。
对于内核没有正确赋值的问题,估计我的板子是早期生产的,其信息并没有及时更新。至于现在是否已经更新不得而知。
当然,对于官网wiki上的另外一个设备写入的方法:
echo 1 >/sys/class/leds/firefly:blue:power/brightness //蓝灯亮
在最近的固件里并不能实现,早期的固件确实是有。这里衣服自己洗真心是要狠狠地吐槽一番,完全没有考虑到像我们这样的小白,以为所有的人都会自己编译固件。
上面提及的2种方法,虽然都是调用GPIO,但是是相互独立的,如果一起使用的话,可能会出现意想不到的后果。不过就目前来看,应该没有这个风险。
在说正事前,衣服自己洗需要说下Golang和Go的区分,事实上他们是同一个东西,仅仅是因为Go这个单词太常见了,在编程语言的描述中,为避免混乱,就改用Golang而已。这个问题我曾经也迷惑过。
Firefly 新版本的固件里,居然把板子上的灯默认给关闭了,也无法直接检索到了。这真是一个糟糕的设计。
为了打开Firefly上的灯,需要采用GPIO驱动,但是目前从上层软件搜索来看,论坛里一个可用的库却是采用Go来编写的。
那么问题就来了,首先我们需要安装Go的环境。
我们先来说windows上的安装,很简单,从官网上下载对应的windows版本,然后一路下一步安装即可。安装完成后,添加系统环境变量,GOPATH和GOROOT,这个变量在我自己理解来看,GOROOT是指Go的安装目录,默认的是C:\Go,然后GOPATH就真的是go想要搜索的其它资源的路径,支持多个路径。有点类似于C++里的工程include的味道。
对于linux系统,Google官方并没有给出编译好的版本,所以就需要我们下载源码自己安装了。衣服自己洗下载的是1.7.4的源码,放在/pi/go目录,进入src目录,运行 all.bash,显示出错,提示没有1.4的Tree,网上搜索了一下,发现go的新版本安装所需要的环境是需要先安装go1.4才可以的。
于是只好先下载go1.4的源码到/pi/go这个位置,再次运行 all.bash文件,由于是在香蕉派上运行,整个过程花了大概18分钟的样子,在安装后,还会自动运行测试程序,很遗憾,香蕉派上测试程序有的并没有测试通过,检查了/pi/go/bin目录下,已经生成了 go 和 fmt 文件,干脆拉倒。
修改 ~/.profile文件并添加2行代码如下:
export GOROOT=/pi/go
export PATH=$PATH:$GOROOT/bin
保存重启。然后再下载1.7.4版本的源码到原来的位置完成替换,然后再次运行/pi/go/src/all.bash,最好添加sudo。又是经过快20分钟的编译和安装。
写了个简单的hello world程序,go build hello.go,还是可以正确显示的。
至此,基本的运行环境就准备完毕了。