用 .NET 启动你的 DJI Ryze Tello 无人机
点击上方蓝字
关注我们
(本文阅读时间:15分钟)
.NET UDP 编程
▍什么是 UDP
在现场实时测控领域,如果有实时、抗干扰性、安全性等要求,都可以采用 UDP 传输数据。我想这也是 DJI Ryze Tello 为何使用 UDP 协议通信的原因。
使用远程主机名和端口号作为参数创建 UdpClient 类的实例 创建 UdpClient 类的实例,然后调用 Connect 方法
您可以使用 UdpClient 中提供的任何发送方法将数据发送到远程设备。使用 Receive 方法从远程主机接收数据。
用 .NET Polyglot Notebook 连接 DJI Ryze Tello
string telloIP = "192.168.10.1";
int telloPort = 8889;
UdpClient udpClient = new UdpClient();
udpClient.Connect(telloIP,telloPort);
public void Command(UdpClient udpClient,string cmd)
{
Byte[] sendCmdBytes = null;
sendCmdBytes = Encoding.UTF8.GetBytes(cmd);
udpClient.Send(sendCmdBytes, sendCmdBytes.Length);
}
Command(udpClient,"command");
Command(udpClient,"takeoff");
Command(udpClient,"land");
用 .NET MAUI 构建 DJI Ryze Tello 应用
.NET MAUI 是跨平台,跨设备的前端应用技术,开发团队使用一种编程语言 C# 就可以完成 iOS / Android / macOS / Windows 的应用开发。现在是多终端的年代,通过不同设备控制你手上的 DJI Ryze Tello , 搭建多应用场景是非常棒的。本系列主要通过 iOS 和 Android 移动设备控制 DJI Ryze Tello, 以下是一些关键步骤:
Comet 是⼀种编写跨平台 UI 的现代⽅式 ( https://github.com/dotnet/Comet )。基于 .NET MAUI,它采⽤Model - Views - Update (MVU) 模式,和传统的 XAML 相⽐ , 它有⼏个显著的特点:
基于函数式编程;
Comet 参考了 SwiftUI 和 Flutter 描述界面的方式,更容易去编写页面层次逻辑,如:
用 Comet 开发 .NET MAUI 应用不仅可以在 Visual Studio 上开发 ,也可以在 Visual Studio Code 上开发。
注意:如果需要在 Visual Studio Code 调试 .NET MAUI 应用,请安装 C# 和 .NET Comet 组件
dotnet new iosbinding -o VLCSharp.iOS
dotnet new android-bindinglib -o VLCSharp.Droid
▍绑定 iOS/Android 原生库的技巧
用 Sharpie 做初次转换
sharpie bind -framework ./MobileVLCKit.framework --namespace MobileVLCKit -sdk iphoneos16.1
修改 csproj 文件,把原生库依赖的库都需要添加进去
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0-ios</TargetFramework>
<RootNamespace>MobileVLCKit</RootNamespace>
<Nullable>enable</Nullable>
<ImplicitUsings>true</ImplicitUsings>
<IsBindingProject>true</IsBindingProject>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<NoBindingEmbedding>false</NoBindingEmbedding>
</PropertyGroup>
<ItemGroup>
<ObjcBindingApiDefinition Include="ApiDefinition.cs" />
<ObjcBindingCoreSource Include="StructsAndEnums.cs" />
</ItemGroup>
<ItemGroup>
<NativeReference Include="MobileVLCKit.framework">
<Kind>Framework</Kind>
<IsCxx>True</IsCxx>
<ForceLoad>True</ForceLoad>
<SmartLink>True</SmartLink>
<Frameworks>MediaPlayer Accelerate AssetsLibrary AVFoundation CoreMedia AudioToolbox CoreData CoreMedia CoreSpotlight MobileCoreServices CoreAudio OpenGLES CFNetwork CoreText QuartzCore CoreGraphics UIKit Security StoreKit SystemConfiguration VideoToolbox</Frameworks>
<LinkerFlags>-lbz2 -liconv -lstdc++</LinkerFlags>
</NativeReference>
</ItemGroup>
</Project>
编译,请从 GitHub(https://github.com/kinfey/dotNETMauiHOL/tree/main/code/apps/02.Binding/TelloApp.Bindings/VLCSharp.iOS)下载并替换 StructsAndEnums.cs 和 ApiDefinitions.cs。
如果希望了解更多 iOS Binding 的知识和相关技巧,你可以通过该链接了解:https://github.com/kinfey/AMapMAUIControls/blob/main/tutorial/cn/01.iOSBinding.md
创建 Jars 文件夹,把 Android 的 libVLC 的库 org.videolan.libvlc.aar 添加到绑定的项目 Jars 文件夹中
修改 .csproj 文件
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0-android</TargetFramework>
<SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<LibraryProjectZip Include="Jars\org.videolan.libvlc.aar" />
</ItemGroup>
<ItemGroup>
<TransformFile Include="Transforms\Metadata.xml" />
<TransformFile Include="Transforms\EnumFields.xml" />
<TransformFile Include="Transforms\EnumMethods.xml" />
</ItemGroup>
</Project>
编译,和 iOS ⼀样编译出错,请从 GitHub
https://github.com/kinfey/AMapMAUIControls/blob/main/tutorial/cn/02.DroidBinding.md
自定义界面控件
new VStack{
new VlcUI().Padding(20).Alignment(Alignment.TopLeading)
}.Frame(width:400,height:300).Alignment(Alignment.Center),
小结
学习 主题 | 相关 内容 | 链接 |
开发环境配置 | 开发环境搭建技巧,包括 .NET MAUI 环境的安装 ,开发⼯具的配置以及基于 iOS / Android 应⽤开发要准备的条 件 | https://github.com/kinfey/dotNETMauiHOL/blob/main/cn/01.UDPwithCSharp.md |
C# UDP 编程基础 | 学习 C# UDP 编程 ,以及通过 Notebooks 连接 DJI Ryze Tello ,完成原型开发的搭建 | https://github.com/kinfey/dotNETMauiHOL/blob/main/cn/01.UDPwithCSharp.md |
.NET MAUI 基础学习 | 学习 .NET MAUI 的相关知识,包括 iOS / Android 开发的相关知识 | https://github.com/kinfey/dotNETMauiHOL/blob/main/cn/02.dotNETMAUIIntro.md |
.NET MAUI Comet UI 构建应⽤界⾯ | 学习 .NET MAUI Comet 的相关知识 , 使⽤ .NET MAUI Comet构建应⽤界⾯ | https://github.com/kinfey/dotNETMauiHOL/blob/main/cn/03.dotNETMAUIComet.md |
.NET MAUI 绑定移动应⽤的原⽣库 | 学习把移动应⽤原⽣库迁移到 .NET MAUI | https://github.com/kinfey/dotNETMauiHOL/blob/main/cn/04.dotNETMAUIBinding.md |
.NET MAUI 构建⼀个完整的项⽬技巧 | ⽤ .NET MAUI 构建⼀个完整项⽬的技巧,包括不同平台的设定以及⾃定义控件等知识 | https://github.com/kinfey/dotNETMauiHOL/blob/main/cn/05.dotNETMAUIApps.md |
相关文档:
https://github.com/kinfey/dotNETMauiHOL
2. 学习 .NET MAUIhttps://aka.ms/mauiBlog.Learn
3. 关于 .NET Polyglot Notebookhttps://aka.ms/mauiBlog.Notebook
4. .NET MAUI 绑定 iOS 原⽣库https://aka.ms/mauiBlog.iOSBinding
5. .NET MAUI 绑定 Android 原⽣库https://aka.ms/mauiBlog.DroidBinding
6. .NET MAUI ⾃定义⻚⾯控件https://aka.ms/mauiBlog.CustomUI
7. C# 调⽤ UDPhttps://aka.ms/mauiBlog.UDP*未经授权请勿私自转载此文章及图片。
谢谢你读完了本文!欢迎在评论区留言分享你的想法,并且转发到朋友圈。
长按识别二维码
关注微软开发者MSDN