最近闲着无聊,买了个树莓派Zero,准备在上面跑.Net Core,来驱动各种传感器
就是上面这货。之前手上已经有一个树莓派3B+,但是介于3B+已经被我挂在路由器旁边当做服务器用,不是很方便拿来研究接口,于是就挑了一个便宜的Zero玩玩,事实证明,我想太天真了,我以为只要是Linux系统,就能安装.net Core,实际上呢,我整了一个晚上才不得不认识到一个事实:即便是.net Core也是认CPU架构的,Pi Zero用的ARMv6就是不支持,哎早知道在买之前多做做功课了,买一个树莓派4也是个不错的选择啊。
幸好苍天不负有心人,我找到了 另外一个能在Linux上面运行.net的途径,那就是在Linux上面安装一个Mono,然后.net通过Mono当做虚拟机运行,其实在原理上和.net core是差不多的,可是Mono在性能上比原生的.net core差了很多便是,不过我们只是用来跑外部模块,也不是很需要多高性能便是了。
好了,唠嗑正式结束,让我们开始正题吧
首先,我们需要在Linux上面配置Mono的程序,讲人话就是安装Mono,不过在安装之前,我们还需要更改源,毕竟树莓派自带的源别指望在国内有好的下载体验
sudo sed -i ‘s#://raspbian.raspberrypi.org#s://mirrors.tuna.tsinghua.edu.cn/raspbian#g‘ /etc/apt/sources.list sudo sed -i ‘s#://archive.raspberrypi.org/debian#s://mirrors.tuna.tsinghua.edu.cn/raspberrypi#g‘ /etc/apt/sources.list.d/raspi.list
运行上述两条指令,把树莓派自带的源替换成清华源,这样安装Mono会快很多
sudo apt-get install mono-devel mono-complete mono-dbg
运行上面指令后,在树莓派Zero上就会自动安装配置完毕Mono环境了。
对了,为了方便调试,我们还需要配置SSH的远程root连接
sudo nano /etc/ssh/sshd_config
运行上述指令后
找到这一条,然后改成上图这样子后(其实也就去掉#,后面的参数改成yes罢了)
完事以后,按Ctrl+X,退出编辑并覆盖保存就行。
sudo service ssh --full-restart
最后我们运行上述指令重启SSH服务以后就能够以root权限登录树莓派了。
以上是树莓派的系统的配置过程。
接下来我们需要配置Visual Studio
首先我们新建一个项目,由于最新的Mono支持.net core,所以我们直接建立.net core 3框架的项目就行,而且甚至不需要拖家带口带上.net core那么多运行库就能直接在Mono虚拟机下跑,简直了...
然后,我们需要有一个扩展能够直接在PC上远程调试树莓派上的程序,因此
搜索Mono的调试插件,有很多个,功能都差不多,挑一个顺手的就行
安装好Mono调试插件以后
需要配置下Mono调试插件的设置
其实主要的无非就是这么几个,新建一个配置,输入IP、端口、用户名和密码,避免麻烦最好直接上root权限,反正自己用
然后每次调试的时候,点击通过SSH生成和调试
就能获得和本地调试一样的体验,不得不说,这个体验实在是太好了。
接下来是项目的
其实也就一点,在Nuget上面找一个第三方的库来调用GPIO接口就行,没别的了
Nuget下搜索Raspberry,下面的库基本上都是关于调用树莓派gpio的,随便挑一个便是
我这边选择了文档最为齐全的Unosquare.Raspberry.IO
下面两个是依赖项,尤其是WiringPi,是直接管理接口的主要库
好,以上是准备工作,下面的是具体实现
上面这张图,对应的就是树莓派Zero上,一共40个针脚的定义,其中,两个5V的接口可以直接当做电源输入或者输出用,GND是接地这个没啥好说的,我们主要看GPIO,这里有很多很多GPIO接口,这些接口才是负责信号输入以及输出使用,我们控制的主要也是这些接口。
然后我们这次的主角也上场了