USB over IP (network)

Hyper-v does not provide USB passthrough, some people use USB redirection from remote desktop RDP… A similar technology might be USB over network, but this does not always work, as many USB devices have very little tolerance for lag ! and this will introduce some lag !

My objective is to connect a MINI-VCI connected on a raspberry PI to a computer running other software to analyze the data, whether this works or not is yet to be seen.

There seems to be a few solutions online, some using generic hardware, and some using specialty hardware

The most diverse of those solutions that can work on everything from a raspberry pi to a windows computer and android phone is (https://www.virtualhere.com/), but I have not yet verified whether this software is USB/IP compatible or not

USB/IP has been built into the linux kernel for some time now, and a couple of solutions for both server and client are available on github, So here I will be investigating what I can do to bridge the Linux Raspberry PI to my windows PC,

USBIP is a protocol where the server is the machine connected to the USB device via wire, and the client is the machine that needs to use the USB device but is not connected to it via USB.

In linux, usbipd is the name of the server, and usbip being the client, In debian, both server and client are included in the usbip package, hence, on the raspberry PI and on the Linux server, we need to run the command

apt-get install usbip

The modules of USB/IP (usbip-core, usb-host, and vhci-hcd) are already included,

We will get to the Windows client after the Linux to Linux section

The two options

In the cases we are exploring here, the server is a Raspberry Pi (3), the client is a Windows machine, but there are a couple of things to try first, the Windows clients are KVM virtual machines, we will try

1- The client is the Linux Host machine hosting the windows virtual machines, and the USB port is passed to the virtual machine

OR

2- The Windows client has the USBIP driver directly connecting to the Raspberry PI server

The Steps

Installing the USB/IP server on the raspberry pi “apt-get install usbip”

How fast is a raspberry PI 3/4 B

The answer is, depending on your needs, but you are not here to hear that now are you, so I did a little experiment, tailored specifically for a certain need that does not apply accross the board, but combined with other experiments online, this might give you an idea

The experiment is annotating an image with image magic plugin for PHP

Both running buster (Debian/Raspbian 10), both on PHP7.3 and everything fresh installed

the PC has 8GB of DDR3 Ram, and the PI 1GB of LPDDR2-900 SDRAM

The PC has a 12 year old “Intel(R) Core(TM)2 Quad CPU Q9450 @ 2.66GHz”

The PC was around 7 fold faster than the raspberry PI 3 (the mean of a trial of 20 runs, with all the files cached in ram by the linux kernel)

The trial was done with a discrete VGA card (AMD RADEON) and with the chipset’s own graphics card, results were identical (The VGA card did not have it’s drivers installed, so we don’t know if it might have an effect or not)

I am now moving into even older PCs to compare performance, and will report the results here again to see what the limiting factors might be

GPS / u-blox and Adafruit-Mediatek

The things i add here are primarily for my reference, but they could save you a lot of time, so here i am only covering the practical side, wikipedia can help you with the theory. things here are sort of in random order, so feel free to use your browser’s search facility.

I have the following positioning systems/chips/boards, so most of the stuff you will find here will relate to them

* V.KEL VK2828U7G5LF TTL Ublox GPS module with antenna: supports GPS, GALILEO, SBAS (WAAS, EGNOS, MSAS, GAGAN)
* K-172 USB GPS USB Receiver Dongle Adapter Smart Antenna Module For Gmouse Glonass, also running u-blox, Support NMEA 0183 and ublox binary protocol.
* The ADAFRUIT ultimate breakout board with the MTK3339 chip (Not U-BLOX), but rather mediatek

A-GPS and AssistNow:

The long story short: A-GPS seems to be when the satellite data is available in advance, whether you allow your system to download it from the internet as it goes, or you download it in advance and make it available to the system, it boils down to telling your system where the satellites are and their relevant data rather than wait for your device to download that data from the satellites at very low speeds (Sat data is downloaded at a maximum of 50 bits per second, so getting the data over the internet or from the SD card in your raspberry pi or arduino etc is much much faster).

AssistNow is how the U-Blox A-GPS works

1- A-GPS only work out of the box with u-center, the software by u-blox, on your raspberry PI or arduino, it will not work out of the box , to make it work you need to look online for software that does that (It’s on github)

the online edition is when the data is downloaded from the internet in real time (when it is needed), the AssistNow  offline is when you download “AlmanacPlus® Differential Almanac Correction Data” from the internet and store it with your device (On whatever is driving the device, be it a PC, laptop, raspberry pi, arduino etc…)

2- The adafruit GPS raspberry pi board does A-GPS in a different way, which works out of the box, they add a battery to the board, and once data is downloaded once, it stays on the board for as long as there is a battery 😉

 

 

The best computer – tv setup for your living room

The best computer-tv setup for your living room

Here, i am posting this to remind myself of how to setup my media center at home, so it can be a bit messy

Kodi (XBMC) seems to be the only real competitor to Windows Media center, in my case, i feel it is much better than Windows Media Center.

Hardware

The raspberry PI 2 (With 1 GB ram) can function as the hardware with it’s HDMI output

Or

An old PC, with cooling switched to passive watter cooling (Cost me around $40 on ebay for the parts) to get rid of the noisy fan, and with the hard drive replaced by a bootable linux flash stick (Also to reduce noise)

Please note that the analogue (D-SUB / VGA) cable is just as good as HDMI, analogue signal over such a short distance is not a problem, so you can connect the D-SUB to your TV or the HDMI cable, you will not notice the difference. But you will need to connect audio to external speakers or something.

The disadvantage of the old PC method are

The cooling system costs half as much as a raspberri PI ! alot of money i would say.
The PC is bulky compared to the PI
Draws much more power than the PI

The advantages

You already have that old PC
You can use Kodi on Windows, then use your IPAD as a keyboard and mouse (No such app exists for linux yet)
You can use it for more general purpose purposes later on
It’s eithernet port is not provided through USB like the PI
You can have much more RAM on it
You can add an input card to it and connect your home receiver to it
You can install hard drives inside (Remember to make them spin down when not in use) and then use it as NAS
You can install an IR receiver on the com port and use LIRC to program any remote you have
It can play DVDs (If it has a DVD player)

———————————————-

Plugins that i like for Kodi

Connecting the raspberry pi to a wifi network with a static IP

This is a simple thing, there is nothing special about the PI, first, connect it to a wireless dongle (USB is your only option anyways), then create a file with your network settings, because of the scenario this is written for, and it is written as a reference for someone, I will connect it to an android hotspot, the subnet here is specific to android, others should use your own according to their router.

1- create the following file at /etc/wpa_supplicant/wpa_supplicant.conf

network={
ssid="isam"
psk="abcabc1234"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
auth_alg=OPEN
}

Now, modify the file /etc/network/interfaces

For Signal quality and other relevant information, use the following command

iwconfig

Raspberry PI camera, quick guide

For those who want a real lowdown right away, here is the final verdict, as of the time of writing this, there are no faster options, the limitations here are imposed by the creators of PI and it’s chips (The Broadcom GPU)

You have 2 options for capturing stills in burst mode. In the case i am addressing here, taking photos of rapidly moving objects in broad daylight, so the shutter speed is very fast, the ISO is not so high (Because of the sun).

1- Through the GPUs stills part of the processor, you would get less than 2 frames per second, you can use the timelapse function.

2- Through the video port on the GPU, this will allow a maximum of 15 frames per second at 5MP resolution, no binning, no sensor cropping, but the still port gives somewhat better photo quality

Considerations

The speed of storage counts, if your storage becomes a bottleneck, 15FPS will not be possible.

1- You can use faster USB storage, the USB port is bound to a maximum of 45MB/Second

2- A fast memory card, currently 25MB/s comes on expensive “Professional” SD cards, i would rather use the USB port

3- Splitting the bandwidth between storage and Ethernet is not a good idea, the Ethernet adapter on the raspberry PI is connected through USB, so it will share the USB bandwidth 😉

4- Splitting the storage or buffering some of the frames on the SD card can be a good idea, as the SD card is connected directly to the CPU not through USB

5- Lowering the photo quality through increased performance will give you good mileage, something equivalent to what other programs call 80% quality will reduce the size pretty well without sacrificing much.

How to get through the stills port

raspistill -o %04d.jpg -ss 5000 -ISO 300 -t 10000 -tl 100 -q 10 -th none

So, the questions that come to mind instantly are, how come quality is a value from 0 to 100 and we are using 10 ? it is a good question, and this is something that is not making sense i know, but judging with my eyes, -q 10 will give us good compression ratio and the photo is still good, the range between 10 and 100 does not make much difference, and then under 10, things go very bad rapidly, no idea why

Now to the next method, which is getting photos from the video port… here is a quick and dirty picamera python script

If you don’t know how python works, please don’t change the indentation, indenting the print statement will add the print to the previous code block which is something we don’t want.

#!/usr/bin/python3
import time
import picamera

frames = 60

with picamera.PiCamera() as camera:
    camera.resolution = (2592, 1944)
    camera.shutter_speed = 5000
    camera.iso = 100
    camera.framerate = 10
    camera.start_preview()
    time.sleep(2)
    start = time.time()
    camera.capture_sequence([
        '/usbstick/image%02d.jpg' % i
        for i in range(frames)
        ], use_video_port=True)
    finish = time.time()
print('Captured %d frames at %.2ffps' % (
    frames,
    frames / (finish - start)))



So simply put, if you are running raspbian, you need to get into the pi config (command is raspi-config), and enable the camera then reboot

Also, don’t forget to run “rpi-update” or apt-get upgrade

Now if you try to take a photo you would enter the command

raspistill -o cam.jpg

But this will take a long time to take one photo (5 seconds by default), this is because it needs to set the exposure, if you want to give it less time you could run the command

raspistill -t 1500 -o test.jpg (One and a half seconds)

But that’s is too long, i already know that it is broad daylight, and that i need a very fast shutter speed, So how do i manually set things ?

Taking a photo of fast moving things in the SUN, i would run the command as follows

raspistill -t 1 -ss 1000 –awb sun -o test1.jpg

Taking photos of moving things in cloudy weather, i would run the command as

So, here are the manual things

–ss 1000 (1 ms, good for a sunny day oudoors, 4ms is good on a cloudy day, with dim light, i would recommend bumping this up a bit)

–ISO 300 (Sensitivity, Back in the day, the film dictated this property), the faster the shutter (Lower value), the higher the needed sensitivity (ISO VALUE), the range is 100 to 800

–nopreview

Prsets for Automatic white balance (AWB)

–awb sun