很久之前买了一个树莓派3B+,放在那里吃灰😂,今天准备拿起来重新搞一下,一个是配置一下.NET Core开发环境,另外一个是玩一下.NET Core IoT

树莓派3B+ 

 

在树莓派上安装64位Ubuntu 20.04

  因为树莓派从3B+版本开始,支持64位系统,但是在树莓派官方网站上只提供了64位的beta版本系统。如果你买的是树莓派4 2G以上版本,那么最好安装64位系统,这样能充分利用内存。所以目前要安装64位系统,只有UbuntuGentoo

   首先去Ubuntu官网下载针对Raspberry的64为系统。

   

下载下来的img文件,使用balenaEtcher工具烧录到树莓派的SD卡中。

使用Flash from file 选择img文件,中间选择树莓派的SD卡(需要读卡器),然后点击Flash!,烧录的过程中不要动读卡器,等待一段时间后烧写完毕点击 Flash Another,就可以拔下你的SD卡插入树莓派了。

用网线把树莓派和家里的无线路由器连上,然后通电。这里一定要用网线连,这样就能在电脑上通过路由器设备地址查看树莓派的IP地址。

可以看到,家里路由器给树莓派分配的IP地址是192.168.13.181。

然后使用Putty,或者MobaXterm 使用SSH的方式连接到树莓派上,我这里用的是后者,因为后者支持多窗体,还支持FTP,可以直接管理文件夹,并且支持上传下载。

连上去之后,默认的用户名和密码都是Ubuntu,需要修改密码。输入两次新密码即可。

通过网线脸上树莓派之后,第一步就是更新软件,和设置无线密码,这样以后就可以脱离网线,通过无线连接上去了。

首先第一步就是换源,这里换为中科大的源:

ubuntu@ubuntu:~$ sudo vi /etc/apt/sources.list

这里使用的是自带的vim编辑器。vim编辑器的详细使用方法这里不讲解,只是简单说一下,使用vi编辑文件的时候,按“i”进入编辑模式,可以对文件进行修改,修改好了之后按“ESC”退出编辑模式,然后输入“!wq”,保存退出。

把该文件中的所有“ports.ubuntu.com”改为“mirrors.ustc.edu.cn”,并保存。

然后更新:

ubuntu@ubuntu:~$ sudo apt-get update 

首先启动无线网卡项,或者确认其是启动的:

ubuntu@ubuntu:~$ sudo ip link set wlan0 up

然后修改配置文件:

ubuntu@ubuntu:~$ sudo vi /etc/netplan/50-cloud-init.yaml

然后设置wifi的名称和wifi密码:

在“version:2”下面,增加wifis节点。这里需要注意的是,上下缩进的对齐,以及key:value中在冒号“:”后面的空格,一定要有空格,不然会报错。如上图,我的wifi是“Tenda_**”,wifi密码是“ten**”,这里根据自己家里的wifi名称和密码来设置,设置好之后,“!wq”保存。

修改保存后检查语法并使配置生效:

#检查语法,如有错误会有提示,比如检查 空格,检查缩进等
ubuntu@ubuntu:~$ sudo netplan generate
#使配置生效
ubuntu@ubuntu:~$ sudo netplan apply

设置好之后,拔掉网线,重启树莓派,需要注意的是重启或者关闭树莓派要通过命令来进行,不能强行拔掉电源,这样会对SD卡产生损坏,就跟关电脑直接拔电源一样,树莓派关机和重启的命令为:

//关机
sudo shutdown -h now
//重启   
sudo shutdown -r now

重启之后,再次通过路由器里面的设备来查看,路由器给树莓派无线分配的IP地址,记录下来,然后再次通过SSH连上去。

如果wifi连上后,经常掉线,那么需要设置系统的时区为Shanghai,地区为China。

安装完成之后,可以通过命令查看系统版本:

可以看到安装的是64为的ubuntu系统。

是否要安装图形界面

如果你是树莓派4版本,内存为2GB以上,可以安装图形界面, 要是树莓派4以下版本则duck不必, 因为内存和CPU太小。我的树莓派3B+,内存只有1GB安装图形界面卡成狗,体验非常不好,点个鼠标,要等20多秒才有反应。使用树莓派安装图形界面,可以查看Ubuntu 18.04 上使用xrdp远程桌面连接这篇文章。我的3B+很卡,后来把图形界面卸载了。发现使用命令也很方便。

安装.NET Core运行时环境

系统安装的是64位,.NET Core的环境也安装64位。可以去.NET Core的官网去下载。

这里,我们需要安装.NET Core SDK和ASP.NET Core Runtime,版本必须选择Linux下的ARM64位。点击进去,就可以看到下载地址:

可以直接下载,然后通过ftp的方式传到树莓派上去。这里我选择直接在树莓派上使用wget命令在线下载:

wget https://download.visualstudio.microsoft.com/download/pr/fe5c0663-3ed1-4a93-95e1-fd068b89215b/14d1caad8fd2859d5f3514745a9bf6b3/dotnet-sdk-3.1.301-linux-arm64.tar.gz
wget https://download.visualstudio.microsoft.com/download/pr/91f02336-1852-421d-907f-4aeae252a15e/dbb20e3a176c38a569cbcaa5d1d5782b/aspnetcore-runtime-3.1.5-linux-arm64.tar.gz

下载之后,新建dotnet-arm64文件夹,然后将现在的文件解压到该文件夹下面:

mkdir dotnet-arm64
tar zxf dotnet-sdk-3.1.301-linux-arm64.tar.gz -C $HOME/dotnet-arm64
tar zxf aspnetcore-runtime-3.1.5-linux-arm64.tar.gz -C $HOME/dotnet-arm64

现在我们需要将dotnet-arm64加入到系统路径中:

export DOTNET_ROOT=$HOME/dotnet-arm64
export PATH=$PATH:$HOME/dotnet-arm64

现在我们输入 dotnet --info就可以看到系统版本了。

需要注意的是上述将dotnet-arm64加入到系统中的方法是临时的,当重启树莓派之后就会失效,还需要再次添加,否则运行dotnet会提示找不到命令。要将该路径加入到系统路径中,需要修改配置文件:

vi /etc/profile

在该文件的最后,加入上述的export开头的两条语句:

保存之后,该路径就会永久生效。

创建.NET Core应用程序

创建NetCore3,然后切换到该目录下,直接运行“dotnet new”语句就能创新一个默认的控制台应用程序:

mkdir NetCore3
cd NetCore3/
dotnet new console

创建完成之后,然后运行“dotnet run” 就能执行程序

也可以使用vi编辑器对该文件进行编辑:

ubuntu@ubuntu:~/NetCore3$ sudo vim Program.cs

修改内容之后,保存再次运行:

然后再次运行“dotnet run”

可以看到结果已经改变。

部署和运行ASP.NET Core程序

在现实的编程中,我们一般在其他平台上使用Visual Studio编写程序,然后发布,将发布后的程序文件通过FTP等工具上载到树莓派上运行。下面举个ASP.NET Core的例子。在Windows上使用Visual Studio新建一个ASP.NET Core的空程序,然后在Startup.cs中输出如下信息:

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapGet("/", async context =>
        {
            await context.Response.WriteAsync($"Empower every person and every organization on the planet to achieve more{Environment.NewLine}" +
                         $".NET Core {Environment.Version}{Environment.NewLine}" +
                         $"Environment.OSVersion: {Environment.OSVersion}{Environment.NewLine}" +
                         $"Environment.Is64BitOperatingSystem: {Environment.Is64BitOperatingSystem}{Environment.NewLine}" +
                         $"Environment.Is64BitProcess: {Environment.Is64BitProcess}", Encoding.UTF8);
        });
    });
}

然后,将程序运行,我机器是64位的Windows 10,可以看到,输出结果为:

可以看到输出了正确的结果。

现在我们将该程序以文件的方式发布,需要注意的是部署模式和目标运行时的选择:

所有文件如下:

然后通过MobaXterm软件,新建一个NetCoreWebApp文件夹,然后将上述文件上传到该文件夹下。在MobaXterm里,可以直接新建文件夹和上传下载,非常方便。

现在,我们要在树莓派的Ubuntu的命名行里运行该程序,并且还要打开Firefox浏览器访问发布的ASP.NET Core程序。这里存在问题,就是必须打开两个控制台程序:一个用来运行ASP.NET Core程序,一个用来运行Firefox浏览器。这个其实非常简单,新建一个SSH会话即可,如果在putty里面就是再开一个SSH连接,这里使用MobaXterm,也是直接再开一个SSH连接:

可以使用 w命令来查看当前所有会话:

现在,我们在“pts/0”中运行ASP.NET Core应用程序,在“pts/1”中运行firefore浏览器。

在“pts/0”的命令行中,先切换到NetCoreWebApp路径下,然后输入“dotnet WebApplication1.dll”即可运行,这里的dll名称为新创建的ASP.NET Core项目名称:

可以看到,在5000端口启动了应用程序。现在我们在"pts/1"中,启动Firefox浏览器。

ubuntu@ubuntu:~$ firefox

稍等片刻,就可以看到弹出了Firefox浏览器,在地址栏输入localhost:5000可以看到输出了正确的结果:

可以看到OSVersion已经从之前本机的"Windows NT"变为了"Unix"

要退出Firefox,直接关闭即可,然后在控制台程序中按"CTRL+C",即可回到主控制台。

 

参考

https://edi.wang/post/2019/9/29/setup-net-core-30-runtime-and-sdk-on-raspberry-pi-4

https://blog.csdn.net/qq825255961/article/details/106042876