在树莓派Zero上使用C#+Mono驱动TM1637四位数码管

时间:2022-06-25 01:02:48

最近闲着无聊,买了个树莓派Zero,准备在上面跑.Net Core,来驱动各种传感器

在树莓派Zero上使用C#+Mono驱动TM1637四位数码管

  就是上面这货。之前手上已经有一个树莓派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

运行上述指令后

在树莓派Zero上使用C#+Mono驱动TM1637四位数码管

找到这一条,然后改成上图这样子后(其实也就去掉#,后面的参数改成yes罢了)

完事以后,按Ctrl+X,退出编辑并覆盖保存就行。

sudo service ssh --full-restart

最后我们运行上述指令重启SSH服务以后就能够以root权限登录树莓派了。

以上是树莓派的系统的配置过程。

接下来我们需要配置Visual Studio

首先我们新建一个项目,由于最新的Mono支持.net core,所以我们直接建立.net core 3框架的项目就行,而且甚至不需要拖家带口带上.net core那么多运行库就能直接在Mono虚拟机下跑,简直了...

然后,我们需要有一个扩展能够直接在PC上远程调试树莓派上的程序,因此

在树莓派Zero上使用C#+Mono驱动TM1637四位数码管

搜索Mono的调试插件,有很多个,功能都差不多,挑一个顺手的就行

安装好Mono调试插件以后

在树莓派Zero上使用C#+Mono驱动TM1637四位数码管

需要配置下Mono调试插件的设置

在树莓派Zero上使用C#+Mono驱动TM1637四位数码管

其实主要的无非就是这么几个,新建一个配置,输入IP、端口、用户名和密码,避免麻烦最好直接上root权限,反正自己用

然后每次调试的时候,点击通过SSH生成和调试

在树莓派Zero上使用C#+Mono驱动TM1637四位数码管

就能获得和本地调试一样的体验,不得不说,这个体验实在是太好了。

接下来是项目的

其实也就一点,在Nuget上面找一个第三方的库来调用GPIO接口就行,没别的了

在树莓派Zero上使用C#+Mono驱动TM1637四位数码管

Nuget下搜索Raspberry,下面的库基本上都是关于调用树莓派gpio的,随便挑一个便是

我这边选择了文档最为齐全的Unosquare.Raspberry.IO

在树莓派Zero上使用C#+Mono驱动TM1637四位数码管

下面两个是依赖项,尤其是WiringPi,是直接管理接口的主要库

好,以上是准备工作,下面的是具体实现

在树莓派Zero上使用C#+Mono驱动TM1637四位数码管

上面这张图,对应的就是树莓派Zero上,一共40个针脚的定义,其中,两个5V的接口可以直接当做电源输入或者输出用,GND是接地这个没啥好说的,我们主要看GPIO,这里有很多很多GPIO接口,这些接口才是负责信号输入以及输出使用,我们控制的主要也是这些接口。

在树莓派Zero上使用C#+Mono驱动TM1637四位数码管

然后我们这次的主角也上场了

在树莓派Zero上使用C#+Mono驱动TM1637四位数码管