首页 > 编程语言 >Raspberry pi 上部署调试.Net的IoT程序

Raspberry pi 上部署调试.Net的IoT程序

时间:2024-12-30 17:55:10浏览次数:1  
标签:树莓 IoT 程序 选择 NET Raspberry Net 调试

树莓派(Raspberry pi)是一款基于ARM 架构的单板计算机(Single Board Computer),可以运行各种 Linux 操作系统,其官方推荐使用的 Raspberry Pi OS 也是基于Debian开发的。因其低能耗、便携小巧、GPIO等特性,可用于IoT应用开发。.NET可在各种平台和体系结构上运行,并提供了 IoT 库支持与传感器、模数转换器、舵机、FRID这些专用硬件设备交互,使 .NET在树莓派运行 IoT 应用成为可能。

部署.NET的IoT程序

通常情况,在本机开发调试是最佳选择,但是树莓派的低能耗也制约了其性能,例如本文接下来描述操作的都是在 Raspberry Pi Zero 2 W 上进行的,其配备的Broadcom BCM2710A1 是一款四核 64 位 SoC(Arm Cortex-A53 @ 1GHz)的CPU,内存为512MB,在上边安装IDE编码和调试不太现实,因此需要在开发计算机上开发应用,然后将应用部署到树莓派上进行远程调试。

发布程序

完成程序编码后,在项目名称右键菜单中选择“发布”,然后在发布配置窗中选择目标为文件夹,然后下一步特定目标依旧选择文件夹。
image
完成后进行配置文件设置。配置选择Debug|Any CPU ;目标框架根据实际情况选择,这里选择了 net8.0 ;部署模式可以选择依赖框架或者独立,由于远程调试时需要在树莓派上安装 .NET 运行时,所以这里选择依赖框架,可以减少程序大小;前边提到树莓派是 ARM 架构的,最新的操作系统也是64位的,所以目标运行时选择 linux-arm64
image

配置完成后,点击“发布”按钮,程序会发布到配置的目标位置。

部署到树莓派

树莓派上安装配置.NET

首先使用 dotnet-install 脚本 在树莓派上安装 .NET。

curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --channel LTS

--channel参数是指定安装的源通道。 可能的值为:

  • STS:最新的标准期限支持版本。
  • LTS:最新的长期支持版本。
  • 表示特定版本的由两部分构成的 A.B 格式版本(例如 3.1 或 8.0)。
  • A.B.Cxx 格式的三部分版本,表示特定的 SDK 版本(例如 8.0.1xx 或 8.0.2xx)。 自 5.0 版本起可用。

然后将 DOTNET_ROOT 环境变量和 dotnet 目录添加到 $PATH

echo 'export DOTNET_ROOT=$HOME/.dotnet' >> ~/.bashrc
echo 'export PATH=$PATH:$HOME/.dotnet' >> ~/.bashrc
source ~/.bashrc

部署.NET程序

Windows 10 (build 1809)之后的版本具有 OpenSSH,其中包括预安装的 scp。可以使用scp命令把发布的文件拷贝到树莓派指定目录:

scp -r F:\Source\git\mfrcc522Sample\mfrcc522Sample\bin\Debug\net8.0\publish\linux-arm64 john@192.168.3.58:/home/john/Downloads/MFRC522

scp命令格式如下:

scp [选项] [[用户@]源主机:]文件路径 [[用户@]目标主机:]文件路径

常用选项包括:

  • -C:允许压缩数据,提高传输效率。
  • -p:保留文件的修改时间、访问时间和权限。
  • -r:递归复制整个目录。
  • -q:静默模式,不显示传输过程中的信息。
  • -v:详细模式,显示传输过程中的详细信息。

进入程序目录,给程序添加可执行权限后运行程序

cd Downloads/MFRC522/linux-arm64
chmod 755 mfrcc522Sample
./mfrcc522Sample

image

远程调试

程序在树莓派上运行后,在开发电脑上打开visual Studio,选择“调试”>“附加到进程…”,或者用快捷键ctrl+alt+p 打开"附加到进程"窗口,连接类型选择"SSH",连接目标输入树莓派的ip,其格式为<username>@<IP>,点击查找按钮连接上树莓派后,进程列表会显示所有进程,选中目标进程。右下角代码类型下拉框选择”托管(.NET Core for unix)代码“,点击“附加”就可以开始远程调试了。
image

接下来就可以远程调试用户代码了
image

调试IoT库源码

在调试过程中出现了IoT库报的错误,通过"F12"可以查看到源码, 想进一步调试IoT的代码,则需要启用源码调试。步骤如下:

  1. 在“工具”(或“调试”)>“选项”>“调试”>“常规”下,确保:

    • 取消选择“启用仅我的代码”。
    • 选择“启用源链接支持”。
      image
  2. 在“工具”(或“调试”)>“选项”>“调试”>“符号”下,选择“Microsoft 符号服务器”。
    image

调试过程中可能遇到断点处显式红心圆和警告提示:“当前不会命中断点。还没有为该文档加载任何符号。”
image

这时需要在导航栏选择“调试>Windows>模块”,检查模块是否已加载,如果显示没有加载符号,右键单击尚未加载符号的模块,点击”加载符号“,这时断点处会显示红色实心圆。
image

参考

  1. 在 Linux 上不使用包管理器的情况下安装 .NET - .NET | Microsoft Learn
  2. 调试 .NET Framework 源代码 - Visual Studio (Windows) | Microsoft Learn
  3. 排查调试器中的断点问题 - Visual Studio | Microsoft Learn

标签:树莓,IoT,程序,选择,NET,Raspberry,Net,调试
From: https://www.cnblogs.com/czwy/p/18641846

相关文章

  • Kubernetes 为何弃用 Docker?
    一、什么是容器运行时?容器运行时(ContainerRuntime)是一种负责在操作系统层面管理和运行容器的软件工具或组件。其主要任务包括:创建和启动容器:确保容器的生命周期管理。文件系统管理:为容器提供隔离的文件系统支持。资源限制:管理CPU、内存等资源的使用。网络配置:为容器设置......
  • Linux(Debian)下部署.NET Core网站(守护进程)
    守护进程(可选)sudonano/etc/systemd/system/opac.service键入文本[Unit]Description=opacOPAC[Service]WorkingDirectory=/usr/share/opacExecStart=/usr/bin/dotnet/usr/share/opac/OPAC.dll--urls=http://192.168.0.121:8001&Restart=always#Restartservi......
  • 推荐一款功能强大、开源、可视化的性能实时监控系统:Netdata
    在当今复杂多变的IT环境中,系统性能的实时监控与分析对于确保业务连续性、系统稳定运行以及快速故障排查至关重要。随着云计算、大数据和微服务架构的普及,对监控系统的要求也日益增高。今天给大家推荐一款性能监控工具为:Netdata。它作为一款开源、实时、轻量级的系统性能监控工......
  • netcat
    netcat作用:用于读写网络连接。主要用途:               1、端口扫描:检测远程主机上的开放端口》               2、数据传输:在网络中传输数据,支持多种协议               3、网络调试:测试网络连接和诊断网络问题.        ......
  • 深入理解ASP.NET Core 管道的工作原理
    在.NETCore中,管道(Pipeline)是处理HTTP请求和响应的中间件组件的有序集合。每个中间件组件都可以对请求进行处理,并将其传递给下一个中间件组件,直到请求到达最终的处理程序。管道的概念类似于流水线,每个中间件组件都是流水线中的一个步骤。1.管道的基本概念在.NETCore中......
  • 推荐 5 个 火火火火 的CMS开源.Net项目
    下面推荐5个基于.NetCore开发的CMS开源项目。一、OrchardCore基于ASP.NETCore构建的、模块化和多租户应用程序框架,采用文档数据库,非常高性能,跨平台的系统。1、跨平台:这是基于.NetCore开发的系统,可以部署在Docker,Windows,Linux,Mac。2、数据库:兼容MySQL、Sqlserver、Sql......
  • .NET 9 new features-Memory Caching 和 Collections 优化
    一、内存缓存(MemoryCaching)1.具体的原理内存缓存是一种在应用程序内存中存储数据的机制,旨在减少对外部数据源的频繁访问,从而提高应用程序的性能。在.NET中,MemoryCache类提供了内存缓存的实现。它允许开发者将经常使用的数据存储在内存中,以便快速检索。在.NET9中,Memory......
  • 【亲手实践】本地multipass安装kubernetes,再也不怕环境被铲
    一、安装multipass 1.安装multipaas软件版本brewinstallmultipass 2.创建三个虚拟机master(192.168.64.6)、node1(192.168.64.14)、node2(192.168.64.15),2Gcpu+2G内存+40G硬盘,Qemu+桥连模式   $ multipassfind查找可用ubuntu版本,这里选择22.04这个版本   $ m......
  • Kubernetes(v1.29)学习笔记
    什么是KubernetesK8s是Kubernetes的简称,是一个开源的容器编排系统,用于自动部署、扩展和管理容器化应用程序。Kubernetes源于希腊语,意为“舵手”或“飞行员”,其主要功能包括服务发现与负载均衡、存储编排、Secret和配置管理、批量执行、水平扩缩、自动化上线和回滚、自动装箱......
  • 【论文解读】How attentive are graph attention networks?
    图注意力网络有多专注?题目:Howattentivearegraphattentionnetworks?作者:SBrody,UAlon,EYahav单位:IsraelInstituteofTechnology,GoogleDeepMind,Tabnine摘要:图注意网络(GraphAttentionNetworks,GATs)是最受欢迎的图神经网络(GNN)架构之一,并被认为是图表示学习的最......