这个想法的初衷是有的
喜欢电子和DIY五金的朋友对志慧君应该并不陌生,他会定期分享一些自己做的好玩的五金,他之前做过一个桌面机器人我很感兴趣,所以我自己做了一个。
起初,我刚刚开发了一款名为 的主机软件,你应该在之前的博客中看到过,这是一款使用WinUI(WASDK)开发的应用软件。
机器人应该始终与计算机连接并通过应用程序进行控制,许多网友都想在远离计算机的地方使用它,所以我也思考了如何做到这一点,所以我也有了这个标题的想法。
项目代码地址:
技术选型
当你想到 Pi时,你肯定会认为你确实更多地使用它来玩 Pi,但作为一个. .NET 开发人员肯定需要尝试 .NET 的跨平台功能。
由于我首先有了之前写的上位机软件的电子脑壳,所以我也想让之前打包好的SDK可以直接在树莓派上使用,所以我选择了..NET是一件自然而然的事情。
总体方案如下图所示:
环境配置 1.树莓派系统安装及网络配置
Pi 支持的系统有很多种,比如官方的,等等。
我平时用得很多,但是我测试了一下,发现USB操作似乎存在一些问题,应该是我用的.net互操作库没有得到很好的支持,所以我选择了这个系统。
安装烧录工具,下载系统,然后烧录系统。如下图所示:
目前, Pi Zero 2 W只有一个版本和一个Core版本,你需要使用命令行来做操作。
有关网络配置的详细信息,请参阅以下文章。
树莓派4B SSH服务器部署(内网渗透)全过程详解。
您可以在网络上正常安装软件。
阿拉伯数字。。NET6 操作环境
因为。NET6 Arm64 并未正式提供包管理和安装,因此您需要通过脚本或下载文件进行安装。
网络可以通过脚本安装,简单,本文使用一个脚本来安装一个示例。
参考文件如下:
使用安装脚本或提取二进制文件在 Linux 上安装 . .NET on Linux using an or
下载安装脚本-.sh将其放入用户的主目录中
运行以下命令以添加执行权限
:
sudo chmod +x ./dotnet-install.sh
执行命令安装
./dotnet-install.sh -c Current
在下载和解压的最后,我们需要配置环境变量,就像安装软件一样,配置完环境变量后,我们可以直接通过它们来使用它们,否则会提示找不到指令。
以下命令是编辑环境变量,我选择了~/.,将环境变量内容添加到文档的最底部。
sudo vim ~/.bashrc
内容
export DOTNET_ROOT=$HOME/.dotnet
export PATH=$PATH:$HOME/.dotnet:$HOME/.dotnet/tools
保存并退出,如果正常,则执行以下操作。
实践过程记录 1.GRPC服务的开发与调试
从创建 grpc 服务开始
官方文档、协议文档编写介绍
协议文件撰写和服务撰写
例如,我的协议包含 float、bool 和 bytes 类型
Float 对应于 C# float
Bool 对应于 C# Bool
bytes 对应于 C# byte[]。
syntax = "proto3";
option csharp_namespace = "Verdure.ElectronBot.GrpcService";
package electronbotactiongrpc;
// The electronbotaction service definition.
service ElectronBotActionGrpc {
// Sends a greeting
rpc PlayEmoticonAction (EmoticonActionFrameRequest) returns (EbHelloReply);
}
// The request message containing the user's name.
message EmoticonActionFrameRequest {
float J1 = 1;
float J2 = 2;
float J3 = 3;
float J4 = 4;
float J5 = 5;
float J6 = 6;
bool Enable = 7;
bytes FrameBuffer = 8;
}
// The response message containing the greetings.
message EbHelloReply {
string message = 9;
}
然后生成相应的服务代码
需要注意的重点是类型字节的转换
写完服务器后,就可以编写调用代码了,为了方便起见,我把调用代码添加到了电子脑壳代码中。
在WinUI中调用GRPC的注意事项
将GPRC相关的东西直接放入winui项目中似乎存在一些问题,因此我将其放入库项目中进行操作。
配置协议文件以生成代码
电子脑壳注射了grpc-,
services.AddGrpcClient(o =>
{
o.Address = new Uri("http://192.168.3.236:5241");
});
数据发送者也应注意字节类型的转换
grpc 服务的打包发布
打包时,选择可移植的目标运行时(Linux 和 Linux 都可以运行)。
项目代码地址
2. 服务部署及效果验证
要通过FTP工具将grpc服务放在 Pi上,您需要在运行服务之前连接到它
进入项目所在目录,执行以下命令。
dotnet Verdure.ElectronBot.GrpcService.dll --urls="http://*:5241"
如果通信正常,那么应该报错,说明找不到,系统已经安装,但是在调用.net时没有找到目录,我们需要创建一个软连接。
在最底部有一句话
以下是 Pi 的实际工作方式:
sudo find / -name "libusb-1.0*.so*" //列出库的目录位置
cd /usr/lib/aarch64-linux-gnu/ //进入库所在目录
sudo ln -s libusb-1.0.so.0 libusb-1.0.so //创建链接
通过上述操作,应该没有问题。
跑步的效果如下:
特殊问题和经验
最大的问题之一是在将 SDK 放置在 Linux 系统上时测试写入数据异常。
由于上面用的逻辑没有暴露在上层,只好拉个分支改成包,问PR的时候没人理我。
SDK 内部专门处理的代码如下:
执行了河流的装置
if (wholeUsbDevice.DriverMode == UsbDevice.DriverModeType.MonoLibUsb)
{
_logger.LogInformation("MonoLibUsb DetachKernelDriver");
var retDetach = wholeUsbDevice.SetAutoDetachKernelDriver(true);
_logger.LogInformation(retDetach.ToString());
}
通过这次尝试,我大概明白了理想是很丰满的,现实是很瘦弱的,我原本以为树莓派零2W小巧便携,而我只是用它来接收数据和发送数据,结果在发送数据时屏幕的刷新速度非常慢,不知道是性能差,还是USB传输是瓶颈。下次,更改 4b 进行测试。
到目前为止整个过程都是共享的,这个项目基本上涵盖了.net技术里面的很多东西,如果和树莓派独立后能好好用的话,我觉得用MAUI来开发手机管理工具是顺理成章的,可以期待一下,可以看到可以在这里的评论区给出一些评论。
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。