MiniDrone Bluetooth command for taking pictures


#1

Hi,

Currently I’m working on a C# API (and Windows 10 Demo App) for controlling the Parrot Mini Drones. Basic flight commands are under control but now I want to have the drone take a picture.

Question 1
The MediaRecord class has two AR Commands. One named Picture and one named PictureV2. What is the difference between the two?

Question 2
How should both AR Commands be used? Are there any command arguments required?

Currently I use the following AR Command for taking a picture. But that does not seem to do the trick.

    /// <summary>
    /// Picture command.
    /// </summary>
    /// <returns>Returns the <see cref="ARCommand"/> for Picture.</returns>
    internal static ARCommand Picture()
    {
        // Declare return variable
        ARCommand result = new ARCommand();

        result.ProjectIdentifier = 0x02;
        result.CommandClass = 0x06;
        result.Command = new byte[2] { 0x00, 0x00 };

        // Return result
        return result;
    }

P.S. For those interested in the full code. Send me a message and I’ll add you to the Visual Studio Online repository.


#2

Found this in the LibARCommands documentation.

<class name="MediaRecord" id="6">
    Media recording management
    
    <cmd name="Picture">
        @deprecated
        Take picture
        <arg name="mass_storage_id" type="u8">
            Mass storage id to take picture
        </arg>
    </cmd>
    
    <cmd name="PictureV2">
        Take picture
    </cmd>
</class>

But it does not help much. Still no idea why the drone is not taking a picture. But at least we now know the Picture command is deprecated.


#3

Hi,
First of all, let me please thank you for this thread as it helped me to implemented taking picture functionality in minidrone node.js library.

Your code is almost correct, but in addition to CommandClass and Command you need also to send StorageId (=0x00) as a last parameter.
I’m not sure how that can be done - either as StorageId field or add it to Command as
new byte[3] { 0x00, 0x00, 0x00 }

Hope this helps.