Difference between revisions of "RPi"

From GIMX
Jump to: navigation, search
(Marked this version for translation)

(16 intermediate revisions by 3 users not shown)

Line 2: Line 2:
 
<translate>
 
<translate>
 
<!--T:1-->
 
<!--T:1-->
'''Warning: RPi support should be considered as experimental. Be prepared to face issues if you try GIMX on the RPi.'''
+
'''Warning: RPi support should be considered as experimental. The USB controller has been unstable since the first version. Be prepared to face issues if you try GIMX on the RPi.'''
  
 
GIMX can run on many Linux targets, and the [http://www.raspberrypi.org/ the Raspberry Pi] is one of them!
 
GIMX can run on many Linux targets, and the [http://www.raspberrypi.org/ the Raspberry Pi] is one of them!
 +
 +
== Setup using pre-made image == <!--T:23-->
 +
 +
<!--T:24-->
 +
The simplest way to set up GIMX on a Raspberry Pi is by flashing a pre-made image. See forum user steel_3d's instructions on getting up and running: [http://www.steve-marton.com/gimx/?p=462 Build your own Plug n Play GIMX emulator using Raspberry Pi]
 +
 
== Hardware considerations == <!--T:23-->
 
== Hardware considerations == <!--T:23-->
  
Line 12: Line 18:
  
 
== Firmware update == <!--T:5-->
 
== Firmware update == <!--T:5-->
As early firmwares had severe USB issues it is recommended to update the firmware before using GIMX.<br />
+
<!--As early firmwares had severe USB issues it is recommended to update the firmware before using GIMX.<br />
Updating the firmware may also be useful if you plan to use a Logitech force feedback wheel (the uhid kernel module was missing in earlier firmwares).<br />
 
 
Type the following command:
 
Type the following command:
 
<pre>sudo rpi-update
 
<pre>sudo rpi-update
sudo reboot</pre>
+
sudo reboot</pre>-->
If you have issues with the latest firmware, install the following instead:
+
There are USB issues with the latest firmware. You should install the following instead:
 
<pre>sudo rpi-update 771a503cfc2a1130e2df2a4ddfc45ffa0f592b3f
 
<pre>sudo rpi-update 771a503cfc2a1130e2df2a4ddfc45ffa0f592b3f
 
sudo reboot</pre>
 
sudo reboot</pre>
Line 23: Line 28:
 
<pre>pi@raspberrypi ~ $ uname -a
 
<pre>pi@raspberrypi ~ $ uname -a
 
Linux raspberrypi 4.1.21+ #873 Mon Apr 11 18:00:37 BST 2016 armv6l GNU/Linux</pre>
 
Linux raspberrypi 4.1.21+ #873 Mon Apr 11 18:00:37 BST 2016 armv6l GNU/Linux</pre>
 +
Note that this firmware disables the Wifi interface on the RPi3.
 
<!--== UHID kernel module ==
 
<!--== UHID kernel module ==
  
Line 101: Line 107:
 
<pre>wget https://gimx.fr/download/gimx-raspbian -O gimx.deb
 
<pre>wget https://gimx.fr/download/gimx-raspbian -O gimx.deb
 
sudo dpkg -i gimx.deb
 
sudo dpkg -i gimx.deb
sudo apt-get -f install</pre>
+
sudo apt-get update && sudo apt-get -f install</pre>
  
 
<!--T:8-->
 
<!--T:8-->
 
If you get a "Dependency is not satisfiable: ..." error message, upgrade Raspbian:
 
If you get a "Dependency is not satisfiable: ..." error message, upgrade Raspbian:
<pre>sudo apt-get update && sudo apt-get upgrade</pre>
+
<pre>sudo apt-get update && sudo apt-get upgrade
 +
sudo apt-get -f install</pre>
  
 
== Stop/disable triggerhappy service == <!--T:9-->
 
== Stop/disable triggerhappy service == <!--T:9-->
Line 121: Line 128:
 
== Run GIMX == <!--T:12-->
 
== Run GIMX == <!--T:12-->
 
Read the [[Quick_Start|Quick start page]] to learn how to run GIMX through the GUI.<br />
 
Read the [[Quick_Start|Quick start page]] to learn how to run GIMX through the GUI.<br />
 +
 
A good idea is to run GIMX directly from a terminal, without starting a graphical session, which can be done over the network, using a ssh client, or you can [[#Autostart GIMX at boot without GUI]]<br />
 
A good idea is to run GIMX directly from a terminal, without starting a graphical session, which can be done over the network, using a ssh client, or you can [[#Autostart GIMX at boot without GUI]]<br />
Ideally, GIMX should be launched without using the Ethernet port (because it is connected on the USB bus).<br />
+
 
 +
Ideally, GIMX should be launched without using the Ethernet port (because it is connected on the USB bus). However, this doesn't seem to cause any issues generally.<br />
 +
 
 
More details on command line options on [[Command_line|this page]].<br />
 
More details on command line options on [[Command_line|this page]].<br />
 +
 +
The GUI will help you download the config xmls. If you never run the GUI, you MUST grab the Linux config xmls from here: https://github.com/matlo/GIMX-configurations/tree/master/Linux  The Windows xmls are NOT compatible!<br />
  
 
== Autostart GIMX at boot without GUI == <!--T:28-->
 
== Autostart GIMX at boot without GUI == <!--T:28-->
Simply create a file /etc/systemd/system/gimx.service (as root) with the following content:
+
Simply create a file /etc/systemd/system/gimx.service (as root):
 +
 
 +
<pre>
 +
sudo nano /etc/systemd/system/gimx.service
 +
</pre>
 +
 
 +
With the following contents:
  
 
<!--T:29-->
 
<!--T:29-->
Line 138: Line 156:
 
User=pi   
 
User=pi   
 
Type=simple   
 
Type=simple   
 +
# Replace /dev/ttyUSB0 with /dev/ttyAMA0 when using the on-board UART interface
 
ExecStart=/usr/bin/gimx -p /dev/ttyUSB0 -c LogitechDrivingForceGT_G29.xml --nograb   
 
ExecStart=/usr/bin/gimx -p /dev/ttyUSB0 -c LogitechDrivingForceGT_G29.xml --nograb   
 
Restart=always   
 
Restart=always   
Line 148: Line 167:
  
 
<!--T:32-->
 
<!--T:32-->
Replace ttyUSB0 with your device and LogitechDrivingForceGT_G29.xml with your mapping file (which should be available in the pi home directory as /home/pi/.gimx/config/LogitechDrivingForceGT_G29.xml)
+
Replace ttyUSB0 with your device (/dev/ttyAMA0 when using the on-board UART interface) and LogitechDrivingForceGT_G29.xml with your mapping file (which should be available in the pi home directory as /home/pi/.gimx/config/LogitechDrivingForceGT_G29.xml)
  
 
<!--T:33-->
 
<!--T:33-->
Line 158: Line 177:
 
<!--T:35-->
 
<!--T:35-->
 
The file will be located at /home/pi/blink.py:
 
The file will be located at /home/pi/blink.py:
 +
 +
<pre>sudo nano blink.py</pre>
 +
 +
With the following contents:
  
 
<!--T:36-->
 
<!--T:36-->
Line 213: Line 236:
 
<!--T:43-->
 
<!--T:43-->
 
To start at boot, simply add it to the pi user crontab (crontab -e) as <pre>@reboot python /home/pi/blink.py &</pre>
 
To start at boot, simply add it to the pi user crontab (crontab -e) as <pre>@reboot python /home/pi/blink.py &</pre>
 +
 +
== Powering on AVR and RPi simultaneously using the on-board UART interface  == <!--T:44-->
 +
In case you want to power up AVR (Tested on Pro Micro ATmega32u4) and RPi at once (i.e. using PS4 USB port and a USB Y Splitter) using the on-board UART interface, you will need the adjust shown below in order to reset the AVR board from RPi once started.
 +
 +
<!--T:45-->
 +
It is planned to solve this issue on GIMX 8 version [https://github.com/matlo/GIMX/issues/426]
 +
 +
<!--T:46-->
 +
More details on support forum thread [https://gimx.fr/forum/viewtopic.php?f=5&t=1672]
 +
 +
<!--T:47-->
 +
'''Physically'''
 +
* RPi's PIN40 / GPIO21 connected to ATmega32u4 RST pin directly. (Any RPi GPIO pin should works)
 +
 +
<!--T:48-->
 +
'''Logically'''
 +
* New bash script created /home/pi/resetArduino.sh with content shown below:
 +
<pre>
 +
#!/bin/bash
 +
 +
echo 21 > /sys/class/gpio/export
 +
sleep 1
 +
echo out > /sys/class/gpio/gpio21/direction
 +
sleep 1
 +
echo 1 > /sys/class/gpio/gpio21/value
 +
sleep 1
 +
echo 0 > /sys/class/gpio/gpio21/value
 +
sleep 1
 +
echo 1 > /sys/class/gpio/gpio21/value
 +
 +
exit 0
 +
</pre>
 +
* Grant execution permissions
 +
<pre>chmod +x /home/pi/resetArduino.sh</pre>
 +
* Add the new script to boot sequence (like we do with blink.py program)
 +
<pre>
 +
pi@raspberrypi:~ $ crontab -l
 +
@reboot /home/pi/resetArduino.sh && python /home/pi/blink.py &
 +
</pre>
 +
 +
Using this configuration, GIMX is able to start correctly on its first attempt when RPi and ATmega32u4 are powered on from PS4 simultaneously using GPIO instead of CP2102 USB UART.
 +
 
</translate>
 
</translate>

Revision as of 08:02, 14 March 2018

Other languages:
Deutsch • ‎English • ‎français

Warning: RPi support should be considered as experimental. The USB controller has been unstable since the first version. Be prepared to face issues if you try GIMX on the RPi.

GIMX can run on many Linux targets, and the the Raspberry Pi is one of them!

Setup using pre-made image

The simplest way to set up GIMX on a Raspberry Pi is by flashing a pre-made image. See forum user steel_3d's instructions on getting up and running: Build your own Plug n Play GIMX emulator using Raspberry Pi

Hardware considerations

Use a USB HUB only if there are no ports available on the RPi.
It is highly recommended to use a HUB with an external power supply.

Firmware update

There are USB issues with the latest firmware. You should install the following instead:

sudo rpi-update 771a503cfc2a1130e2df2a4ddfc45ffa0f592b3f
sudo reboot

Tested Rpi firmware:

pi@raspberrypi ~ $ uname -a
Linux raspberrypi 4.1.21+ #873 Mon Apr 11 18:00:37 BST 2016 armv6l GNU/Linux

Note that this firmware disables the Wifi interface on the RPi3.

USB adapter using the on-board UART interface

Hardware requirements

The on-board UART runs at 0V/3.3V levels, and the AVR USB board has to run at 5V to operate at 16MHz (running at 3.3V would only allow to operate at 8MHz).
Connecting the RPi and the AVR USB board directly may damage the hardware!
One cheap solution is to use a voltage divider:

  • Connect both GNDs
  • It's safe to connect the TXD pin of the RPi to the Rx pin of the AVR USB board (the GIMX firmwares configure the Rx pin as an input)
  • To connect the Tx pin of the AVR USB board to the RXD pin of the RPi, you'll need to convert the voltage level from 0..5V to 0..3.3V.

This can be done with a simple resistive divider:

Resistive_divider.png

Vin is the Tx pin of the AVR USB board, Vout is the RXD pin of the RPi, R1=2.2kΩ , R2=3.3kΩ

  • Do not connect any other pin!

Sotware adjustments

By default, the RPi UART is configured as a serial console.
Disable this serial console using raspi-config:

sudo raspi-config 

Then select:

"Advanced Options", "Serial", "No", "Finish"

The default configuration does not allow high baudrates.
Enable high baudrates editing /boot/config.txt:

sudo nano /boot/config.txt

Add the following line at the end of the file:

init_uart_clock=8000000 

Reboot to apply the changes:

sudo reboot

GIMX installation

wget https://gimx.fr/download/gimx-raspbian -O gimx.deb
sudo dpkg -i gimx.deb
sudo apt-get update && sudo apt-get -f install

If you get a "Dependency is not satisfiable: ..." error message, upgrade Raspbian:

sudo apt-get update && sudo apt-get upgrade
sudo apt-get -f install

Stop/disable triggerhappy service

Triggerhappy is a daemon that opens every input device for reading, and that consumes a few percent of the CPU time.

It seems a good idea to stop it while running GIMX.

To stop triggerhappy:

sudo service triggerhappy stop

To disable triggerhappy:

sudo update-rc.d triggerhappy disable

Run GIMX

Read the Quick start page to learn how to run GIMX through the GUI.

A good idea is to run GIMX directly from a terminal, without starting a graphical session, which can be done over the network, using a ssh client, or you can #Autostart GIMX at boot without GUI

Ideally, GIMX should be launched without using the Ethernet port (because it is connected on the USB bus). However, this doesn't seem to cause any issues generally.

More details on command line options on this page.

The GUI will help you download the config xmls. If you never run the GUI, you MUST grab the Linux config xmls from here: https://github.com/matlo/GIMX-configurations/tree/master/Linux The Windows xmls are NOT compatible!

Autostart GIMX at boot without GUI

Simply create a file /etc/systemd/system/gimx.service (as root):

sudo nano /etc/systemd/system/gimx.service

With the following contents:

[Unit]
Description=GIMX  
After=syslog.target network.target

[Service]
User=pi  
Type=simple  
# Replace /dev/ttyUSB0 with /dev/ttyAMA0 when using the on-board UART interface
ExecStart=/usr/bin/gimx -p /dev/ttyUSB0 -c LogitechDrivingForceGT_G29.xml --nograb  
Restart=always  
RestartSec=5

[Install]
WantedBy=multi-user.target

Replace ttyUSB0 with your device (/dev/ttyAMA0 when using the on-board UART interface) and LogitechDrivingForceGT_G29.xml with your mapping file (which should be available in the pi home directory as /home/pi/.gimx/config/LogitechDrivingForceGT_G29.xml)

Run

sudo systemctl daemon-reload

to notify systemd about the new file and

sudo systemctl enable gimx && sudo systemctl start gimx

to enable the gimx service start at boot and start it in the same line.

Notify when GIMX is running using a led

In order to have a proper confirmation about if the gimx service is up and running, you can add a simple python script that turns a led on if the gimx service is running.

The file will be located at /home/pi/blink.py:

sudo nano blink.py

With the following contents:

#!/usr/bin/python
import os  
import time  
import RPi.GPIO as GPIO

led = 23  
button = 18  
GPIO.setmode(GPIO.BCM)  
GPIO.setup(led, GPIO.OUT)  
GPIO.setup(button, GPIO.IN, pull_up_down = GPIO.PUD_UP)

def Shutdown(channel):  
  GPIO.output(led, True)
  time.sleep(0.2)
  GPIO.output(led, False)
  time.sleep(0.2)
  GPIO.output(led, True)
  time.sleep(0.2)
  GPIO.output(led, False)
  os.system("sudo shutdown -h now")

GPIO.add_event_detect(18, GPIO.FALLING, callback = Shutdown, bouncetime = 2000)

while True:  
  found = False
  time.sleep(5)
  pids = [pid for pid in os.listdir('/proc') if pid.isdigit()]
  for pid in pids:
    try:
      cmd = open(os.path.join('/proc', pid, 'cmdline'), 'rb').read()
      if "gimx" in cmd:
        found = True
    except IOError: # proc has already terminated
      continue
  if found == True:
    GPIO.output(led, True)
  else:
    GPIO.output(led, False)

As a bonus, you can add a button so when it is pressed, there is a little blink effect, and the pi is shutted down.

PiButtonLed.png

To start at boot, simply add it to the pi user crontab (crontab -e) as

@reboot python /home/pi/blink.py &

Powering on AVR and RPi simultaneously using the on-board UART interface

In case you want to power up AVR (Tested on Pro Micro ATmega32u4) and RPi at once (i.e. using PS4 USB port and a USB Y Splitter) using the on-board UART interface, you will need the adjust shown below in order to reset the AVR board from RPi once started.

It is planned to solve this issue on GIMX 8 version [1]

More details on support forum thread [2]

Physically

  • RPi's PIN40 / GPIO21 connected to ATmega32u4 RST pin directly. (Any RPi GPIO pin should works)

Logically

  • New bash script created /home/pi/resetArduino.sh with content shown below:
#!/bin/bash

echo 21 > /sys/class/gpio/export
sleep 1
echo out > /sys/class/gpio/gpio21/direction
sleep 1
echo 1 > /sys/class/gpio/gpio21/value
sleep 1
echo 0 > /sys/class/gpio/gpio21/value
sleep 1
echo 1 > /sys/class/gpio/gpio21/value

exit 0
  • Grant execution permissions
chmod +x /home/pi/resetArduino.sh
  • Add the new script to boot sequence (like we do with blink.py program)
pi@raspberrypi:~ $ crontab -l
@reboot /home/pi/resetArduino.sh && python /home/pi/blink.py &

Using this configuration, GIMX is able to start correctly on its first attempt when RPi and ATmega32u4 are powered on from PS4 simultaneously using GPIO instead of CP2102 USB UART.