Difference between revisions of "Use the USB port on Parrot Drones"
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== USE USB port on Parrot Drones | == Outcome == | ||
Outcome: Be able to USE USB port on Parrot Drones for external devices | |||
There are many use cases for one to be able to use the USB port on a Parrot Drone. The first kick-off on this page is about using serial devices via USB, the most common scenario. Ofcourse there are more, feel free to add you solutions on this page | There are many use cases for one to be able to use the USB port on a Parrot Drone. The first kick-off on this page is about using ''serial devices via USB'', the most common scenario. Ofcourse there are more, feel free to add you solutions on this page | ||
== Serial modem on Parrot == | == Serial modem on Parrot == | ||
Line 22: | Line 24: | ||
== Intro == | == Intro == | ||
If you just want to know the step to install serial driver and not interested in the background jump to | If you just want to know the step to install serial driver and not interested in the background jump to the '''Step By Step for USB Serial Drivers''' instruction | ||
== Works for == | == Works for == | ||
Line 37: | Line 39: | ||
$ telnet 192.168.42.1 | $ telnet 192.168.42.1 | ||
mount -o remount,rw / | |||
So in the Bebop console we are root, yeah...OK stop the service via: | So in the Bebop console we are root, yeah...OK stop the service via: | ||
Line 92: | Line 94: | ||
Sometimes even this works: | Sometimes even this works: | ||
== Step By Step for USB Serial Drivers == | |||
[SHIFT]+[ENTER] | [SHIFT]+[ENTER] | ||
Line 139: | Line 141: | ||
=== Autostart === | === Autostart === | ||
== | == Step By Step for USB Serial Drivers == | ||
A serial port on Bebop(2) or Disco at startup of aircraft | A serial port on Bebop(2) or Disco at startup of aircraft | ||
Line 147: | Line 149: | ||
Changed, as dirty as we are, the mtp_server.sh script and renamed the mtp_prog name to use to something non existing... thus MTP server program would not be found so not started | Changed, as dirty as we are, the mtp_server.sh script and renamed the mtp_prog name to use to something non existing... thus MTP server program would not be found so not started | ||
=== | === Transfer Drivers via FTP to Drone === | ||
Make sure you have space left on you Parrot Drone internal storage, if needed move some of your video recordings to your PC. | |||
The easy way: | |||
# Connect to you Parrot Drone via Wifi | |||
# FTP the files with your your FTP method of choice. A good start for a GUI FTP client is Filezilla. Open 192.168.42.1 with your FTP client and drag and drop the .ko file into the storage on your Drone ( /data/ftp/internal_000 ) | |||
=== Move kernel modules to system === | |||
==== Where ==== | ==== Where ==== | ||
The /lib/modules/3.4.11/kernel/drivers/usb/serial/ looks like a good spot to us | Where to move your .ko driver files? The /lib/modules/3.4.11/kernel/drivers/usb/serial/ looks like a good spot to us | ||
==== How ==== | ==== How ==== | ||
After 4 time shortpress on powerbutton, Telnet into your Parrot Drone via: | |||
Telnet 192.168.42.1 | |||
Once in the Telnet shell, to be able to write onto the system storage space we have to make the storage space writable, per default it is not. Do it via: | |||
# mount -o remount,rw / | # mount -o remount,rw / | ||
Make a directory of where to store, '''must''' be called serial, do via: | |||
# mkdir /lib/modules/3.4.11\+/kernel/drivers/usb/serial | # mkdir /lib/modules/3.4.11\+/kernel/drivers/usb/serial | ||
Note: The directory could as well be without a + on your Bebop 1 or even a /lib/modules/2.6.36-102952-g6aedf2e9100/kernel/drivers/usb/serial on a Mambo... | Move the previous uploaded .ko driver files... | ||
Note: The directory could as well be '''without a''' + on your '''Bebop 1''' or even a /lib/modules/2.6.36-102952-g6aedf2e9100/kernel/drivers/usb/serial on a Mambo... anyhow move via: | |||
# mv /data/ftp/internal_000/usbserial.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial | # mv /data/ftp/internal_000/usbserial.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial | ||
Line 173: | Line 190: | ||
# mv /data/ftp/internal_000/ch341.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial | # mv /data/ftp/internal_000/ch341.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial | ||
( | (''Optionally'' quicker if you are sure there are only the serial KO files uploaded via:) | ||
# mv -v /data/ftp/internal_000/*.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial | # mv -v /data/ftp/internal_000/*.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial | ||
Line 179: | Line 196: | ||
=== Add modules to modules.dep === | === Add modules to modules.dep === | ||
Maybe it is good to read a bit about :e :w :q etc. of VI the editor you are going to use on this Busybox based OS | Maybe it is good to read a bit about :e :w :q etc. of VI the editor you are going to use on this ''Busybox'' Linux based ''OS'', the OS the Parrot drone uses. | ||
If you are sure how VI editor works, go ahead then; | If you are sure how VI editor works, go ahead then; | ||
vi /lib/modules/3.4.11\+/modules.dep | # vi /lib/modules/3.4.11\+/modules.dep | ||
Add these lines in between somewhere like so: | Add these lines '''in between''' {STARTHERE} {ENDHERE} but do NOT add the {STARTHERE} {ENDHERE} nor the ... ! , somewhere like so: | ||
... | ... | ||
kernel/drivers/parrot/iio/adc/p7temp.ko: kernel/drivers/iio/industrialio.ko | kernel/drivers/parrot/iio/adc/p7temp.ko: kernel/drivers/iio/industrialio.ko | ||
{STARTHERE} | {STARTHERE} | ||
Line 202: | Line 220: | ||
kernel/net/wireless/lib80211_crypt_wep.ko: kernel/net/wireless/lib80211.ko | kernel/net/wireless/lib80211_crypt_wep.ko: kernel/net/wireless/lib80211.ko | ||
... | ... | ||
To save these changes in the file press [ESC] than :w+[ENTER] then :q+[ENTER] | To save these changes in the file press [ESC] than :w+[ENTER] then :q+[ENTER] |
Latest revision as of 06:48, 18 May 2022
Outcome
Outcome: Be able to USE USB port on Parrot Drones for external devices
There are many use cases for one to be able to use the USB port on a Parrot Drone. The first kick-off on this page is about using serial devices via USB, the most common scenario. Ofcourse there are more, feel free to add you solutions on this page
Serial modem on Parrot
Add a external modem ARdrone2, Bebop, Bebop 2 or Disco and maybe even others...
Beware
Wherever you read /lib/modules/3.4.11\+/ is for a Bebop /lib/modules/3.4.11/, mind the plus. If you read Bebop it might as well be Disco, although on the MTP there are some differences. And in the rare case you have an ARdrone2, well it will be /lib/modules/2.6.32.9-g980dab2/
Example
A 20Km telemetry connection with the Parrot Bebop by means of a RFD868 modem or some other modem that does the trick
Needs
Somehow send and receive bytes to the RFD868 modem, be it serial or otherwise.
Intro
If you just want to know the step to install serial driver and not interested in the background jump to the Step By Step for USB Serial Drivers instruction
Works for
Tested and works on Disco Firmware 1.7.1, Bebop Firmware 4.0.6 and Bebop2 with Firmware 4.7.1. And on an ARdrone2 ? We someone working on it...
Strategy
Use the USB port on the backside of the AP mainboard. The USB is by default on Bebop hooked to the MTP media transfer protocol server... let's stop this service so it will not interfere with our datastream wishes.
Stop MTP service
Log into your Bebop, make a WiFi connection then
$ telnet 192.168.42.1
mount -o remount,rw / So in the Bebop console we are root, yeah...OK stop the service via:
**# /bin/sh /bin/mtp_server.sh stop**
First tryout, USB plug convertor
Plug in a OTG micro converter to USB Serial device [| like this one]
So plugh in a 3v3 FTDI USB cable
# dmesg
gives:
usb 2-1: new full-speed USB device number 2 using ci_hdrc
Sadly no default FTDI suppoert on the Bebop, lets fix this...
Add serial hardware driver
# find -iname *ko
on the Parrot bebop we find:
./data/ftp/usbserial.ko ./data/ftp/internal_000/usbserial.ko ./data/ftp/internal_000/ftdi_sio.ko
...lucky us ;), let's go and interrogate them, see what we have here via:
If your are not so lucky you have to go to this page to build them
# modinfo usbserial.ko && modinfo ftdi_sio.ko
that is just dandy , let's add them to this file /lib/modules/3.4.11/modules.dep
First we need to be able to Write change on the Drone main storage medium, let make it happen via:
# mount -o remount,rw /
we start up an editor on the device call "VI" via:
# vi /lib/modules/3.4.11\+/modules.dep
VI quick 'n dirty: Go to edit mode with
:e[ENTER]
Then go to a line where you want to insert the lines and press
i+[ENTER]
Sometimes even this works:
Step By Step for USB Serial Drivers
[SHIFT]+[ENTER]
Then copy this line below from this text:
/data/ftp/internal_000/usbserial.ko
Paste it via
[CTRL]+[SHIFT]+[V]
and again new empty line via a
[SHIFT]+[ENTER]
Copy this line
/data/ftp/internal_000/ftdi_sio.ko
Paste it again via
[CTRL]+[SHIFT]+[V]
Press [ESC]
Then let's write the file via:
:w[ENTER]
Now active the driver, manually first, and one can autostart it automate it later after the proof of concept works...
# insmod /data/ftp/internal_000/usbserial.ko # insmod /data/ftp/internal_000/ftdi_sio.ko
# cd /data/ftp/internal_000/
# modprobe usbserial.ko # modprobe ftdi_sio.ko
on to some testing... conect whatever serial devec that outputs stuff to the FTDI cable, e.g. and GPS receiver, then draw in the serial garbage via:
# cat /dev/ttyUSB0
Improvement on the theme
Autostart
Step By Step for USB Serial Drivers
A serial port on Bebop(2) or Disco at startup of aircraft
Disable MTP autostart
Changed, as dirty as we are, the mtp_server.sh script and renamed the mtp_prog name to use to something non existing... thus MTP server program would not be found so not started
Transfer Drivers via FTP to Drone
Make sure you have space left on you Parrot Drone internal storage, if needed move some of your video recordings to your PC.
The easy way:
- Connect to you Parrot Drone via Wifi
- FTP the files with your your FTP method of choice. A good start for a GUI FTP client is Filezilla. Open 192.168.42.1 with your FTP client and drag and drop the .ko file into the storage on your Drone ( /data/ftp/internal_000 )
Move kernel modules to system
Where
Where to move your .ko driver files? The /lib/modules/3.4.11/kernel/drivers/usb/serial/ looks like a good spot to us
How
After 4 time shortpress on powerbutton, Telnet into your Parrot Drone via:
Telnet 192.168.42.1
Once in the Telnet shell, to be able to write onto the system storage space we have to make the storage space writable, per default it is not. Do it via:
# mount -o remount,rw /
Make a directory of where to store, must be called serial, do via:
# mkdir /lib/modules/3.4.11\+/kernel/drivers/usb/serial
Move the previous uploaded .ko driver files...
Note: The directory could as well be without a + on your Bebop 1 or even a /lib/modules/2.6.36-102952-g6aedf2e9100/kernel/drivers/usb/serial on a Mambo... anyhow move via:
# mv /data/ftp/internal_000/usbserial.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial # mv /data/ftp/internal_000/option.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial # mv /data/ftp/internal_000/usb_wwan.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial # mv /data/ftp/internal_000/ftdi_sio.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial # mv /data/ftp/internal_000/cp210x.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial # mv /data/ftp/internal_000/pl2303.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial # mv /data/ftp/internal_000/ch341.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial
(Optionally quicker if you are sure there are only the serial KO files uploaded via:)
# mv -v /data/ftp/internal_000/*.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial
Add modules to modules.dep
Maybe it is good to read a bit about :e :w :q etc. of VI the editor you are going to use on this Busybox Linux based OS, the OS the Parrot drone uses.
If you are sure how VI editor works, go ahead then;
# vi /lib/modules/3.4.11\+/modules.dep
Add these lines in between {STARTHERE} {ENDHERE} but do NOT add the {STARTHERE} {ENDHERE} nor the ... ! , somewhere like so:
...
kernel/drivers/parrot/iio/adc/p7temp.ko: kernel/drivers/iio/industrialio.ko {STARTHERE} kernel/drivers/usb/serial/usbserial.ko kernel/drivers/usb/serial/option.ko kernel/drivers/usb/serial/usb_wwan.ko kernel/drivers/usb/serial/ftdi_sio.ko kernel/drivers/usb/serial/cp210x.ko kernel/drivers/usb/serial/pl2303.ko kernel/drivers/usb/serial/ch341.ko {ENDHERE} kernel/arch/arm/oprofile/oprofile.ko kernel/net/wireless/lib80211.ko: kernel/net/wireless/lib80211_crypt_wep.ko: kernel/net/wireless/lib80211.ko ...
To save these changes in the file press [ESC] than :w+[ENTER] then :q+[ENTER]
Quicktest
Add to system instantly in this order, do this:
# insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/usbserial.ko # insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/ftdi_sio.ko
Start kernel module USBSerial and FTDI
Add modprobe somewhere e.g /etc/init.d/rcS
# vi /etc/init.d/rcS
Look for other modprobes ones then add these there:
...
#/sbin/sysmon.sh & {HERE} insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/usbserial.ko insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/option.ko insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/usb_wwan.ko insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/ftdi_sio.ko insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/cp210x.ko insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/pl2303.ko insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/ch341.ko {ENDHERE} ulogi "rcS init script done" exit 0
Time to reboot to test via
# reboot now
Make a better custom cable:
- Get a 3V# FTDI Real FTDI to USB small PCB
- Desolder the USB plug
- Get a microUSB cable an cut it and solder to USB side of FTDI PCB
{TODO Photo}
Separate Power
At a 1W setting it is not possible to draw power from the USB so a separate powersource must be found or create. There is none, so one can add a BEC that can give 5V at least 5A continuous and is wel shielded to the drone...
BEC to Bebop Howto and where
- At the base where the Power goes to the Bobop Board pull a little on red and black silicone shield
- Fux and solder on base of wire a bit
- solder CC BEC RED to RED Black to Black on Base
{TODO} Photo
- Add a dot of Hotglue to isolate an get mechanical strength for cables not to break off there
- Plugh in Bebop Battery, measure voltage from BEC , should be 5V
Alternative idea
Serial Data in and out via the console port, why not...
First there is the serial port used as shell access. see also http://forum.parrot.com/usa/viewtopic.php?id=30330
Disable serial shell
In the /etc/inittab we find:
... # Put a an on-demand shell on first serial port with outputs redirected to # zprint. Note: force interactive shell since zprint is not a tty... ttyPA0::askfirst:-/bin/sh -l tty1::askfirst:-/bin/sh ...
So let's disable it and start using the serial port for other nifty stuff...
Howza
look for serial console info
$ cat /var/log/messages
Gives
... Jan 1 00:00:07 (none) user.info broadcom_setup.sh: (insmod) : CURRENT_TTY = /dev/console Jan 1 00:00:07 (none) user.info broadcom_setup.sh: Load Modules : Jan 1 00:00:08 (none) user.info broadcom_setup.sh: (create_net_interface) : CURRENT_TTY = /dev/console
Using the serial link
Links
- https://github.com/cucx/bebop some hacking tips