海口省建设厅网站广告拍摄制作公司
news/
2025/9/22 19:17:08/
文章来源:
海口省建设厅网站,广告拍摄制作公司,泉州软件开发制作,海口网站建设q479185700棒有这个想法的初衷喜欢电子和DIY硬件的朋友对稚晖君应该都不陌生#xff0c;他定期都会分享一些自己做的好玩的硬件#xff0c;他之前做了一个ElectronBot桌面机器人我就很感兴趣#xff0c;所以就自己也做了一个。起初我只是自己开发了一个叫电子脑壳的上位机软件#xff0…有这个想法的初衷喜欢电子和DIY硬件的朋友对稚晖君应该都不陌生他定期都会分享一些自己做的好玩的硬件他之前做了一个ElectronBot桌面机器人我就很感兴趣所以就自己也做了一个。起初我只是自己开发了一个叫电子脑壳的上位机软件大家在之前的博客里应该也有见到是个用WinUIWASDK开发的Windows应用软件。ElectronBot机器人要一直和电脑连接通过应用进行控制很多的网友都想ElectronBot脱离电脑使用于是我也想着能有什么好办法所以也就有了这个标题的想法。项目代码地址: https://github.com/maker-community/ElectronBot.DotNet技术选型大家想到树莓派肯定就会想起python,大学的时候玩树莓派确实用python比较多但是作为一个.NET开发人员当然要尝试下.NET的跨平台能力到底如何了。由于先有了之前写的上位机软件电子脑壳也想着让之前封装的SDK能够直接用在树莓派上所以选择.NET是顺理成章的事情了。应用开发选择.NET框架通讯方式选择GRPCUSB操作选择LibUsbDotNet调用libusb整体方案如下图环境配置1. 树莓派系统安装及网络配置树莓派支持的系统有很多种像官方的DebianUbuntu等等。我平时使用Debian比较多但是测试的时候好像usb操作有些问题应该是我用的.net互操作库对Debian支持的不太好所以我选择了ubuntu的系统。Raspberry Pi Imager 树莓派官方的系统烧录工具Ubuntu系统下载地址 Download Ubuntu Server安装烧录工具下载系统然后烧录系统。如下图所示目前树莓派Zero 2 W的Ubuntu只有Server版本和Core版本需要使用命令行做操作。网络配置可以参考下面的文章进行配置。树莓派4B ubuntu server ssh服务器部署全过程详解内网穿透能正常联网安装软件就可以了。2. .NET6的运行环境由于.NET6 Arm64官方没提供包管理安装所以需要大家通过脚本或者下载文件安装。网络好的可以通过脚本安装简单本文以脚本安装示例。参考文档如下使用安装脚本或通过提取二进制文件在 Linux 上安装 .NET下载安装脚本dotnet-install.sh放到用户家目录执行以下指令添加执行权限sudo chmod x ./dotnet-install.sh执行指令安装./dotnet-install.sh -c Current下载解压结束需要我们配置环境变量就像windows安装软件一样配置完环境变量才可以直接通过dotnet直接使用了不然是提示找不到指令的。以下指令是编辑环境变量的我选择了~/.bashrc在文档最底部添加环境变量内容。sudo vim ~/.bashrc内容export DOTNET_ROOT$HOME/.dotnet
export PATH$PATH:$HOME/.dotnet:$HOME/.dotnet/tools保存并退出然后执行dotnet如果正常就可以进行下面的操作了。实践过程记录1. GRPC服务的开发与调试首先用创建一个grpc服务微软官方的文档协议文件编写介绍协议文件编写和服务编写以我的协议内容为例包含了floatboolbytes类型float 对应 c# floatbool 对应 c# boolbytes 对应 c# byte[]syntax proto3;option csharp_namespace Verdure.ElectronBot.GrpcService;package electronbotactiongrpc;// The electronbotaction service definition.
service ElectronBotActionGrpc {// Sends a greetingrpc PlayEmoticonAction (EmoticonActionFrameRequest) returns (EbHelloReply);
}// The request message containing the users 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;
}然后生成对应的服务代码主要注意点是bytes类型的转换服务端写好了以后就可以写调用端代码了为了图方便我就在电子脑壳代码里加了调用代码。WinUI调用GRPC注意事项直接将gprc相关的东西放到winui项目里好像有一些问题所以我把它放到了一个库项目里进行操作了。配置协议文件生成client代码电子脑壳注入grpc-clientservices.AddGrpcClientElectronBotActionGrpc.ElectronBotActionGrpcClient(o {o.Address new Uri(http://192.168.3.236:5241);});数据发送端也要注意bytes类型的转换grpc服务的打包发布打包的时候选择目标运行时为可移植windows和linux都可以运行项目代码地址2. 服务的部署与效果验证通过ftp工具将grpc服务放到树莓派上首先需要连接ElectronBot之后再运行服务进入项目所在目录执行指令如下dotnet Verdure.ElectronBot.GrpcService.dll --urlshttp://*:5241如果通讯正常那么应该会报错提示libusb找不到系统已经安装了libusb只是.net调用的时候目录没有找到需要我们创建软连接。LibUsbDotNet README最底部有说树莓派实际操作如下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 //创建链接通过上面的操作 libusb的操作应该就没有问题了。运行的效果如下图特殊问题与心得体会最大的一个问题就是在sdk放到linux系统上测试写入数据异常。需要sdk单独处理linux环境需要sdk补一些内核驱动卸载逻辑特别注意otg数据线不要使用那种一拖几的用一个口的就行不然数据发送不过去由于使用的LibUsbDotNet上述逻辑没暴露到上层我只好拉了一个分支改了发了一个包问pr也没人理我。sdk内部特别处理的代码如下执行了一个设备的SetAutoDetachKernelDriverif (wholeUsbDevice.DriverMode UsbDevice.DriverModeType.MonoLibUsb)
{
_logger.LogInformation(MonoLibUsb DetachKernelDriver);var retDetach wholeUsbDevice.SetAutoDetachKernelDriver(true);_logger.LogInformation(retDetach.ToString());
}通过这次的尝试我算是明白了理想很丰满现实很骨感的意思本来觉得树莓派Zero 2 W小巧便携而且我只是用它接收数据发送数据结果数据发送的时候屏幕的刷新很慢不知道是性能差劲还是usb传输是瓶颈。下次换个4b进行测试一下。至此整个过程就分享完了这个项目基本上涵盖了.net技术内的很多东西如果ElectronBot和树莓派结合独立以后能够很好的使用我觉得用MAUI开发一个手机端的管理工具也是顺理成章了可以期待一下能看到这里的可以在评论区给点意见了。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/910095.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!