Compare commits

..

14 Commits

Author SHA1 Message Date
Mark Liffiton edc377261d
Add link to an alternative Python library
4 years ago
Mark Liffiton 93a6e40cd7 Bring in latest WiringPi for more hardware compatibility, Arch compile fix. Bump to 2.60.1.
5 years ago
Mark Liffiton 3db354710a Bump WiringPi version to 2.60 with RPi 4 support.
6 years ago
Mark Liffiton ece03e240c
Merge pull request #71 from Logout22/master
6 years ago
Martin Unzner 3315e8ec75 port soft tone example from WiringPi
6 years ago
Mark Liffiton 08cf3e43c1 Version bump to latest upstream WiringPi (2.46).
8 years ago
Mark Liffiton f91da63947
Add PyPI badge to README
8 years ago
Mark Liffiton e525fc5e5e Fix swig build (missing arg broke ISR callbacks), clean up unneeded makefile, bump version for release.
8 years ago
Mark Liffiton bd6b1c6a47 Fix PyFunc typemap.
8 years ago
Mark Liffiton 747527fda6 Convert README to .rst for PyPI.
8 years ago
Mark Liffiton db5caf3ccb
Add constants from wiringShift.h (closes #64)
8 years ago
Mark Liffiton ed4f8cb882 Update README.md
8 years ago
Mark Liffiton bafb611350 Merge pull request #60 from neuralpi/master
8 years ago
neuralassembly dfa3c420f2 Changing the protcol of submodule from HTTP to HTTPS
8 years ago

2
.gitmodules vendored

@ -1,3 +1,3 @@
[submodule "WiringPi"] [submodule "WiringPi"]
path = WiringPi path = WiringPi
url = http://github.com/wiringPi/WiringPi url = https://github.com/wiringPi/WiringPi

@ -1,5 +1,5 @@
recursive-include WiringPi *.h recursive-include WiringPi *.h
include README.md include README.rst
include LICENSE.txt include LICENSE.txt
include bindings.i include bindings.i
include constants.py include constants.py

@ -1,12 +0,0 @@
all: bindings
python setup.py build
bindings:
swig3.0 -python -threads wiringpi.i
clean:
rm -rf build/
rm -rf dist/
install:
sudo python setup.py install

@ -1,90 +0,0 @@
### Note
This is an unofficial port of Gordon's WiringPi library. Please do not email Gordon if you have issues, he will not be able to help.
For support, comments, questions, etc please join the WiringPi Discord channel: https://discord.gg/SM4WUVG
# WiringPi for Python
WiringPi: An implementation of most of the Arduino Wiring
functions for the Raspberry Pi
WiringPi implements new functions for managing IO expanders.
# Quick Install
`pip install wiringpi`
# Usage
import wiringpi
wiringpi.wiringPiSetup() # For sequential pin numbering, one of these MUST be called before using IO functions
# OR
wiringpi.wiringPiSetupSys() # For /sys/class/gpio with GPIO pin numbering
# OR
wiringpi.wiringPiSetupGpio() # For GPIO pin numbering
Setting up IO expanders (This example was tested on a quick2wire board with one digital IO expansion board connected via I2C):
wiringpi.mcp23017Setup(65,0x20)
wiringpi.pinMode(65,1)
wiringpi.digitalWrite(65,1)
**General IO:**
wiringpi.pinMode(6,1) # Set pin 6 to 1 ( OUTPUT )
wiringpi.digitalWrite(6,1) # Write 1 ( HIGH ) to pin 6
wiringpi.digitalRead(6) # Read pin 6
**Setting up a peripheral:**
WiringPi2 supports expanding your range of available "pins" by setting up a port expander. The implementation details of
your port expander will be handled transparently, and you can write to the additional pins ( starting from PIN_OFFSET >= 64 )
as if they were normal pins on the Pi.
wiringpi.mcp23017Setup(PIN_OFFSET,I2C_ADDR)
**Soft Tone**
Hook a speaker up to your Pi and generate music with softTone. Also useful for generating frequencies for other uses such as modulating A/C.
wiringpi.softToneCreate(PIN)
wiringpi.softToneWrite(PIN,FREQUENCY)
**Bit shifting:**
wiringpi.shiftOut(1,2,0,123) # Shift out 123 (b1110110, byte 0-255) to data pin 1, clock pin 2
**Serial:**
serial = wiringpi.serialOpen('/dev/ttyAMA0',9600) # Requires device/baud and returns an ID
wiringpi.serialPuts(serial,"hello")
wiringpi.serialClose(serial) # Pass in ID
**Full details at:**
http://www.wiringpi.com
# Manual Build
## Get/setup repo
```bash
git clone --recursive https://github.com/WiringPi/WiringPi-Python.git
cd WiringPi-Python
```
## Prerequisites
To rebuild the bindings
you **must** first have python-dev, python-setuptools and swig installed. Wiring Pi should also be installed system-wide
for access to the `gpio` tool.
```bash
sudo apt-get install python-dev python-setuptools swig wiringpi
```
## Build & install with
`sudo python setup.py install`
Or Python 3:
`sudo python3 setup.py install`

@ -0,0 +1,152 @@
Note
~~~~
This is an unofficial port of Gordon's WiringPi library. Please do not
email Gordon if you have issues, he will not be able to help.
For support, comments, questions, etc please join the WiringPi Discord
channel: https://discord.gg/SM4WUVG
WiringPi for Python
~~~~~~~~~~~~~~~~~~~
WiringPi: An implementation of most of the Arduino Wiring functions for
the Raspberry Pi.
WiringPi implements new functions for managing IO expanders.
**Alternative**
* `GPIO Zero <https://github.com/gpiozero/gpiozero>`_ is another Python library for controlling GPIO. It is installed by default in Raspberry Pi OS and is used in the `Raspberry Pi GPIO documentation <https://www.raspberrypi.org/documentation/usage/gpio/python/>`_.
Quick Install
=============
.. image:: https://badge.fury.io/py/wiringpi.svg
:alt: PyPI version badge
:target: https://pypi.org/project/wiringpi/
The library is packaged on PyPI and can be installed with pip:
``pip install wiringpi``
Usage
=====
.. code:: python
import wiringpi
# One of the following MUST be called before using IO functions:
wiringpi.wiringPiSetup() # For sequential pin numbering
# OR
wiringpi.wiringPiSetupSys() # For /sys/class/gpio with GPIO pin numbering
# OR
wiringpi.wiringPiSetupGpio() # For GPIO pin numbering
**General IO:**
.. code:: python
wiringpi.pinMode(6, 1) # Set pin 6 to 1 ( OUTPUT )
wiringpi.digitalWrite(6, 1) # Write 1 ( HIGH ) to pin 6
wiringpi.digitalRead(6) # Read pin 6
**Setting up a peripheral:**
WiringPi supports expanding your range of available "pins" by setting up
a port expander. The implementation details of your port expander will
be handled transparently, and you can write to the additional pins
(starting from PIN\_OFFSET >= 64) as if they were normal pins on the Pi.
.. code:: python
wiringpi.mcp23017Setup(PIN_OFFSET, I2C_ADDR)
This example was tested on a quick2wire board with one digital IO
expansion board connected via I2C:
.. code:: python
wiringpi.mcp23017Setup(65, 0x20)
wiringpi.pinMode(65, 1)
wiringpi.digitalWrite(65, 1)
**Soft Tone:**
Hook a speaker up to your Pi and generate music with softTone. Also
useful for generating frequencies for other uses such as modulating A/C.
.. code:: python
wiringpi.softToneCreate(PIN)
wiringpi.softToneWrite(PIN, FREQUENCY)
**Bit shifting:**
.. code:: python
wiringpi.shiftOut(1, 2, 0, 123) # Shift out 123 (b1110110, byte 0-255) to data pin 1, clock pin 2
**Serial:**
.. code:: python
serial = wiringpi.serialOpen('/dev/ttyAMA0', 9600) # Requires device/baud and returns an ID
wiringpi.serialPuts(serial, "hello")
wiringpi.serialClose(serial) # Pass in ID
**SPI:**
The ``wiringPiSPIDataRW()`` function needs to be passed a ``bytes``
object in Python 3. In Python 2, it takes a string. The following should
work in either Python 2 or 3:
.. code:: python
wiringpi.wiringPiSPISetup(channel, speed)
buf = bytes([your data here])
retlen, retdata = wiringpi.wiringPiSPIDataRW(0, buf)
Now, ``retlen`` will contain the number of bytes received/read by the
call. ``retdata`` will contain the data itself, and in Python 3, ``buf``
will have been modified to contain it as well (that won't happen in
Python 2, because then ``buf`` is a string, and strings are immutable).
**Full details of the API at:** http://www.wiringpi.com
Manual Build
============
Get/setup repo
--------------
.. code:: bash
git clone --recursive https://github.com/WiringPi/WiringPi-Python.git
cd WiringPi-Python
Don't forget the ``--recursive``; it is required to also pull in the
WiringPi C code from its own repository.
Prerequisites
-------------
To rebuild the bindings you **must** first have installed ``swig``,
``python-dev``, and ``python-setuptools`` (or their ``python3-``
equivalents). WiringPi should also be installed system-wide for access
to the ``gpio`` tool.
.. code:: bash
sudo apt-get install python-dev python-setuptools swig wiringpi
Build & install with
--------------------
``sudo python setup.py install``
Or Python 3:
``sudo python3 setup.py install``

@ -1 +1 @@
Subproject commit c9476436016c995d3327e4765a73de7848d4af56 Subproject commit e9821abdb4b4fe46a2ea9243471d339435fa7bde

@ -133,8 +133,8 @@ extern void softPwmWrite (int pin, int value) ;
extern void softPwmStop (int pin) ; extern void softPwmStop (int pin) ;
// Header file WiringPi/wiringPi/softServo.h // Header file WiringPi/wiringPi/softServo.h
//extern void softServoWrite (int pin, int value) ; extern void softServoWrite (int pin, int value) ;
//extern int softServoSetup (int p0, int p1, int p2, int p3, int p4, int p5, int p6, int p7) ; extern int softServoSetup (int p0, int p1, int p2, int p3, int p4, int p5, int p6, int p7) ;
// Header file WiringPi/wiringPi/softTone.h // Header file WiringPi/wiringPi/softTone.h
extern int softToneCreate (int pin) ; extern int softToneCreate (int pin) ;

@ -38,4 +38,10 @@ INT_EDGE_SETUP = 0;
INT_EDGE_FALLING = 1; INT_EDGE_FALLING = 1;
INT_EDGE_RISING = 2; INT_EDGE_RISING = 2;
INT_EDGE_BOTH = 3; INT_EDGE_BOTH = 3;
# Shifting (from wiringShift.h)
LSBFIRST = 0;
MSBFIRST = 1;
%} %}

@ -0,0 +1,16 @@
# Test of the softTone module in wiringPi
# Plays a scale out on pin 3 - connect pizeo disc to pin 3 & 0v
import wiringpi
PIN = 3
SCALE = [262, 294, 330, 349, 392, 440, 494, 525]
wiringpi.wiringPiSetup()
wiringpi.softToneCreate(PIN)
while True:
for idx in range(8):
print(idx)
wiringpi.softToneWrite(PIN, SCALE[idx])
wiringpi.delay(500)

@ -3,5 +3,5 @@ author = Philip Howard
author_email = phil@gadgetoid.com author_email = phil@gadgetoid.com
url = https://github.com/WiringPi/WiringPi-Python/ url = https://github.com/WiringPi/WiringPi-Python/
description = A python interface to WiringPi 2.0 library which allows for easily interfacing with the GPIO pins of the Raspberry Pi. Also supports i2c and SPI. description = A python interface to WiringPi 2.0 library which allows for easily interfacing with the GPIO pins of the Raspberry Pi. Also supports i2c and SPI.
long_description = file:README.md long_description = file:README.rst
license = LGPL license = LGPL

@ -9,8 +9,8 @@ from setuptools.command.sdist import sdist
from distutils.spawn import find_executable from distutils.spawn import find_executable
from glob import glob from glob import glob
sources = [] sources = glob('WiringPi/devLib/*.c')
sources += glob('WiringPi/wiringPi/*.c')
# If we have swig, use it. Otherwise, use the pre-generated # If we have swig, use it. Otherwise, use the pre-generated
# wrapper from the source distribution. # wrapper from the source distribution.
if find_executable('swig'): if find_executable('swig'):
@ -23,6 +23,12 @@ else:
" source distribution (on pypi) is available.") " source distribution (on pypi) is available.")
sys.exit(1) sys.exit(1)
try:
sources.remove('WiringPi/devLib/piFaceOld.c')
except ValueError:
# the file is already excluded in the source distribution
pass
# Fix so that build_ext runs before build_py # Fix so that build_ext runs before build_py
# Without this, wiringpi.py is generated too late and doesn't # Without this, wiringpi.py is generated too late and doesn't
@ -46,13 +52,15 @@ class sdist_ext_first(sdist):
_wiringpi = Extension( _wiringpi = Extension(
'_wiringpi', '_wiringpi',
include_dirs=['WiringPi/wiringPi','WiringPi/devLib'],
sources=sources, sources=sources,
libraries=['crypt', 'rt', 'wiringPi', 'wiringPiDev'] swig_opts=['-threads'],
extra_link_args=['-lcrypt', '-lrt']
) )
setup( setup(
name = 'wiringpi', name = 'wiringpi',
version = '2.44.4', version = '2.60.1',
ext_modules = [ _wiringpi ], ext_modules = [ _wiringpi ],
py_modules = ["wiringpi"], py_modules = ["wiringpi"],
install_requires=[], install_requires=[],

@ -6,49 +6,51 @@
#define PyString_FromStringAndSize PyBytes_FromStringAndSize #define PyString_FromStringAndSize PyBytes_FromStringAndSize
#endif #endif
#include "wiringPi.h" #include "WiringPi/wiringPi/wiringPi.h"
#include "wiringPiI2C.h" #include "WiringPi/wiringPi/wiringPiI2C.h"
#include "wiringPiSPI.h" #include "WiringPi/wiringPi/wiringPiSPI.h"
#include "wiringSerial.h" #include "WiringPi/wiringPi/wiringSerial.h"
#include "wiringShift.h" #include "WiringPi/wiringPi/wiringShift.h"
#include "drcSerial.h" #include "WiringPi/wiringPi/drcSerial.h"
#include "ads1115.h" #include "WiringPi/wiringPi/ads1115.h"
#include "max31855.h" #include "WiringPi/wiringPi/max31855.h"
#include "max5322.h" #include "WiringPi/wiringPi/max5322.h"
#include "mcp23008.h" #include "WiringPi/wiringPi/mcp23008.h"
#include "mcp23016.h" #include "WiringPi/wiringPi/mcp23016.h"
#include "mcp23016reg.h" #include "WiringPi/wiringPi/mcp23016reg.h"
#include "mcp23017.h" #include "WiringPi/wiringPi/mcp23017.h"
#include "mcp23s08.h" #include "WiringPi/wiringPi/mcp23s08.h"
#include "mcp23s17.h" #include "WiringPi/wiringPi/mcp23s17.h"
#include "mcp23x0817.h" #include "WiringPi/wiringPi/mcp23x0817.h"
#include "mcp23x08.h" #include "WiringPi/wiringPi/mcp23x08.h"
#include "mcp3002.h" #include "WiringPi/wiringPi/mcp3002.h"
#include "mcp3004.h" #include "WiringPi/wiringPi/mcp3004.h"
#include "mcp3422.h" #include "WiringPi/wiringPi/mcp3422.h"
#include "mcp4802.h" #include "WiringPi/wiringPi/mcp4802.h"
#include "pcf8574.h" #include "WiringPi/wiringPi/pcf8574.h"
#include "pcf8591.h" #include "WiringPi/wiringPi/pcf8591.h"
#include "sn3218.h" #include "WiringPi/wiringPi/sn3218.h"
#include "softPwm.h" #include "WiringPi/wiringPi/softPwm.h"
#include "softTone.h" #include "WiringPi/wiringPi/softServo.h"
#include "sr595.h" #include "WiringPi/wiringPi/softTone.h"
#include "bmp180.h" #include "WiringPi/wiringPi/sr595.h"
#include "drcNet.h" #include "WiringPi/wiringPi/bmp180.h"
#include "ds18b20.h" #include "WiringPi/wiringPi/drcNet.h"
#include "htu21d.h" #include "WiringPi/wiringPi/ds18b20.h"
#include "pseudoPins.h" #include "WiringPi/wiringPi/htu21d.h"
#include "rht03.h" #include "WiringPi/wiringPi/pseudoPins.h"
#include "wpiExtensions.h" #include "WiringPi/wiringPi/rht03.h"
#include "ds1302.h" #include "WiringPi/wiringPi/wpiExtensions.h"
#include "gertboard.h" #include "WiringPi/devLib/ds1302.h"
#include "lcd128x64.h" #include "WiringPi/devLib/font.h"
#include "lcd.h" #include "WiringPi/devLib/gertboard.h"
#include "maxdetect.h" #include "WiringPi/devLib/lcd128x64.h"
#include "piGlow.h" #include "WiringPi/devLib/lcd.h"
#include "piNes.h" #include "WiringPi/devLib/maxdetect.h"
#include "scrollPhat.h" #include "WiringPi/devLib/piGlow.h"
#include "piFace.h" #include "WiringPi/devLib/piNes.h"
#include "WiringPi/devLib/scrollPhat.h"
#include "WiringPi/devLib/piFace.h"
%} %}
%apply unsigned char { uint8_t }; %apply unsigned char { uint8_t };
@ -58,12 +60,12 @@
}; };
// Grab a Python function object as a Python object. // Grab a Python function object as a Python object.
%typemap(in) PyObject *pyfunc { %typemap(in) PyObject *PyFunc {
if (!PyCallable_Check($1)) { if (!PyCallable_Check($input)) {
PyErr_SetString(PyExc_TypeError, "Need a callable object!"); PyErr_SetString(PyExc_TypeError, "Need a callable object!");
return NULL; return NULL;
} }
$1 = $2; $1 = $input;
} }
%{ %{

Loading…
Cancel
Save