正在上传图片(0/1)

用树莓派玩M100+数据透传(Onboard部分)

 1
手机看帖 6 15747
关于数据透传,自己用树莓派做机载电脑,做了一个“普及版”的小demo。 纯是抛砖引玉,抛砖引玉
先丢工程
https://github.com/MenchiG/DJI-O ... ransparent-Transmit
简单讲,树莓派自带3.3v串口接口,又有io,跟m100其实很搭。关键在于,树莓派便宜!!虽然arduino更便宜。。。。
M100的IO定义如图。


树莓派的串口定义如图。


Rx(PIN 10)接TXD
Tx(PIN 08)接RXD
GND(PIN 06)接GND


水哥跟我说有人R接R我也是醉了。。。。。

嗯,接下来需要配置树莓派的串口,毕竟那个原本是输出内核信息的。
  • sudo nano /boot/cmdline.txt

    dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
    改成
    dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
  • sudo nano /etc/inittab注释掉最后一行(加一个#号)

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100


然后你会发现,这个串口默认不能用230400,所以我们加点特效(duang~~)
sudo nano /boot/config.txt加上 init_uart_clock=64000000就是这个,等号两边没空格


这样就ok了。
重启,把串口名改成"/dev/ttyAMA0" 可以先用sample试试,DJI Onboard SDK Command Line Example 在RPi里是可以直接编译运行的。

拉回正题,我们要做数据透传,数据来源是一个pm2.5传感器,将PM2.5,温度,相对湿度传到手机APP上,手机APP发送命令控制树莓派中的程序。

pm2.5传感器基于arduino,接到树莓派上直接就是个串口,具体就不展开说了,代码在pm25.cpp中。写的比较简陋。。。。

主程序在main.cpp中
先初始化M100的串口及DJI_LIB。
Pro_Hw_Setup("/dev/ttyAMA0", 230400) ;
DJI_Pro_Setup(NULL);

激活,是的,从onboard到mobile的透传需要激活,而从mobile到onboard则不需要。
激活大概是这样的

activate_data_t user_act_data;
void activation
{
    char key_buf[65] = "Input your app_key ";   /* Input your app_key */
    char app_bundle_id[32] = "1234567890";

    user_act_data.app_id = Input your app_id;                   /* Input your app_id */
    user_act_data.app_api_level = Input your app_level;    /* Input your app_level */
    user_act_data.app_ver = 0x02030A00;
    user_act_data.app_key = key_buf;  
    strcpy((char*)user_act_data.app_bundle_id, app_bundle_id);
    DJI_Pro_Activate_API(&user_act_data,NULL);

}

嗯然后就是读pm2.5,透传,读,透传。就是这样。。
为了体现,手机app对树莓派程序的控制,我加了一个运行条件

while(1)
{   
    if(run_flag)
    {
        int nbyte;   
        nbyte = read_pm25(buffer, 1024);     
        if (nbyte > 0)     
        {      
            sdk_pure_transfer_hander((uint8_t*)buffer, nbyte);     /* Transparent-Transmit */        

            printf("%s", buffer);   
        }     

    }
    sleep(1);
}


这是透传的发送
int16_t transparent_transission_send(uint8_t* pbuf, uint16_t len)   
{                                                                                            
    /* DJI_LIB */   
    DJI_Pro_App_Send_Data(0 , 0, MY_ACTIVATION_SET, 0xFE, pbuf, len,NULL,0,1);     
    printf("[pure_transfer],send len %d data %s\n", len, pbuf);                                         
}



这是透传的接收
首先要注册接收的回调函数。
DJI_Pro_Register_Transparent_Transmission_Callback(transparent_transission_receive);然后在回调函数中可以拿到手机APP发过来的数据内容及数据长度,这里我就简单的写了几个命令。a 就是激活,b是开始读取pm2.5,c是停止读取pm2.5。
void transparent_transission_receive(unsigned char *buf,unsigned char len)
{
    unsigned char cmd;
    cmd = buf[0];
   // printf("[recv_data],send len %d data %s\n", len, buf);
    switch(cmd)
    {
        case 'a':
               activation();
            break;
        case 'b':
            run_flag = true;
            break;
        case 'c':
            run_flag = false;
            break;
        default:
            break;
    }
}

手机端APP,的相关内容还请关注Mobile SDK,同时Github在本工程里提供了工程源码及编译好的apk文件。
实际使用的效果是这样的。

有兴趣的同学建议关注github上的工程~
评论
上传
你需要登录之后才能回帖    登录 | 注册
YeYe  Phantom 3 Professional认证用户 2015-10-14 3#
有点凌乱,楼主再排布一下就更好了~
HanLiu   2015-10-17 4#
厉害,可否加QQ,切磋一下!
503151695.qq   2016-1-27 5#
希望交流下啊
KimuraTop   2016-5-16 6#
你好,我想问一下,我想在M100上搭载arduino,然后再在上面搭载传感器,传感器收到的数据,飞机飞上天后,传感器的数据v要怎么样传到地面上的PC或者电脑啊?
Redfish_Chen   2017-3-20 7#
你好,想请问一下楼主,树莓派烧的是什么系统呢?用官方自带的Raspbian可以使用这个sdk吗?
djiuser_IPRbE98   2019-3-4 8#
KimuraTop2016-5-16 21:35
你好,我想问一下,我想在M100上搭载arduino,然后再在上面搭载传感器,传感器收到的数据,飞机飞上天后,传感器的数据v要怎么样传到地面上的PC或者电脑啊?
你好,你现在会了吗?我也要做一个相关的,获取搭载在M100上树莓派超声波传感器的信息,
取消 点赞 评论
分享至:
回复:
上传
取消 评论
快速回复 返回顶部 返回列表