GPIO Zero allows you to create objects representing GPIO devices. As well as running it on a Raspberry Pi, you can also install GPIO Zero on a PC and create objects referencing GPIO pins on a Pi over the network.
To do this, you'll need to do a few things to get set up:
-
Enable Remote GPIO on the Pi in the Raspberry Pi Configuration Tool.
-
Run the pigpio daemon on the Pi:
sudo pigpiod
-
Get the Pi's IP address:
hostname -I
-
Install gpiozero and pigpio on your host machine (not necessary on Raspbian or x86 PIXEL):
- Install
pip
:sudo apt install python3-pip
- Install gpiozero and pigpio:
sudo pip3 install gpiozero pigpio
- Install
-
Run your Python environment with the
PIGPIO_ADDR
environment variable set, e.g one of the following:PIGPIO_ADDR=192.168.1.4 ipython3
PIGPIO_ADDR=192.168.1.4 python3
PIGPIO_ADDR=192.168.1.4 idle3 &
If running on a Raspberry Pi, you also need to set the pin factory to
PiGPIOPin
:GPIOZERO_PIN_FACTORY=PiGPIOPin PIGPIO_ADDR=192.168.1.4 ipython3
GPIOZERO_PIN_FACTORY=PiGPIOPin PIGPIO_ADDR=192.168.1.4 python3
GPIOZERO_PIN_FACTORY=PiGPIOPin PIGPIO_ADDR=192.168.1.4 idle3 &
-
Now use GPIO Zero like normal, and the devices will be controlled by GPIO pins on the remote Pi:
>>> from gpiozero import LED >>> led = LED(2) >>> led.blink() # LED on remote Pi's pin 2 now blinking
Alternatively, use pin objects as described in the pins documentation.
Yes - that works too. You can either run different scripts for each Pi, and use the environment variable as above, or to use them in the same script, use one as your "default" IP, and either create pin instances on the IP:
or I think you should be able to set the IP when changing the default pin factory in between creating devices, but I'm not certain on how this can be done (see #279).
See http://bennuttall.com/whats-new-gpio-zero-v1-3/ and http://gpiozero.readthedocs.io/en/latest/api_pins.html
An example:
Not the most thrilling example, but you get the idea!
Note: of course you can nest the pin reference so it's in one line without a separate pin object: