大疆onboard到Android device数据透传

大疆设备数据透传(Data Transparent Transmission)官方文档写的并不清晰,尤其是onboard到Android透传过程,并且不同Onboard SDK版本变化比较大,本文就自己软硬件环境记录开发过程。

一、软硬件环境:

Onboard 端:

无人机:大疆M100  ;开发板:Manifold ; Onboard SDK 版本:3.2

Mobile端:

Mobile SDK版本:4.4.1;Android Studio版本:3.0;Android 版本;5.0

二、Onboard部分:

Onboard部分参考大疆开发者社区一篇采集pm2.5数据的帖子 http://bbs.dji.com/thread-28914-1-1.html

文章给出了github工程,但是由于是15年的帖子,作者采用的Onboard SDK是比较旧的版本,跟3.2版相比其中的类和函数都有较大变化,我照葫芦画瓢写了一个3.2版本的。

onboard SDK-linux 3.2版本的djiosdk-linux-sample命令有3个选项 -interactive -mobile -programmatic,本文为其加一个  -trans选项,用来表示onboard到android的数据透传。

1、直接修改Onboard-SDK-3.2/sample/linux/Blocking文件夹下的main.cpp

1)在main.cpp中添加激活函数

ActivateData user_act_data; 
void activation(CoreAPI* api)
{

    char key_buf[65] = "app_key";   
    char app_bundle_id[32] = "1234567890";        //默认即可,不用修改

    user_act_data.ID = app_id;                     
    user_act_data.reserved = app_level;                    // 写1即可
    user_act_data.version = 0x02030A00;                    //不用修改
    user_act_data.encKey = key_buf;  
    strcpy((char*)user_act_data.iosID, app_bundle_id);

    api->activate(&user_act_data,0,0);
}
2)添加数据透传函数
//transport send 
void transparent_transission_send(CoreAPI* api,uint8_t* pbuf, uint16_t len)
{   
    api->send(0 , 0, SET_ACTIVATION, 0xFE, pbuf, len,0,0,1);                                        
}
3)在主函数中添加数据透传选项 -trans
//!trans mode
  if (argv[1] && !strcmp(argv[1],"-trans"))
  {
        std::cout << " transparent_transission begin:\n";
	activation(api);       //先激活
	char buffer[16]="Hello Android";        //向Android Device传递"Hello Android"
	while(1)
	{
		std::cout<<"tans:\n";
		transparent_transission_send(api,(uint8_t*)buffer,16);
		sleep(10);
	}
  }

 此处为了验证功能,简单的循环发送"Hello Android",也可以从文本或终端等输入流读数据发送。

2、编译安装sdk

mkdir build
cd build
cmake ..
make djiosdk-core
sudo make install djiosdk-core
3, onboardsdk/onboardsdk/sample/Linux/Blocking文件夹下的UserConfig.txt复制到build/bin文件夹下,修改UserConfig.txt文件内容保存。

三、Android部分

在OnCreat()方法中添加以下代码,实现接收信息功能。

Aircraft mAircraft = (Aircraft)DJISDKManager.getInstance().getProduct();
FlightController mFlightController = mAircraft.getFlightController();
mFlightController.setOnboardSDKDeviceDataCallback(new FlightController.OnboardSDKDeviceDataCallback() {
       @Override
       public void onReceive(byte[] data) {
            String text = new String(data); 
            showToast(text); //弹框中字符串
       }
});
其中showToast()方法实现如下:

public void showToast(final String msg) {
        runOnUiThread(new Runnable() {
            public void run() {
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });
 }

四、运行

手机连接上遥控器,在onboard端的build/bin文件夹下运行./djiosdk-linux-sample -tras,在Android端打开app,可以接收到"Hello Android"。

大疆onboard到Android device数据透传_第1张图片

大疆onboard到Android device数据透传_第2张图片






你可能感兴趣的:(大疆SDK二次开发)