[Tutorial] Logitech G27 (and other wheels) on PS4 using Pi

Discuss everything to do with GIMX here
User avatar
Rudi Rastelli
Posts: 16
Joined: Sat Jun 04, 2016 3:17 pm

[Tutorial] Logitech G27 (and other wheels) on PS4 using Pi

Post by Rudi Rastelli »

Hi !

Many PS4 drivers may know this:
U have an expensive wheel at home which refuses to work on PS4. In my case it's a Logitech G27 wheel.
But thanks to @Matlo's amazing project 'Gimx' there's a solution to that problem.

In this tutorial i'll focus on G27 connected to PS4 through a Raspberry Pi (powerd by PS4) using a minimal amount of hardware and cables.
(I'll tell you which changes are needed for other wheels at the appropiate parts of the tutorial)

I've succesfully tested this on a Pi1 and a Pi3 as well !

The tutorial looks very long on first view... but that's because my intention was to make it noob proved as much as possible and therefore it's very detailed... and long.
The advanced users might forgive me that.

OK... LET'S GET STARTED !

REQUIREMENTS:
A) NEEDED HARDWARE
1. 'Raspberry Pi' (let's call it just 'Pi') + Case + PSU + SD-Card(>=4GB)
(All available Pi modells(with the exception of the 'Pi Zero') should work... I'm using the old modell B)
2. A 'Teensy 2.0' or 'Teensy++ 2.0' let's call it just 'Teensy') - ATTENTION: Teensy 3.0 isn't compatible !
_ (A 'Teensy' is kind of a Micro-PC... I have 'Teensy++ 2.0')
3. Wheel Logitech G27
4. Dualshock 4 Controller
5. HDMI-cable, USB-to-MiniUSB cable, USB-to-MicroUSB cable
6. A 2.2 kOhm and a 3.3 kOhm resistor
7. A 3-way and two 2-way '2.54mm 1 Row Straight PCB Socket Through Hole Socket Strip' ->
8. A push button ->
9. A soldering iron for electronics, 6 colored cables, solder with flux core
10.Hot glue gun
Note 1:
The above resistor combination is just a suggestion. In fact u can use any combination of resitors as long as their values divides as about 3:2.
But u always have to connect the smaller one to the GND solder point of the 'Teensy'
Note 2 (for the ones who wanna now WHY):
Background for the usage of the 2 resistors is that the 'Teensy' outputs 5V signals while the 'Pi' expects 3.3V signals on it's input.
To avoid that the 'Pi' gets damaged through the 'overvoltage' 2 resistors (connected in row) are used to divide the voltage (5V/3.3V~3:2)


B) NEEDED SKILLS
1. PATIENCE
2. EVEN MORE PATIENCE
3. Minimal solder skills
4. No fear to fight a bit with Linux on command line (i assume i'm by far not a linux expert as well)

C) NEEDED SOFTWARE

Software for 'Teensy'
1. 'Teensy Loader App' -> http://www.pjrc.com/teensy/teensy.exe
2. Gimx-Firmware for the 'Teensy' -> https://github.com/matlo/GIMX-firmwares/releases/latest

Software for 'Pi'
1. 'Win32 Disk Imager' -> https://sourceforge.net/settings/mirror ... nstall.exe
2. 'Raspian Jessie Light' -> https://www.raspberrypi.org/downloads/raspbian/
3. 'Putty' -> https://the.earth.li/~sgtatham/putty/la ... /putty.exe


HARDWARE PART I
D) SOLDERING
THE 'Teensy'
1. Put some solder on the connectors of the Socket Strips
2. Strip the ends of the 4 colored cables and put some solder on them
3. Here's a picture of what needs to be soldered:

ATTENTION: The labeling of the resistors on the picture are swapped by mistake ! (thx @htusa31 and @matlo for the hint)
a) Put the black(GND), red(D2) and orange(+5V/VCC) cable through the holes from frontside and solder them on backside.
b) Solder the 3.3 kOhm resistor at the solder point of the black cable
c) Solder the 2.2 kOhm resistor at D3 solder point of the 'Teensy'
d) Solder the 2 resistors at where they cross
e) Solder the white cable to the crossing point.
f) Put some tape under the crossing point to avoid electrical shortcuts
g) Solder the cables to the Socket Strips (Make sure u use the same color order like in picture)
Note: I'll explain why the orange cable is optional later

THE "Shutdown Button"
1. Solder 2 cables to the connectors of the push button (blue & gray in picture... see Section G)
2. Solder the other ends of the 2 cables to a 2-way socket strip

SOFTWARE PART:
E) FLASHING THE 'Teensy'
1. Connect the 'Teensy' via USB-to-MiniUSB cable with PC and wait until driver is installed
2. Start the 'Teensy Loader App'
3. You'll see a window with a greyed out picture of the 'Teensy'
4. Now press the little button on the 'Teensy' and the picture gets solid (='Teensy' is now in flash-mode)
5. From the firmware download for the 'Teensy' open up the 'EMUG29PS4'-folder
6a.For 'Teensy 2.0' : Drag'n'drop the 'atmega32u4.hex'-file onto the picture of the 'Teensy'.
6b.For 'Teensy++ 2.0' : Drag'n'drop the 'at90usb1286.hex'-file onto the picture of the 'Teensy'.
__(You should see the filename of the '*.hex'-file at the lower part of the window)
7. Press the down pointing green arrow button to flash the 'Teensy'
__(You should now see a 'Download Complete' at the lower part of the window)
8. Press the right pointing green arrow button to reboot the 'Teensy'
9. Close 'Teensy Loader App' and disconnect 'Teensy' from PC

F) SETTING UP THE 'Pi'
Because this part makes a lot of work i advise you only start this when u have enough time!

Alternativly here's an ready-to-flash image of my SD:
RudisPiGimx.part01.rar
RudisPiGimx.part02.rar
RudisPiGimx.part03.rar
Notes:
A 2GB SD card is required at least and u need to
- expand the file system via 'sudo raspi-config'
- change the ethernet-config to fit your local network (check chapter "GIVING 'Pi' A STATIC IP" below) .


FLASHING 'RASPIAN'-IMAGE TO SD
1. Place the SD in the cardreader on PC and start 'Win32 Disk Imager'
2. Click on the little folder symbol and select the 'xxxx-xx-xx-raspbian-jessie-lite.img'-file
3. Select the correct drive letter for your SD under 'Device' (in most cases it's already selected)
4. Click the 'Write'-button and wait until the image has been written to SD
5. Close 'Win32 Disk Imager' and remove SD

CONNECTING 'Pi' FOR SETUP PROCEDURE
1. Place SD into card slot on the 'Pi'
2. Connect the 'Pi' via HDMI-cable with your TV (or monitor or whatever u might use) and select the correct channel.
3. Connect the 'Pi' via network-cable with your home network
4. Connect the 'Pi'-PSU with the 'Pi'
5. Now the 'Pi' boots showing a lot of text output
6. Wait until this constant flow of messages comes to an end and u see the login prompt

CONTROLLING 'Pi' VIA PC
Note:
All of the following can also be done via a keyboard connected to the 'Pi'. But in this case u have to type in everthing instead of using copy'n'paste as described in the appendix.
And this is pretty to much work and also a unneeded source of producing failures.

1. At around the middle of your screen u'll see a line 'My IP address is 192.168.x.y' ... Remember this IP-address !
2. Start 'Putty' at PC
3. At 'Host Name (or IP address)' enter the IP-address
4. At 'Saved Sessions' enter a name for the 'Pi' (eg 'XIMP Pi') and click the 'Save'-button
5. Double click at 'XIMP Pi' and confirm the following message window
6. You will now see a DOS-like window and you need to enter login and password (pi & raspberry)
__(Keep in mind that Linux differs between capital and small letters !)
7. Now you can enter commands (For Linux noobs i advice to now have a look at the APPENDIX at the lower part of the tutorial)

GIVING 'Pi' A STATIC IP
Note:
Each time you boot the 'Pi' it get's an IP from your router. But this IP might not always be the same and because of this you need to have a look which IP it has gotten each time you boot it up
and enter the new IP in 'Putty' so it can successfully establish a connection.
Because this is very ugly it's nessessary to give the 'Pi' a static IP.

1. Finding Gateway-IP(=Router-IP) : Enter "route -n" -> You'll see your Gateway-IP in the first line (eg 192.168.1.1)
2. "sudo nano /etc/network/interfaces"
3. Replace the line "iface eth0 inet manual" with this:

Code: Select all

# Ethernet
auto etho
allow-hotplug eth0
iface eth0 inet static
address <Pi-IP>
netmask 255.255.255.0
gateway <Gateway-IP>
dns-nameservers 8.8.8.8
__Replace '<Pi-IP>' with the IP-address of the 'Pi' (see above)
__Replace '<Gateway-IP>' with your Gateway-IP (see above)
4. Save and quit (see APPENDIX)

5. To disable the DHCP-client and TriggerHappy services enter the following commands one by one:

Code: Select all

sudo service dhcpcd stop
sudo systemctl disable dhcpcd
sudo service triggerhappy stop
sudo update-rc.d triggerhappy disable
sudo reboot
6. Wait for reboot and log into 'Pi' with 'Putty'

CONFIGURE 'Pi'
1. "sudo raspi-config"
2. Select 'Advanced Options' -> 'A8 Serial' -> 'No' -> 'Ok'
3. 'Finish' -> 'Yes'
4. Wait for reboot and log into 'Pi' with 'Putty'
5. To fully update the 'Pi' enter the following commands one by one:

Code: Select all

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install rpi-update
sudo rpi-update
sudo reboot
Note: Confirm any prompts with 'y'
6. Wait for reboot and log into 'Pi' with 'Putty'
7. "sudo nano /boot/config.txt"
8. Scroll down to the very end and just above the line 'enable_uart=0' insert the line 'dtoverlay=pi3-disable-bt'
9. Change the line 'enable_uart=0' to 'enable_uart=1'
10.Add 'init_uart_clock=8000000' just below the line 'enable_uart=1'
11.Save and quit

INSTALL 'GIMX' AND MAKE IT AUTOSTART
1. Enter the following commands one by one:

Code: Select all

wget http://gimx.fr/download/gimx-raspbian -O gimx.deb
sudo sudo dpkg -i gimx.deb
sudo apt-get -f install
sudo nano /etc/systemd/system/gimx.service
Note: The 'sudo sudo dpkg -i gimx.deb'-command will give some errors... THIS IS EXPECTED !
2. Insert the following text block via copy'n'paste:

Code: Select all

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

[Service]
User=pi
Type=simple
ExecStart=/usr/bin/gimx -p /dev/ttyAMA0 -c LogitechG27_G29.xml --nograb
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
3. Save and quit
4. "sudo systemctl daemon-reload"
5. "sudo systemctl enable gimx && sudo systemctl start gimx"

CONFIGURE GIMX
1. In order to add the appropiate wheel configuration enter the following commands one by one:

Code: Select all

cd /home/pi
mkdir .gimx
cd .gimx
mkdir config
cd config
sudo nano LogitechG27_G29.xml
2. Open up the G27-Configuration-Site(https://github.com/matlo/GIMX-configura ... 27_G29.xml) at your PC-browser
3. Mark the text from '<?xml version="1.0" encoding="UTF-8"?>' to '</root>' and copy'n'paste it to the 'nano'-window
4. Save and quit
Note:
If you would like to use another wheel then have a look at https://github.com/matlo/GIMX-configura ... ster/Linux.
Here u'll find configuration files for other wheels. Look for files ending with 'G29.xml'.
You'll need to change the following lines in the tutorial:
- 'sudo nano LogitechG27_G29.xml'
- 'ExecStart=/usr/bin/gimx -p /dev/ttyAMA0 -c LogitechG27_G29.xml --nograb'


SHUTDOWN THROUGH BUTTON
IMPORTANT NOTE:
It's not a good idea to cut off power from the 'Pi' because sooner or later this will kill your SD.
To prevent this we'll use a 'Shutdown Button' to power down the 'Pi' savely.


1. In order to create a small python script for shutting down the 'Pi' when 'Shutdown Button' is pressed enter the following commands one by one:

Code: Select all

cd /home/pi
mkdir Scripts
cd Scripts
sudo nano shutdown_pi.py
2. Insert the following text block via copy'n'paste:

Code: Select all

#!/bin/python
# Simple script for shutting down the raspberry Pi at the press of a button.
# by Inderpreet Singh

import RPi.GPIO as GPIO
import time
import os

# Use the Broadcom SOC Pin numbers
# Setup the Pin with Internal pullups enabled and PIN in reading mode.
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.IN, pull_up_down = GPIO.PUD_UP)

# Our function on what to do when the button is pressed
def Shutdown(channel):
    os.system("sudo init 0")

# Add our function to execute when the button pressed event happens
GPIO.add_event_detect(18, GPIO.FALLING, callback = Shutdown, bouncetime = 2000)

# Now wait!
while 1:
    time.sleep(1)
3. Save and quit
4. "sudo nano /etc/rc.local"
5. Scroll down and just before the line "#fi' insert a new line : "sudo python /home/pi/Scripts/shutdown_pi.py &"
6. Save and quit
7. "sudo init 0" (This command will shut down the 'Pi')
Note:
After step 3 i recommend to try the shutdown script (before putting it in autostart) with : "sudo python /home/pi/Scripts/shutdown_pi.py".
Of course u need to connect at least the shutdown button to the 'Pi' (see section G)


HARDWARE PART II:
G) PUTTING EVERYTHING TOGETHER

'Teensy' connected with GPIO of the 'Pi'
The row of pins at the edge of 'Pi' PCB are enumerated with even the numbers 2,4,6... starting at the 'corner' (top left in the picture)

Code: Select all

+----+--------+--------+
| Pi | Teensy | Kabel  |
+----+--------+--------+
| 2  |  +5V   | orange |
| 6  |  GND   | black  |
| 8  |  D2    | red    |
| 10 |  X     | white  |
+----+--------+--------+
X = Crossing point of the 2 resistors

This shows the 'Teensy' clued to the case top of the 'Pi' (Make a hole for the MiniUSB-connector of the 'Teensy' first)

"Shutdown Button" connected to pin 12 and 14 of 'Pi' GPIO via blue and gray cable

Everything's ready... you see the default power connector of the 'Pi and above it u see the MiniUSB-connector of the 'Teensy'
Note:
Some of the pics are older ones and that's why there's no "Shutdown Button"


POWERING VIA PS4... ARE YOU SERIOUS ?
Some might ask themself if this isn't to much for a PS4, but the PS4 has USB3 which is capable to provide up to 900mA. Even a Pi3 uses only ~750mA on full load of the 4 cores.
I'm pretty sure GIMX is far far away from producing such a heavy load and/or uses all 4 cores. Also the connected USB devices (wheel and DS4) will not drain much power if any.

But anyway... if you don't like that idea you can simply unplug the orange cable from the 'Pi' and power it up using the PSU.

FINAL PART
H) HOW TO USE
1. Power off PS4
2. Connect the 'Pi' via USB with your wheel and a DS4
3. Connect the 'Pi' via 'Teensy'-MiniUSB-connector with PS4
4. Power on PS4
5. Now focus on DS4's LED until it flashes yellow (this might take around 2-3 minutes)
6. Now press the leftmost orange button on the wheel (=PS-button)
7. Now you sould be able to navigate through PS4's menu with wheels D-pad and even all other buttons should be functional

8. Press the "Shutdown Button" and wait until only red LED on the 'Pi' is on. Then shutdown PS4

APPENDIX :
COPY AND PASTE
Differences and Cooperations of Copy'n'Paste at Windows and Linux:
- Windows: I assume everbody here nows how Copy'n'Paste is done at windows
- Linux: 'Copy' = Mark text / 'Paste'= Right mouse click

Example:
If u like to copy'n'paste the text 'Rudi is stupid' into the commandline at 'Putty' then...
Mark the text 'Rudi is stupid' -> right mouse click on marked text -> 'Copy' -> right mouse click at 'Putty'-console window
!!! Doing so u can copy'n'paste everything in the tutorial !!!
(You can also use this technique the other way around)


WORKING WITH 'nano' TEXTEDITOR
- Copy'n'Paste : Works here the same as described above
- Move cursor : Use cursor keys
- Save text and quit 'nano' : Press 'Strg' + 'x' -> 'Y' -> 'ENTER'
_(Do this if tutorial tells you to 'Save and quit')


@Everyone using this tutorial:
I've thought about providing a SD card image... but my upload bandwidth is soooo lame i regret from this idea.
So... if anyone can do this i guess it would be much appreciated by the community. (But leave out the 'static ip'-part because your ip most likely doesn't work in others network)

When everything is working for you i STRONGLY advice to make a backup of the SD with 'Win32 Disk Imager'

When trying to power the 'Pi' via Teensy with only a USB-PSU (instead of a PS4) the 'Pi' refuses to boot... have no idea why !?
So... if u wanna boot without PS4 power it through the "normal" Pi-MicroUSB-Port.

As a last word let me say :
BIG THX TO @Matlo FOR HIS AMAZING TOOL
Also THX to @cortega1 for helping me finding some misspellings and failures in the tutorial. His videos inspired me... check it out here: http://gimx.fr/forum/viewtopic.php?f=10&t=1675

Regards
Rudi
Last edited by Matlo on Mon Jan 16, 2017 10:01 am, edited 36 times in total.
User avatar
Matlo
Posts: 5768
Joined: Wed Jul 06, 2011 7:01 am
Location: France
Contact:

Re: [Tutorial] Logitech G27 (and other wheels) on PS4 using

Post by Matlo »

Hi,

Thanks for this very useful tutorial!
Please host it on the wiki!
GIMX creator
User avatar
Rudi Rastelli
Posts: 16
Joined: Sat Jun 04, 2016 3:17 pm

Re: [Tutorial] Logitech G27 (and other wheels) on PS4 using

Post by Rudi Rastelli »

@Matlo
Unfortuanally i'm a total wiki noob and have no idea currently how to shift the tutorial over to the wiki preventing it's structure.
Feel free to do it for me if u like !?

There are 2 things i've noted and i don't understand right now:
1. Why do i need to wait until DS4 blinks yellow for wheel to become detected by PS4 ?
__Is there a way around this ?... did i oversee something to avoid this behaviour ?... or is there anything u can change in gimx to avoid this waiting time ?
__And what the heck happens when DS4 blinks yellow ?

2. When i power up the Pi the wheel turns right and left and returns to center position.
__Shortly after that it does turn a 2nd time, but this time it doesn't return to the center position after it has turned right. It only turns back 90° !???


Regards
Rudi
User avatar
Matlo
Posts: 5768
Joined: Wed Jul 06, 2011 7:01 am
Location: France
Contact:

Re: [Tutorial] Logitech G27 (and other wheels) on PS4 using

Post by Matlo »

Sadly I have no time to migrate it to the wiki.
The bad thing with hosting tutorials on a forum is that only you (and me as I am administrator) will be able to update it.
Sooner or later it will become outdated.

I have no idea about your issues. I'll have a look at this as soon as I have some free time and nothing with higher priority.
GIMX creator
User avatar
Rudi Rastelli
Posts: 16
Joined: Sat Jun 04, 2016 3:17 pm

Re: [Tutorial] Logitech G27 (and other wheels) on PS4 using

Post by Rudi Rastelli »

@Matlo
Here's another little prob i have:
Because i use raspian lite (doesn't have X installed) i can't run the gimx-config-tool. So i need to twek the LogitchG27_G29 by hand.
Is there a discription of the various parameters (including their range) in the config files somewhere?

What i want to achive:
1. Decrease wheels dead zone ('dead_zone' parameter ?... if yes: which range can it have?)
2. Decrease the 900° range / make it act non-linear ('exponent' parameter ?... if yes: how to change it to make it more sensitive around mid position)

Regards
Rudi
User avatar
Rudi Rastelli
Posts: 16
Joined: Sat Jun 04, 2016 3:17 pm

Re: [Tutorial] Logitech G27 (and other wheels) on PS4 using

Post by Rudi Rastelli »

UPDATED TUTORIAL

- Added "Shutdown Button"

Regards
Rudi
Last edited by Rudi Rastelli on Mon Oct 31, 2016 6:06 pm, edited 1 time in total.
cortega1
Posts: 34
Joined: Wed Mar 30, 2016 3:34 pm

Re: [Tutorial] Logitech G27 (and other wheels) on PS4 using

Post by cortega1 »

Rudi,

Another great addition to one of the best GIMX setups I've seen so far. I'm going to have to try this one out. To clarify from your picture, Pins 12 and 14 are connected to the shutdown button..?

Thanks
User avatar
Rudi Rastelli
Posts: 16
Joined: Sat Jun 04, 2016 3:17 pm

Re: [Tutorial] Logitech G27 (and other wheels) on PS4 using

Post by Rudi Rastelli »

yep
htusa31
Posts: 2
Joined: Fri Aug 05, 2016 8:48 pm

Re: [Tutorial] Logitech G27 (and other wheels) on PS4 using

Post by htusa31 »

I set my GIMX pi adapter up exactly like you did.
I could never get it to work correctly.

After some review I have found out why mine did not work.
The resistors look to be wired backwards.
The 3.3 needs to be in place of the 2.2

I swaped mine around and it worked like a charm.

Also the resistors need to be 1/4 watt. Anything bigger than 1/4 wont allow for data communication.

I also have noticed running the GPIO pins reduced if not eliminate the left/right force feed back grab.
The USB ports is known to be the bottleneck of the PI, taking the main out put through the GPIO pins are a work around to that.

Also there is no need to run the UART=1, I left mine alone at 0 and it runs fine.
User avatar
Rudi Rastelli
Posts: 16
Joined: Sat Jun 04, 2016 3:17 pm

Re: [Tutorial] Logitech G27 (and other wheels) on PS4 using

Post by Rudi Rastelli »

Nice 2 see at least one has tried this ^^

Just gives me wonder u have to swap the resistors for 2 make it work.
If u check the color codes of the resistors in my pictures it's exactly as described in the tut.
But anyway... if it works for u it's ok.

Regards
Rudi
Post Reply