互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(一):从.NET IoT入门开始
前言
为什么我会想着制作一个智能桌面机器人呢?自问自答一下,看过我之前文章的小伙伴应该都知道我之前有为稚晖君开源的ElectronBot桌面机器人开发过一个桌面上位机软件叫电子脑壳,由于ElectronBot桌面机器人必须连接电脑才能使用,所以限制比较多,网友又对独立版本的桌面机器人呼声比较高,我本人也比较感兴趣,所以就准备动手做一个了。

上图为使用树莓派Zero 2W开发板结合.NET IoT库和两个屏幕实现的机器人,外壳是我使用Fusion 360软件设计制作的。现在是大语言模型的爆发时期,目前只依赖服务端大语言模型就可以实现高阶AI了,所以做出一个配置不高的独立版本的机器人可玩性还是很高的,目前软件部分完善中……
下图是本人做的Fusion360 3D建模展示

硬件功能
- 树莓派Zero 2W一个,完整运行Linux系统,用于运行.NET程序。
- 2.4寸主屏幕,1.47寸副屏幕,总共两个屏幕。可以分别显示自定义内容。
- 舵机驱动板子一个,控制两个9克舵机,可以实现头上下旋转和底座左右旋转。
- 语音板子一个,通过树莓派USB拓展口和和树莓派连接,板子附加喇叭,麦克风,以及一个摄像头。可以实现声音播放,声音录制,和拍照。

技术介绍
树莓派开发板
树莓派是运行完整Linux系统的卡片电脑,体积小巧,适合DIY各种硬件,搭配上无所不能的.NET技术栈,能够实现各种各样的好玩的功能。
.NET
.NET 是免费的、开源的、跨平台的框架,用于构建新式应用和强大的云服务。

.NET IoT
使用 .NET 为你最喜爱的设备和传感器生成物联网 (IoT)应用程序

开发环境搭建
树莓派系统初始化
- 首先电脑下载安装Raspberry Pi Imager,安装打开软件选择镜像类型,然后准备一个SD卡,通过读卡器连接到电脑上备用。

- 由于我用的是树莓派Zero 2W配置比较低,所以我采用安装的是无图形界面的版本。

- 配置镜像网络和ssh配置,点击配置选项按钮,然后进入配置页面,并且记住自己的配置。

各种配置一定要填好,尤其是用户名要记住。

- 然后开始烧录镜像,当烧录完成之后,将SD卡插到树莓派上,正常情况下树莓派就会自动连上网络,如果不能登录到路由器后台,可以下载可以查看网络上的设备ip的软件,手机端可以下载Fing电脑端也可以下载Fing

通过断电和上电来判断树莓派的IP用于SSH登录使用。

- 下载安装FileZilla用于文件上传,包含程序和.NET离线安装文件。

如果SSH能够登录,就可以进行系统操作了,如果大家用国外的源比较卡,建议大家切成国内源,这个大家根据系统版本自行搜索解决这个就不详细说了。
.NET开发环境安装
- 首先下载Arm64版本的.NET,我以.NET 8为例,因为.NET 9刚出不久,所以暂时先不使用,大家可以根据需要自己决定安装哪个版本的。
注意事项:由于微软没有给Arm64 linux制作包源版本,所以需要我们下载压缩包解压安装。
下载地址:

下载上传到树莓派家目录。

- 参考官方的脚本安装文档:
通过修改官方的安装脚本给脚本附加执行权限进行执行,脚本内容如下:
DOTNET_FILE=dotnet-sdk-8.0.404-linux-arm64.tar.gz
export DOTNET_ROOT=$(pwd)/.dotnet mkdir -p "$DOTNET_ROOT" && tar zxf "$DOTNET_FILE" -C "$DOTNET_ROOT" export PATH=$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools
依次执行下面指令:
sudo chmod 777 install.sh ./install.sh
执行完这些指令之后会在家目录的.dotnet产生对应的框架文件。
这些操作执行完,需要将路径加入到环境变量里,这样就可以全局执行dotnet指令了。
执行下面的指令编辑~/.bashrcsudo nano ~/.bashrc
在最下面添加图上的内容
export DOTNET_ROOT=$HOME/.dotnet
export PATH=$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools

最好执行sudo reboot指令重启系统。
然后我们就可以执行dotnet指令来查看指令是否正常。
如下图一样就是环境正常了。

运行hello world程序
- 首先安装Visual Studio,下载最新的社区版本就行,安装对应的负载,和对应的.NET版本。

- 大家可以参考我选择的工作负载,安装启动Visual Studio。

- 创建控制台程序。

- 修改代码内容并且进行发布到目录。

- 选择要发布的目录。

- 配置目录点击发布按钮。

- 发布完的程序传输到树莓派。

- 进入程序目录,执行dotnet加程序集的名称dotnet ConsoleApp3.dll

如果有输出,表示开发环境已经配置完成,就可以愉快的进行程序的开发和调试,具体的屏幕测试,和其他的一些测试我们后面的视频再进行讲解。
总结感悟
这篇文章涉及了大量的图片,以及很细致的讲解,为什么要写这么啰嗦呢?当然是为了让初学者,也就是没接触过.NET的小伙伴也能通过一步步的操作能够上手.NET。
我希望通过这个系列的文章,能够让大家认识一个不一样的.NET,消除大家对.NET的偏见吧。也希望自己通过这个系列的文章记录自己的制作过程。更希望文章能够对大家有一定的帮助和启发。
参考推荐文档项目如下:
- 创客社区地址
- 桌面桌面机器人仓库地址
- .NET官方地址
- .NET脚本安装文档
- .NET IoT官方地址
- Visual Studio下载地址
- 树莓派官方工具地址
- FileZilla
- 个人调试的.NET IoT例子
互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(一):从.NET IoT入门开始的更多相关文章
- 嵌入式Boa服务器上CGI开发-(转自Bryce.Xiao)
嵌入式WEB服务器常见的有lighttpd shttpd thttpdboa mathopd minihttpdappwebgoahead=============================== ...
- 【推荐图书】+ 基于Nios II的嵌入式SoPC系统设计与Verilog开发实例+C#入门经典等
[推荐图书]+ 基于Nios II的嵌入式SoPC系统设计与Verilog开发实例+C#入门经典等 3赞 发表于 2016/7/4 21:14:12 阅读(1921) 评论(3) 初次接触FPGA,到 ...
- 从嵌入式linux到android应用开发
时间过得很快,转眼之间已经到新公司一个月了.虽然学到了一些移动开发的知识,但是觉得离我的目标还很远,完全没能达到我想要的水平.以前产品都是自己主导的,需要完成什么,计划什么也是自己主导,现在得从头 ...
- 豹哥嵌入式讲堂:ARM Cortex-M开发之文件详解(8)- 镜像文件(.bin/.hex/.s19)
大家好,我是豹哥,猎豹的豹,犀利哥的哥.今天豹哥给大家讲的是嵌入式开发里的image文件(.bin, .hex, .s19). 今天这节课是豹哥<ARM Cortex-M开发之文件详解>主 ...
- 转: 嵌入式linux下usb驱动开发方法--看完少走弯路【转】
转自:http://blog.csdn.net/jimmy_1986/article/details/5838297 嵌入式linux下的usb属于所有驱动中相当复杂的一个子系统,要想将她彻底征服,至 ...
- 如何快速上手一款新的嵌入式CPU芯片(记录CC2540开发经历)
新换了工作,需要熟悉新公司的产品开发项目,更新博客就懈怠了,不过环境的不同,也让我对嵌入式开发有了更深刻的理解.在原公司我主要负责在STM32F207芯片平台上, 利用UCOS+LWIP进行嵌入式服务 ...
- 痞子衡嵌入式:飞思卡尔Kinetis开发板OpenSDA调试器那些事(上)- 背景与架构
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis MCU开发板板载OpenSDA调试器(上篇). 众所周知,嵌入式软件开发几乎离不开调试器,因为写一个稍有代码规模 ...
- 嵌入式-迅为iTOP-4418/6818开发板编译Android镜像技术分享
迅为是基于Ubuntu12.04.2 平台做开发,所有的配置和编译脚本也是基于此平台.如果你对Linux 和Android 开发很熟悉,相信你会根据错误提示逐步找到原因并解决,错误提示一般是选用的平台 ...
- 嵌入式开发之zynq——zynq开发环境搭建
http://blog.csdn.net/shushm/article/details/51728690 http://www.cnblogs.com/fpga/p/4593602.html http ...
- 【Linux开发】【Qt开发】嵌入式Qt程序使用触屏或USB鼠标方式
上文<嵌入式Qt开发-移植到ARM开发板 >介绍了Qt程序的移植,本文再说下如何使开发板Qt程序使用触摸屏或USB方式进行交互. 之前刚把一个qt程序移植到arm板上成功运行显示时就开心的 ...
随机推荐
- Flink Catalog
概念 Catalog 提供了元数据信息,例如数据库.表.分区.视图以及数据库或其他外部系统中存储的函数和信息. 数据处理最关键的方面之一是管理元数据. 元数据可以是临时的,例如临时表.或者通过 Tab ...
- Netty 如何自动探测内存泄露的发生
本文基于 Netty 4.1.112.Final 版本进行讨论 本文是 Netty 内存管理系列的最后一篇文章,在第一篇文章 <聊一聊 Netty 数据搬运工 ByteBuf 体系的设计与实现& ...
- Python文件读取和写入方法
读取 # 通过单字符串空格分隔 def count_words(filepath): with open(filepath, 'r') as file: string = file.read() st ...
- linux history 想显示历史命令的时间和作者
vi ~/.profile 增加 HISTTIMEFORMAT="%F %T `whoami` `who am i|awk '{print $1,$5}'|sed 's/ (/@/'|sed ...
- python多版本管理软件pyenv
我们在平时的项目开发或者学习中,有可能使用不同的Python版本,大家都知道Python的版本非常多,如果我们把需要的不同版本的Python都下载到服务器上,管理起来会非常困难,多版本并存又容易互相干 ...
- SMOS-II 电梯综合监控系统程序(电梯IC卡解决方案)安装的注意点
命令提示符下输入命令dir "D:\SMOS-II-CH V3.2" /b /s 回车可返回SMOS II 3.2对应的各文件路径 D:\SMOS-II-CH V3.2\Setup ...
- vue项目中如何加载markdown
场景 今天忽然临时接到一个需求: 就是将markdown文件直接在vue项目中进行加载,并正常显示出来. 这......,我知道是可以进行加载markdown文件的. 但是我之前没有做过,答复的是:可 ...
- winform窗体无边框拖动
1:引用命名空间 using System.Runtime.InteropServices; 2:想要拖动窗体的控件绑定MouseDown事件 点击查看代码 //窗体移动 [DllImport(&qu ...
- 开源个人实用XML翻译小工具,实现
前言 IntelliSense 是一种代码完成辅助工具,可以在不同的集成开发环境 (IDE) 中使用,在开发 .NET 项目时,SDK 仅包含英语版本的 IntelliSense 文件. 对英语不好的 ...
- 用人工智能模型预测股市和加密货币的K线图
前一篇:<从爱尔兰歌曲到莎士比亚:LSTM文本生成模型的优化之旅> 前言:加密货币市场昨日大幅下跌,一天内市值蒸发逾70亿 人民币.有人可能会问,如果使用人工智能模型预测市场的涨跌,是否能 ...