树莓派(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编码和调试不太现实,因此需要在开发计算机上开发应用,然后将应用部署到树莓派上进行远程调试。

发布程序

完成程序编码后,在项目名称右键菜单中选择“发布”,然后在发布配置窗中选择目标为文件夹,然后下一步特定目标依旧选择文件夹。

![[PublishConfigure.png]]

完成后进行配置文件设置。配置选择Debug|Any CPU ;目标框架根据实际情况选择,这里选择了 net8.0 ;部署模式可以选择依赖框架或者独立,由于远程调试时需要在树莓派上安装 .NET 运行时,所以这里选择依赖框架,可以减少程序大小;前边提到树莓派是 ARM 架构的,最新的操作系统也是64位的,所以目标运行时选择 linux-arm64

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

部署到树莓派

树莓派上安装配置.NET

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

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

[!info]

--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

远程调试

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

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

调试IoT库源码

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

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

    • 取消选择“启用仅我的代码”。
    • 选择“启用源链接支持”。

  2. 在“工具”(或“调试”)>“选项”>“调试”>“符号”下,选择“Microsoft 符号服务器”。

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

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

参考

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

Raspberry pi 上部署调试.Net的IoT程序的更多相关文章

  1. 如何在Raspberry Pi 3B中安装Windows 10 IoT Core

    Windows 10 IoT Core简介 Windows 10 IoT是微软专门为物联网生态打造的操作系统,Windows 10 IoT Core则是Windows 10 IoT 操作系统的核心版本 ...

  2. live555在Raspberry Pi上的点播/直播

    1.live555在Raspberry Pi上的点播 live555MediaServer这个实例是个简单的服务器,支持多媒体点播,直接在Raspberry Pi上编译运行,或者通过交叉编译出ARM核 ...

  3. 让Mono 4在Raspberry Pi上飞

    最近公司有项目想要在树莓派上做,代替原来的工控机(我们是把工控主机当作小的主机用,一台小的工控主机最少也要600左右,而树莓派只要200多).于是,公司买了一个Raspberry Pi B+和一个Ra ...

  4. 在Raspberry Pi上安装XBMC

    2013-05-22 XBMC is a free and open source media player application developed by the XBMC Foundation, ...

  5. 在Raspberry Pi上创建容器

    树莓派Raspbian默认是支持LXC容器的,下面我们介绍一下在树莓派上创建并运行容器的过程. 1. 安装LXC相关的package $ sudo apt-get install -y git lxc ...

  6. 在树莓派(Raspberry Pi)上编译安装更新版本的Python

    Raspiban Wheezy上预装的Python3版本是3.2.3,本文将介绍升级到3.4.3的方法. 此文也适用于安装其它版本(比如最新版本)的Python. 我用的是B+型的树莓派,装的系统是2 ...

  7. 在Archlinux ARM - Raspberry Pi上安装Google coder

    升级软件包 一个 pacman 命令就可以升级整个系统.花费的时间取决于系统有多老.这个命令会同步非本地(local)软件仓库并升级系统的软件包: # pacman -Syu 提示:确保make以及g ...

  8. Raspberry Pi 上使用WN725N连接WIFI

    系统版本 lee@Lee-RPi ~ $ uname -ar Linux Lee-RPi + # PREEMPT Thu Dec :: GMT armv6l GNU/Linux 这个版本的系统,已经集 ...

  9. 42 在Raspberry Pi上安装dlib表情识别

    https://www.jianshu.com/p/848014d8dea9 https://www.pyimagesearch.com/2017/05/01/install-dlib-raspber ...

  10. 树莓派3B上部署运行.net core 2程序

    针对Linxu arm处理器如何部署.net core 2的资料很少,网上找到几篇但都写得不够详细,按照他们教程来撞墙了,折磨了几天终于部署成功了,先上一张运行成功的图 1.windows系统中,在项 ...

随机推荐

  1. 基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS

    容器作为近些年最火热的后端技术,加快了很多企业的数字化转型进程.目前的企业,不是在使用云原生技术,就是在转向云原生技术的过程中.在容器化进程中,如何保持业务的平稳迁移,如何将现有的一些服务设施一并进行 ...

  2. 如何在 ubuntu 上搭建 minio

    由于腾讯的对象存储服务器(COS)的半年免费试用期已过,所以寻思鼓捣一下 minio,试着在自己的服务器上搭建一套开源的 minio 对象存储系统. 单机部署基本上有以下两种方式. 直接安装 最基础的 ...

  3. linux环境nginx配置记录

    nginx环境安装 1.联网下载 pcre压缩包 解压压缩文件使用命令 tar –xvf pcre-8.37.tar.gz ./configure 完成后,回到 pcre 目录下执行 make,最后执 ...

  4. vue中ref的用法

    用法1. vue给我们提供一个操作dom的属性,ref.绑定在dom元素上时,用起来与id差不多,通过this.$refs来调用: <div ref="test">te ...

  5. Windows下如何用virtualenv创建虚拟环境

    虚拟环境可以有效的解决不同项目需要不同环境的问题,虚拟环境最大的好处就是可以将我们的开发环境进行隔离,让彼此之间不互相受影响.一.Windows下创建虚拟环境1.虚拟环境需要用到的库是virtuale ...

  6. 工作中的技术总结_JQuery_20210825

    工作中的技术总结_JQuery_20210825 JQuery此前接触不多,所以先把此次接触的一些基本操作 1.DOM节点的取值或者赋值: 语法: $(selector).val(value) 参数 ...

  7. 《一篇就够系列》之HTTP详解,覆盖高频面试考点!

    一.写在开头 前几篇博文大概介绍了什么是网络编程,以及网络编程的实战作用,今日起,我们将针对里面涉及到的重要知识点,进行详细的梳理与学习! 在整个WEB编程中,有个应用层的协议是我们无法跳过的,那就是 ...

  8. 《使用Gin框架构建分布式应用》阅读笔记:p393-p437

    <用Gin框架构建分布式应用>学习第17天,p393-p437总结,总45页. 一.技术总结 1.Prometheus Prometheus放在代码里面使用,还是第一次见.在本人实际的工作 ...

  9. Chapter12 动态内存与智能指针

    目录 12.1.0 介绍 12.1.1 shared_ptr类 make_shared函数 shared_ptr的拷贝和引用 shared_ptr自动销毁所管理的对象- -shared_ptr还会自动 ...

  10. CF2027D The Endspeaker (Hard Version) 题解

    题面 给你一个长度为 \(n\) 的数组 \(a\) 和一个长度为 \(m\) 的数组 \(b\) (所有 \(1 \le i < m\) 满足 \(b_i > b_{i+1}\) ).最 ...