Raspberry Pi + Xbee RC Transmitter

by warp.9.scotty in Circuits > Remote Control

4246 Views, 7 Favorites, 0 Comments

Raspberry Pi + Xbee RC Transmitter

IMG_1558.jpg

This instructable will show you what I did to create my own Raspberry Pi Zero + Xbee RC transmitter

Downloads

Raspberry PI and Xbee RC Transmitter

Configure the Raspberry Pi UART

Hey there!

The Raspberry Pi (all variations) are extremely versatile and are now the cornerstone of an ecosystem of many easy to solder add-ons that make these devices REALLY handy. Unfortunately the one thing that Raspberry Pi is missing (currently) is a breakout board or turnkey GPIO interface for XBee (ZigBee) radios. XBee devices are a great way to communicate between all kinds of devices without a lot of dicing and slicing protocols or data formats and make it very easy to integrate USB devices and send their data to other remote devices. To begin, start with any version of the Raspberry Pi. In this Instructable I used a Raspberry Pi zero, and configured the serial console to free up the UART using this Instructable.

Write a Python Script to Read Game Controller Values

This bit of Python code reacts to the events raised by the game controller and transmits the value of the input on the control that raised the event. This code will send data as fast as the baud rate set on the XBee radios. In this example the radios are set to 57600 but could be set to their highest baud rate. The game controller is a Logitech USB game controller. The code used is below:

import pygame

import serial

sOut=""

ser=serial.Serial{

port='/dev/ttyAMA0',

baudrate=57600,

parity=serial.PARITY_NONE,

stopbits=serial.STOPBITS_ONE,

bytesize=serial.EIGHTBITS,

timeout=1

}

pygame.init()

done=False

while done==false:

joystick=pygame.joystick.joystick(0)

joystick.init()

#EVENT PROCESSING

for event in pygame.event.get():

if event.type==pygame.JOYAXISMOTION:

sOut="Axis:" + str(event.axis) + ";Value:" + str(event.value)

print(sOut)

ser.write(sOut)

ser.flush()

sOut=""

if event.type==pygame.JOYHATMOTION:

sOut="Hat: + str(event.hat) + ";Value:" + str(event.value)

print(sOut)

ser.write(sOut)

ser.flush()

sOut=""

if event.type==pygame.JOYBUTTONDOWN:

sOut="Button Down:" + str(event.button)

print(sOut)

ser.write(sOut)

ser.flush()

sOut=""

if event.button==8:

print("Quitting")

done=True

if event.type==pygame.JOYBUTTONUP:

sOut="Button Up:" + str(event.button)

print(sOut)

ser.write(sOut)

ser.flush()

sOut=""

ser.close()

pygame.quit()

Conclusion

The final build of this uses an auxiliary phone battery to power the Raspberry Pi, which powers the XBee and Logitech game controller. In a future project I will add a vacuum formed plastic cover that will enclose the Raspberry PI Zero, XBee Radio, and power supply, all attached to the game controller in one nice, neat bundle. This RC transmitter build makes it very easy to send control data to just about anything. In my next build I will send the data to a hexapod robot that I rescued from Goodwill. Hope you find this instructable helpful. Happy Building!

Wire the Raspberry Pi Zero to the XBee Radio

ZeroRC.png

As shown in the diagram, connect the Pi GPIO pin 1 (3.3v) to XBee pin 1. Connect the Pi GPIO pin 6 (Gnd) to XBee pin 10, and Pi GPIO Pin 8 (TX) to XBee pin 3 (Din). You can also use an XBee breakout board which will require you to connect the Pi GPIO pin 2 (5v) to the 5v pin on the breakout board