目录
介绍
背景
工具选择
先决条件
准备SD卡
SSH配置和.NET安装
示例程序
兴趣点
- 带有最新代码的GitHub存储库
手动设置了用于.NET Core和远程调试的Raspberry Pis之后,我想要一个更简单,更自动化的解决方案。这样做的好处是:
- 更轻松、更省时
- 更少的错误倾向
- 更容易跟上Raspbian的新版本
- Headless ——即无需显示器、键盘或鼠标。
关于该主题还有很多其他文章,对我来说可能最有用的是Scott Hanselman的这篇文章。但是,它们都需要大量的手动设置。我想要一个尽可能自动化的解决方案。显然,需要进行一些手动干预,因为您必须物理地移动SD卡,给设备加电等,但是除此之外,我的目的是运行脚本,然后设置就会发生。正如Scott Hanselman所说:
引用:
好的(有点开玩笑,但不是真的)是程序员的经验法则——如果您执行两次操作,请使其自动化。
我希望安装程序能够实现以下目标:
- 从开发机上新格式化的SD卡开始
- 将卡配置为在传输到Raspberry Pi时允许远程ssh
- 配置Raspberry Pi以实现安全的无密码ssh连接
- 安装.NET Core和VS远程调试器
最后,我将添加几个C#项目来演示所有工作。
工具选择我已经使用VS Code几年了,并且真的很喜欢它——这就是我决定使用的方式(几十年来我也使用过各种版本的Visual Studio——但是我不会在这里详细介绍它们的优点和缺点。:))
我也非常喜欢Powershell,但决定将Bash用于脚本。希望这将使其尽可能成为跨平台的。您将需要配置VS Code以将bash作为默认外壳程序——最简单的方法是按Ctrl + Shift + P并键入default shell。这将提供命令提示符,Powershell或各种Linux版本的选项。最适合我的人是Git Bash,但其他的也应该工作。
先决条件VS Code解决方案可以复制到开发计算机上的任何位置。在Visual Studio Code中打开它时,请使用“文件”菜单中的“打开文件夹”。
您将需要一种将Raspbian镜像放入SD卡的方法。我会推荐Raspberry Pi Imager。您不必先下载镜像,但我认为这是值得做的,因为否则,您可能会发现自己使用了大量的Internet带宽(即使压缩后,镜像的大小也往往为GB)。可通过镜像列表上的“使用自定义”来访问下载的镜像。
您将需要一个Wifi路由器,并且需要知道SSID和PSK。我认为你有那些:)。而且显然是Raspberry Pi和电源。我在Raspberry Pi 3上进行了测试,但是从V2起的任何版本都可以。请注意,这不会对Raspberry Pi Zero工作,因为它使用是.NET Core不支持的ARMv6。如果您的Raspberry Pi没有内置Wifi,则还需要USB Wifi加密狗。
最后,您将需要下载.NET core SDK的最新版本。在撰写本文时,版本为3.1。这应该复制到PiFiles文件夹。您将需要ARM32版本,并且应该期望它的大小超过100MB。
准备SD卡一旦有了新刷新的SD卡,在将其插入Raspberry Pi之前,需要一些额外的配置。这是任务1和2。要运行任务,请按Ctrl + Shift + P并选择“任务:运行任务”。您应该看到如下任务列表:
选择任务1.设置Wifi设置...。这将要求您输入Wifi SSID和PSK。输入它们时,它们将存储在settings.json中,因此您无需再次输入它们。
然后选择任务2.修改SD卡以进行SSH访问...这将要求您提供带有SD卡的驱动器。因为这将在bash脚本中访问,所以它可能类似于/d或/mnt/d。如果您刚刚对卡进行了镜像,则可能需要重新插入它,因为镜像程序会在完成后将其弹出。运行任务2后,应弹出卡并将其插入Raspberry Pi。打开Raspberry Pi的电源,等待其启动,然后再进行下一步。
SSH配置和.NET安装下一步是运行任务3.设置Raspberry Pi Name。这会将主机名从默认的raspberrypi更改为您选择的名称。还会询问您是否要设置静态IP地址。如果您不希望使用静态IP,请将其留空。我在Windows 10和本地主机名查找(mDNS)方面的经验是非常少的——我不确定它是否是可用的。但是,即使您根本无法使用本地名称解析,也应该可以使用IP地址。和以前一样,这些设置会记住在settings.json中,因此您不必重新输入它们。
设置好新名称后,任务4. 将公共SSH密钥添加到Raspberry Pi将重新配置Raspberry Pi并将公共SSH密钥复制到它,这样当您(或VS工具)通过SSH连接时就不必输入密码了。系统将询问您是否要连接(键入yes),然后输入raspberry pi密码(键入raspberry)。此时,Raspberry Pi将重新启动,因此您需要等待,然后再运行下一步。如果尚未设置ssh密钥,则类似这样的文章将向您展示如何创建一个。现在,您将能够登录,而不需要输入密码,但只有从您的机器。
任务5. Raspberry Pi Dotnet安装将在Raspberry Pi上安装 .NET核心SDK和VS调试器。这将需要一段时间,但是一旦完成,我们现在就可以在Raspberry Pi本身上或在我们的主要开发机器上远程编写.NET程序——显然,远程编写会变得更加有趣!
示例程序我创建了两个示例程序。第一个是Hello World项目。这将在本地(即在开发计算机上)和远程运行。运行它的最简单方法是选择左侧的“运行”图标,然后从下拉列表中选择配置:
现在,您应该能够像在本地一样设置断点并进行调试:
为了运行Blink程序,您需要将LED连接到GPIO引脚之一。Blink程序使用出色的System.Device.Gpio库,应使用NuGet自动安装该库。
兴趣点这就是本文的内容。使用Python编写blink程序可能会容易得多,但是对我来说,使用c#的全部意义在于,您可以使用.NET创建更大、更可维护的解决方案(尽管我敢肯定有些人会不同意这一点)。话虽如此,本文中的演示程序并非旨在用作更大程序的模板。