Go Down

Topic: Python error (Read 560 times) previous topic - next topic



I'm new to the world of Arduino, so when I found a cool project where the a USB joystick can control a servo via "python 2.7". Thinking that it would be eazy. I jumped right in.

Two weeks later, and countless "Google" searches. I'm still wonder what the hell is

AttributeError: 'module' object has no attribute 'joystick'

Anyone here have any idea how to resolve this?

I tried the following
- re-installing Python
- copying the file to Lib
- Different PC and ver of software

Any advice would be appreciated. [/font]


just  a thought but I usually get this message if I did not import all necessary modules. Do you have something like:

import pygame

in your code?

Is pygame in the python path. Take a look at:



Here the code in "red"  :-/

#!/usr/bin/env python
# joystick-servo.py
# created 19 December 2007
# copyleft 2007 Brian D. Wendt
# http://principialabs.com/
# code adapted from:
# http://svn.lee.org/swarm/trunk/mothernode/python/multijoy.py
# NOTE: This script requires the following Python modules:
#  pyserial - http://pyserial.sourceforge.net/
#  pygame   - http://www.pygame.org/
# Win32 users may also need:
#  pywin32  - http://sourceforge.net/projects/pywin32/

import serial
import pygame

# allow multiple joysticks
joy = []

# Arduino USB port address (try "COM5" on Win32)
usbport = "COM8"

# define usb serial connection to Arduino
ser = serial.Serial(usbport, 9600)

# handle joystick event
def handleJoyEvent(e):
   if e.type == pygame.JOYAXISMOTION:
       axis = "unknown"
       if (e.dict['axis'] == 0):
           axis = "X"

       if (e.dict['axis'] == 1):
           axis = "Y"

       if (e.dict['axis'] == 2):
           axis = "Throttle"

       if (e.dict['axis'] == 3):
           axis = "Z"

       if (axis != "unknown"):
           str = "Axis: %s; Value: %f" % (axis, e.dict['value'])
           # uncomment to debug
           #output(str, e.dict['joy'])

           # Arduino joystick-servo hack
           if (axis == "X"):
               pos = e.dict['value']
               # convert joystick position to servo increment, 0-180
               move = round(pos * 90, 0)
               if (move < 0):
                   servo = int(90 - abs(move))
                   servo = int(move + 90)
               # convert position to ASCII character
               servoPosition = chr(servo)
               # and send to Arduino over serial connection
               # uncomment to debug
               #print servo, servoPosition

   elif e.type == pygame.JOYBUTTONDOWN:
       str = "Button: %d" % (e.dict['button'])
       # uncomment to debug
       #output(str, e.dict['joy'])
       # Button 0 (trigger) to quit
       if (e.dict['button'] == 0):
           print "Bye!\n"

# print the joystick position
def output(line, stick):
   print "Joystick: %d; %s" % (stick, line)

# wait for joystick input
def joystickControl():
   while True:
       e = pygame.event.wait()
       if (e.type == pygame.JOYAXISMOTION or e.type == pygame.JOYBUTTONDOWN):

# main method
def main():
   # initialize pygame
   if not pygame.joystick.get_count():
       print "\nPlease connect a joystick and run again.\n"
   print "\n%d joystick(s) detected." % pygame.joystick.get_count()
   for i in range(pygame.joystick.get_count()):
       myjoy = pygame.joystick.Joystick(i)
       print "Joystick %d: " % (i) + joy.get_name()
   print "Depress trigger (button 0) to quit.\n"

   # run joystick listener loop

# allow use as a module or standalone script
if __name__ == "__main__":


If this code is from 2007 it's possible that Pygame was refactored into different submodules and pygame.joystick went away.  Maybe you can try installing a version of Pygame from 2007, though there's no guarantee that will work.

Either that or start digging into the documentation, see what happened to pygame.joystick (maybe it got buried into something like pygame.devices.joystick) and make the necessary modifications.

Just a thought...2007 is eons ago in the world of software libraries.

Check out our new shield: http://www.ruggedcircuits.com/html/gadget_shield.html


Go Up