3

With this Python script I am getting errors:

import webiopi
import math 

GPIO = webiopi.GPIO

# Left motor GPIOs
L1=4 
L2=17 


# Right motor GPIOs
R1=19 
R2=21 

def left_stop():
    GPIO.output(L1, GPIO.LOW)
    GPIO.output(L2, GPIO.LOW)

def left_forward():
    GPIO.output(L1, GPIO.HIGH)
    GPIO.output(L2, GPIO.LOW)

def left_backward():
    GPIO.output(L1, GPIO.LOW)
    GPIO.output(L2, GPIO.HIGH)

def right_stop():
    GPIO.output(R1, GPIO.LOW)
    GPIO.output(R2, GPIO.LOW)

def right_forward():
    GPIO.output(R1, GPIO.HIGH)
    GPIO.output(R2, GPIO.LOW)

def right_backward():
    GPIO.output(R1, GPIO.LOW)
    GPIO.output(R2, GPIO.HIGH)

def go_forward():
    left_forward()
    right_forward()

def go_backward():
    left_backward()
    right_backward()

def turn_left():
    left_backward()


def turn_right():
    left_forward()


def stop():
    left_stop()
    right_stop()

# Setup GPIOs
GPIO.setFunction(L1, GPIO.OUT)
GPIO.setFunction(L2, GPIO.OUT)

GPIO.setFunction(R1, GPIO.OUT)
GPIO.setFunction(R2, GPIO.OUT)

stop()

server = webiopi.Server(port=8000, login="webiopi", password="raspberry")


server.addMacro(go_forward)
server.addMacro(go_backward)
server.addMacro(turn_left)
server.addMacro(turn_right)
server.addMacro(stop)

webiopi.runLoop()

server.stop()

# Reset GPIO functions

GPIO.setFunction(L1, GPIO.IN)
GPIO.setFunction(L2, GPIO.IN)


GPIO.setFunction(R1, GPIO.IN)
GPIO.setFunction(R2, GPIO.IN)

On execution I'm getting this:

file "script.py", line 7, in <module>
GPIO = webiopi.GPIO

AttributeError : module object has no attribute 'GPIO'

What is going wrong?

goldilocks
  • 60,325
  • 17
  • 117
  • 234

2 Answers2

4

If you are using a Raspberry Pi 2 Model B, have you changed the reference to BCM2708 in your /WebIOPi-0.7.1/python/native directory?

If not, from the /WebIOPi-0.7.1 directory

  • cd into /python/native
  • Use your preferred editor to open the file named cpuinfo.c (For example, nano cpuinfo.c)
  • Page down until you see the reference for BCM2708 . If you see this, change it to BCM2709.
  • Save and exit.

In the same directory, open up the file named gpio.c (For example, nano gpio.c)

Look for the line that reads:

#define BCM2708_PERI_BASE 0x20000000

and modify this line to read

#define BCM2708_PERI_BASE 0x3f000000

Save and exit this file.

Head back up to your root WebIOPi directory

cd ..
cd ..

Now, run your setup file again with sudo ./setup.sh

This may or may not be your issue but I had to do this when upgrading to the RPI 2 and using WebIOPi.

Additional information: Edited to add more troubleshooting. If the above does not solve your issues, let's dig deeper.
From the command line, stop the WebIOPi service if it is running.
sudo /etc/init.d/webiopi stop Start the WebIOPi service again with verbose output and error notifications.
sudo webiopi -d -c /etc/webiopi/config
If you read the output you can generally find a lot of your problems here. I've found that your error can mean that WebIOPi is having the issue and not your script. Please reply back and let me know what the output is.

0

Hi I tried this Patch for Raspberry Pi 2. I have a Raspberry Pi 2 Model B and I followed the README manual and My WebIOPi actually works. This will definitely work according to my assumptions.

NOTE : This will work for WebIOPi-0.7.1 on a Raspberry Pi-2 Model B with 1 GB RAM

Shan-Desai
  • 1,541
  • 2
  • 13
  • 28