DJI Winodws SDK导入及官方示例程序运行
前言
最近在学习使用DJI提供的windows sdk控制mavic
2,官方文档只有英文的且有一些小问题,所以我把我的操作过程及问题的解决方法写成这篇文章,供大家参考。
作者水平有限,有任何问题欢迎在文章下边留言交流!
DJI Windows sdk官方文档
// 官方文档地址
https://developer.dji.com/cn/document/dd692e73-3839-4a3d-8b57-e5e47f2515b3
开发环境准备
1、Windows10 64位 专业版 1803或更高版本
2、windows sdk 1803或更高版本
3、visual studio 2017/2019
本文所使用的环境如下:
系统:windows10 64位 专业版 20H2
Windows sdk:16299,17134,17763,19041
visual studio 2019
注册DJI开发者账户
// DJI开发者平台网址
https://developer.dji.com/cn/
右上角点击注册即可。
每个应用程序都需要一个唯一的 App Key
来初始化 SDK。
生成App Key
开发者账户注册完成以后登录进入到个人中心。点击CREATE APP
SDK选择Windows SDK,然后依次填写APP名称,包名,分类,描述,点击创建即可。
创建完成以后DJI会发送APP激活邮件到你的电子邮箱,激活完成后即可在个人中心即可看到我们创建的APP。
点击进去即可看到包括APP Key以及包名在内的信息。
下载DJI windows sdk
// DJI windows sdk下载地址
https://developer.dji.com/windows-sdk/downloads/
将DJI windows sdk集成到你的应用程序中
创建UWP项目
- 打开vs2019
- 点击创建新项目
- 选择创建**空白应用(通用Windows)**模板
- 设置项目名称和路径
- 点击创建,选择Windows SDK的目标版本和最低版本,最后点击确定即可
将DJI Windows SDK导入你的项目
1、首先在你的项目根目录创建一个文件夹,命名为“DJIWindowsSDK”
2、然后将你下载的DJI windows SDK压缩包解压
3、进入到**”DJI_WindowsSDKBeta_0.3.2\SDK dll\x86“**目录下
(x86文件夹下是32位的sdk文件,你也可以选择”DJI_WindowsSDKBeta_0.3.2\SDK dll\x64“文件夹下的64位sdk文件。但是我比较推荐你使用32位的sdk文件,因为它的兼容性通常会更好一些。)
4、我们将这4个文件复制到我们上边创建的“DJIWindowsSDK”文件夹下。
5、将DJIWindowsSDK的引用添加到我们的项目中。
- 打开你的项目,在右侧栏中右击你的项目,选择添加->引用。
- 在弹出来的窗口中,点击右下角的浏览。
- 选择项目根目录下我们创建的DJIWindowsSDK文件夹下的DJIWindowsSDK.dll这个文件,然后点击添加,再点击确定。
- 添加完成以后,你可以在右侧栏中的引用下看见**
DJIWindowsSDK
**这个引用
将第三方的dll文件添加到项目中。
- 首先打开**”DJI_WindowsSDKBeta_0.3.2\ThirdParties\x86“**目录找到第三方dll文件。
我们看到该文件夹内只有pthread_dll.dll这一个dll文件,但是官方文档却写着需要“pthread_dll.dll and libcrypto-1.1.dll”这两个dll文件。
我们是从官网下载的DJI windows sdk压缩包,所以应该是官方忘记把libcrypto-1.1.dll这个文件放进去了。
不过不要紧,这个文件我们直接百度搜索就可以下载到。
这是我找到的下载网址:https://www.jb51.net/dll/libcrypto-1_1.dll.html
- 找到pthread_dll.dll 和 libcrypto-1.1.dll这两个dll文件之后,将它们复制到你的项目文件夹里。
- 回到vs2019,在右侧栏右击我们的项目,选择添加->现有项。
- 在弹出来的窗口中选择pthread_dll.dll 和 libcrypto-1.1.dll这两个dll文件,点击添加。
- 第三方dll文件添加成功
项目属性配置
- 在vs2019中,在右侧栏右击解决方案,选择属性。
-
在弹出的窗口中,左侧栏选择配置属性->配置,确保你的项目配置是适用于x86平台的。
-
在vs右侧栏双击打开Package.appxmanifest,选择打包,包名填写你创建的
App Key
对应的包名。ctrl+s
保存。
查看你的App Key
对应的包名。
- 配置串口权限。在vs右侧栏右击Package.appxmanifest,选择查看代码。
在Capabilities元素中添加以下代码。添加完后,ctrl+s
保存。
<DeviceCapability Name="serialcommunication">
<Device Id="vidpid:2ca3 001f">
<Function Type="name:serialPort" />
</Device>
</DeviceCapability>
注册申请
- 在vs2019中,在右侧栏中双击打开MainPage.xaml.cs。
- 在MainPage.xaml.cs文件中导入
DJI Windows SDK
的命名空间。
using DJI.WindowsSDK;
- 创建一个新方法
Instance_SDKRegistrationEvent
。 SDKRegistrationStateChanged
使用 method添加事件监听Instance_SDKRegistrationEvent
。- 调用
RegisterApp()
方法MainPage()
。 - 记得将你的
App Key
添加到代码中。
具体代码如下所示:
public MainPage()
{
this.InitializeComponent();
DJISDKManager.Instance.SDKRegistrationStateChanged += Instance_SDKRegistrationEvent;
//Replace with your registered App Key. Make sure your App Key matched your application's package name on DJI developer center.
DJISDKManager.Instance.RegisterApp("请将你的App Key输入到此处");
}
private async void Instance_SDKRegistrationEvent(SDKRegistrationState state, SDKError resultCode)
{
if (resultCode == SDKError.NO_ERROR)
{
System.Diagnostics.Debug.WriteLine("Register app successfully.");
//The product connection state will be updated when it changes here.
DJISDKManager.Instance.ComponentManager.GetProductHandler(0).ProductTypeChanged += async delegate (object sender, ProductTypeMsg? value)
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
{
if (value != null && value?.value != ProductType.UNRECOGNIZED)
{
System.Diagnostics.Debug.WriteLine("The Aircraft is connected now.");
//You can load/display your pages according to the aircraft connection state here.
}
else
{
System.Diagnostics.Debug.WriteLine("The Aircraft is disconnected now.");
//You can hide your pages according to the aircraft connection state here, or show the connection tips to the users.
}
});
};
//If you want to get the latest product connection state manually, you can use the following code
var productType = (await DJISDKManager.Instance.ComponentManager.GetProductHandler(0).GetProductTypeAsync()).value;
if (productType != null && productType?.value != ProductType.UNRECOGNIZED)
{
System.Diagnostics.Debug.WriteLine("The Aircraft is connected now.");
//You can load/display your pages according to the aircraft connection state here.
}
}
else
{
System.Diagnostics.Debug.WriteLine("Register SDK failed, the error is: ");
System.Diagnostics.Debug.WriteLine(resultCode.ToString());
}
}
运行你的windows sdk演示项目
成功注册应用程序需要 Internet 连接。
由于本应用仅演示DJI Windows SDK的注册过程,并未与DJI产品直接交互,因此无需连接DJI产品即可运行本应用。
点击这里运行你的项目。
如果一切顺利,您应该能够看到以下日志:Register app successfully.
运行示例应用程序
连接你的无人机遥控器
-
先下载DJI Assistant 2 for Mavic
// 官方下载网址 https://www.dji.com/cn/downloads/softwares/assistant-dji-2-for-mavic
安装完以后打开,出现如下界面,提示你连接你的遥控器
-
拿起你的遥控器,先将遥控器关闭
然后通过mirco-usb数据线连接你的电脑,最后开启遥控器,遥控器便会自动连上你的电脑。
如果连接成功,你会看到如下界面。
下载DJI官方windows sdk示例程序
// GitHub地址
https://github.com/dji-sdk/Windows-SDK/tree/master/Sample%20Code
运行示例程序
把官方示例项目下载到本地并在vs2019中打开,选择debug x86模式,直接运行DJIWindowsSDKSample_x86项目。
你应该会看到以下错误信息。
解决方法:
- 在vs右侧栏双击打开Package.appxmanifest,选择打包,点击选择证书。
- 点击创建
- 填写发布者名称和密码,然后确定,确定。
再次点击运行项目,项目正常运行,出现以下界面
输入你的App Key
,点击Activate激活应用。
应用激活成功,你将看到完整的功能列表。