blob: e5490d6cb0799e5053372eea68b8cd0deffdf948 [file] [log] [blame]
Gordon Hendersonf6c40cb2015-09-24 22:35:31 +01001.TH GPIO 1 "September 2015" wiringPi "Command-Line access to Raspberry Pi's GPIO"
Gordon Hendersonbf0ad862012-08-16 15:04:43 +01002
3.SH NAME
Gordon Hendersonda384432013-05-13 19:43:26 +01004gpio \- Command-line access to Raspberry Pi's GPIO
Gordon Hendersonbf0ad862012-08-16 15:04:43 +01005
6.SH SYNOPSIS
Gordon Hendersonbf0ad862012-08-16 15:04:43 +01007.B gpio
Gordon Hendersonf99ffed2012-08-19 15:12:45 +01008.B \-v
9.PP
Gordon Hendersonbf0ad862012-08-16 15:04:43 +010010.B gpio
Gordon Hendersonda384432013-05-13 19:43:26 +010011.B [ \-g | \-1 ]
Gordon Henderson70fa99a2017-02-27 19:51:32 +000012.B mode/read/write/aread/awrite/wb/pwm/clock/toggle/blink ...
Gordon Hendersonda384432013-05-13 19:43:26 +010013.PP
14.B gpio
15.B [ \-x extension:params ]
Gordon Henderson70fa99a2017-02-27 19:51:32 +000016.B mode/read/write/aread/awrite/pwm/toggle/blink ...
Gordon Hendersonf99ffed2012-08-19 15:12:45 +010017.PP
Gordon Hendersonbf0ad862012-08-16 15:04:43 +010018.B gpio
Gordon Hendersonf99ffed2012-08-19 15:12:45 +010019.B [ \-p ]
Gordon Henderson70fa99a2017-02-27 19:51:32 +000020.B read/write/toggle/blink
Gordon Hendersonf99ffed2012-08-19 15:12:45 +010021.B ...
22.PP
Gordon Hendersonbf0ad862012-08-16 15:04:43 +010023.B gpio
Gordon Hendersoneb1fc2c2015-01-30 18:14:49 +000024.B readall
Gordon Henderson183c5a62012-10-21 15:25:16 +010025.PP
26.B gpio
Gordon Hendersonf99ffed2012-08-19 15:12:45 +010027.B unexportall/exports
28.PP
29.B gpio
30.B export/edge/unexport
31.B ...
32.PP
33.B gpio
Gordon Hendersonda384432013-05-13 19:43:26 +010034.B wfi
35.B ...
36.PP
37.B gpio
Gordon Hendersonf99ffed2012-08-19 15:12:45 +010038.B drive
39group value
40.PP
41.B gpio
Gordon Hendersondf453882014-07-17 22:23:57 +010042.B usbp
43high | low
44.PP
45.B gpio
Gordon Hendersonf99ffed2012-08-19 15:12:45 +010046.B pwm-bal/pwm-ms
47.PP
48.B gpio
49.B pwmr
50range
51.PP
52.B gpio
Gordon Hendersone8f62582013-01-28 13:00:47 +000053.B load \ i2c/spi ...
Gordon Henderson99095e32012-08-27 20:56:14 +010054.PP
55.B gpio
56.B gbr
57channel
58.PP
59.B gpio
60.B gbw
61channel value
Gordon Hendersonbf0ad862012-08-16 15:04:43 +010062
63.SH DESCRIPTION
64
65.B GPIO
Gordon Henderson86a5c682012-10-02 14:32:12 +010066is a swiss army knife of a command line tool to allow the user easy
Gordon Henderson99095e32012-08-27 20:56:14 +010067access to the GPIO pins on the Raspberry Pi and the SPI A/D and D/A
Gordon Henderson86a5c682012-10-02 14:32:12 +010068converters on the Gertboard. It's designed for simple testing and
Gordon Henderson99095e32012-08-27 20:56:14 +010069diagnostic purposes, but can be used in shell scripts for general if
70somewhat slow control of the GPIO pins.
Gordon Hendersonbf0ad862012-08-16 15:04:43 +010071
Gordon Henderson13bbba72013-01-14 11:31:56 +000072It can also control the IO's on the PiFace IO board and load the SPI and I2C
73kernel modules if required.
74
Gordon Hendersonbf0ad862012-08-16 15:04:43 +010075Additionally, it can be used to set the exports in the \fI/sys/class/gpio\fR
76system directory to allow subsequent programs to use the \fR/sys/class/gpio\fR
77interface without needing to be run as root.
78
79.SH OPTIONS
80
81.TP
82.B \-v
Gordon Henderson183c5a62012-10-21 15:25:16 +010083Output the current version including the board revision of the Raspberry Pi.
Gordon Hendersonbf0ad862012-08-16 15:04:43 +010084
85.TP
86.B \-g
87Use the BCM_GPIO pins numbers rather than wiringPi pin numbers.
Gordon Hendersonda384432013-05-13 19:43:26 +010088\fINote:\fR The BCM_GPIO pin numbers are always used with the
Gordon Henderson13bbba72013-01-14 11:31:56 +000089export and edge commands.
Gordon Hendersonbf0ad862012-08-16 15:04:43 +010090
91.TP
Gordon Hendersonda384432013-05-13 19:43:26 +010092.B \-1
93Use the physical pin numbers rather than wiringPi pin numbers.
94\fINote:\fR that this applies to the P1 connector only. It is not possible to
95use pins on the Revision 2 P5 connector this way, and as with \-g the
96BCM_GPIO pin numbers are always used with the export and edge commands.
97
98.TP
99.B \-x extension
100This causes the named extension to be initialised. Extensions
101comprise of a name (e.g. mcp23017) followed by a colon, then the
102pin-base, then more optional parameters depending on the extension type.
103See the web page on http://wiringpi.com/the-gpio-utility/
104
105.TP
Gordon Hendersonbf0ad862012-08-16 15:04:43 +0100106.B \-p
Gordon Hendersonda384432013-05-13 19:43:26 +0100107Use the PiFace interface board and its corresponding pin numbers. The PiFace
108will always appear at pin number 200 in the gpio command. You can assign any
109pin numbers you like in your own programs though.
Gordon Hendersonbf0ad862012-08-16 15:04:43 +0100110
111.TP
Gordon Henderson183c5a62012-10-21 15:25:16 +0100112.B read <pin>
Gordon Hendersonbf0ad862012-08-16 15:04:43 +0100113Read the digital value of the given pin and print 0 or 1 to represent the
114respective logic levels.
115
116.TP
Gordon Henderson183c5a62012-10-21 15:25:16 +0100117.B write <pin> <value>
Gordon Henderson25e4ec52012-12-06 21:49:41 +0000118Write the given value (0 or 1) to the pin. You need to set the pin
119to output mode first.
120
121.TP
Gordon Henderson70fa99a2017-02-27 19:51:32 +0000122.B toggle <pin>
123Changes the state of a GPIO pin; 0 to 1, or 1 to 0.
124
125Note unlike the blink command, the pin must be in output mode first.
126
127.TP
128.B blink <pin>
129Blinks the given pin on/off. Press Control-C to exit.
130
131Note: This command explicitly sets the pin to output mode.
132
133.TP
Gordon Henderson05e2f672014-05-20 11:43:07 +0100134.B aread <pin>
Gordon Henderson70fa99a2017-02-27 19:51:32 +0000135Read the analog value of the given pin. This needs to be used in
Gordon Henderson05e2f672014-05-20 11:43:07 +0100136conjunction with a -x flag to add in an extension that handles analog
Gordon Henderson70fa99a2017-02-27 19:51:32 +0000137inputs.
Gordon Henderson05e2f672014-05-20 11:43:07 +0100138
139e.g. gpio -x mcp3002:200:0 aread 200
140
141will read the first analog input on an mcp3002 SPI ADC chip.
142
143.TP
144.B awrite <pin> <value>
145Write the analog value to the given pin. This needs to be used in
146conjunction with a -x flag to add in an extension that handles analog
Gordon Henderson70fa99a2017-02-27 19:51:32 +0000147inputs.
Gordon Henderson05e2f672014-05-20 11:43:07 +0100148
149e.g. gpio -x mcp4802:200:0 awrite 200 128
150
151will write the value 128 to the first DAC port on an mcp4802 chip on
152the Pi's SPI bus 0.
153
154
155.TP
Gordon Henderson25e4ec52012-12-06 21:49:41 +0000156.B wb <value>
157Write the given byte to the 8 main GPIO pins. You can prefix it with 0x
158to specify a hexadecimal number. You need to set pins to output mode
159first.
Gordon Hendersonbf0ad862012-08-16 15:04:43 +0100160
161.TP
Gordon Henderson183c5a62012-10-21 15:25:16 +0100162.B readall
163Output a table of all GPIO pins values. The values represent the actual values read
164if the pin is in input mode, or the last value written if the pin is in output
165mode.
166
Gordon Henderson348bc732013-05-25 13:02:02 +0100167The readall command is usable with an extension module (via the -x parameter),
168but it's unable to determine pin modes or states, so will perform both a
169digital and analog read on each pin in-turn.
170
Gordon Henderson183c5a62012-10-21 15:25:16 +0100171.TP
172.B pwm <pin> <value>
Gordon Henderson56c77b52013-02-01 20:19:22 +0000173Write a PWM value (0-1023) to the given pin. The pin needs to be put
174into PWM mode first.
175
176.TP
177.B clock <pin> <frequency>
178Set the output frequency on the given pin. The pin needs to be put into
179clock mode first.
Gordon Hendersonbf0ad862012-08-16 15:04:43 +0100180
181.TP
Gordon Henderson183c5a62012-10-21 15:25:16 +0100182.B mode <pin> <mode>
Gordon Hendersonbf0ad862012-08-16 15:04:43 +0100183Set a pin into \fIinput\fR, \fIoutput\fR or \fIpwm\fR mode. Can also
184use the literals \fIup\fR, \fIdown\fR or \fItri\fR to set the internal
185pull-up, pull-down or tristate (off) controls.
186
Gordon Hendersoneb1fc2c2015-01-30 18:14:49 +0000187The ALT modes can also be set using \fIalt0\fR, \fIalt1\fR, ... \fIalt5\fR.
188
Gordon Hendersonbf0ad862012-08-16 15:04:43 +0100189.TP
Gordon Hendersonf99ffed2012-08-19 15:12:45 +0100190.B unexportall
191Un-Export all the GPIO pins in the /sys/class/gpio directory.
192
193.TP
194.B exports
195Print a list (if any) of all the exported GPIO pins and their current values.
196
197.TP
Gordon Hendersonbf0ad862012-08-16 15:04:43 +0100198.B export
199Export a GPIO pin in the \fI/sys/class/gpio\fR directory. Use like the
Gordon Henderson72b2af22015-02-03 14:53:32 +0000200mode command above however only \fIin\fR, \fIout\fR, \fIhigh\fR and
201\fRlow\fR are supported at this time. Note that the pin number is the
202\fBBCM_GPIO\fR number and not the wiringPi number. The \fIhigh\fR and
203\fIlow\fR commands pre-set the output value at the same time as the
204export to output mode.
Gordon Hendersonbf0ad862012-08-16 15:04:43 +0100205
206Once a GPIO pin has been exported, the \fBgpio\fR program changes the
207ownership of the \fI/sys/class/gpio/gpioX/value\fR and if present in
208later kernels, the \fI/sys/class/gpio/gpioX/edge\fR pseudo files to
209that of the user running the \fBgpio\fR program. This means that you
210can have a small script of gpio exports to setup the gpio pins as your
211program requires without the need to run anything as root, or with the
212sudo command.
213
214.TP
215.B edge
216This exports a GPIO pin in the \fI/sys/class/gpio\fR directory, set
217the direction to input and set the edge interrupt method to \fInone\fR,
218\fIrising\fR, \fIfalling\fR or \fIboth\fR. Use like the export command
219above and note that \fBBCM_GPIO\fR pin number is used not not wiringPi pin
220numbering.
221
Gordon Henderson86a5c682012-10-02 14:32:12 +0100222Like the export commands above, ownership is set to that of the
Gordon Hendersonbf0ad862012-08-16 15:04:43 +0100223calling user, allowing subsequent access from user programs without
224requiring root/sudo.
225
226.TP
227.B unexport
228Un-Export a GPIO pin in the /sys/class/gpio directory.
229
230.TP
Gordon Hendersonda384432013-05-13 19:43:26 +0100231.B wfi <pin> <mode>
232This set the given pin to the supplied interrupt mode: rising, falling
233or both then waits for the interrupt to happen. It's a non-busy wait,
234so does not consume and CPU while it's waiting.
235
236.TP
Gordon Hendersonf99ffed2012-08-19 15:12:45 +0100237.B drive
238group value
239
240Change the pad driver value for the given pad group to the supplied drive
241value. Group is 0, 1 or 2 and value is 0-7. Do not use unless you are
242absolutely sure you know what you're doing.
Gordon Hendersonbf0ad862012-08-16 15:04:43 +0100243
244.TP
Gordon Hendersondf453882014-07-17 22:23:57 +0100245.B usbp
246high | low
247
248Change the USB current limiter to high (1.2 amps) or low (the default, 600mA)
Gordon Henderson70fa99a2017-02-27 19:51:32 +0000249This is only applicable to the Model B+ and the Model B, v2.
Gordon Hendersondf453882014-07-17 22:23:57 +0100250
251.TP
Gordon Hendersonf99ffed2012-08-19 15:12:45 +0100252.B pwm-bal/pwm-ms
253Change the PWM mode to balanced (the default) or mark:space ratio (traditional)
254
255.TP
256.B pwmr
257Change the PWM range register. The default is 1024.
258
259.TP
Gordon Hendersone8f62582013-01-28 13:00:47 +0000260.B load i2c [baudrate]
261This loads the i2c or drivers into the kernel and changes the permissions
262on the associated /dev/ entries so that the current user has access to
Gordon Henderson348bc732013-05-25 13:02:02 +0100263them. Optionally it will set the I2C baudrate to that supplied in Kb/sec
264(or as close as the Pi can manage) The default speed is 100Kb/sec.
Gordon Hendersone8f62582013-01-28 13:00:47 +0000265
Gordon Hendersonf6c40cb2015-09-24 22:35:31 +0100266Note: On recent kernels with the device tree enabled you should use the
267raspi-config program to load/unload the I2C device at boot time.
Gordon Hendersoneb1fc2c2015-01-30 18:14:49 +0000268
Gordon Hendersone8f62582013-01-28 13:00:47 +0000269.TP
Gordon Hendersoneb1fc2c2015-01-30 18:14:49 +0000270.B load spi
Gordon Henderson98bcb202013-02-07 21:53:49 +0000271This loads the spi drivers into the kernel and changes the permissions
Gordon Hendersone8f62582013-01-28 13:00:47 +0000272on the associated /dev/ entries so that the current user has access to
Gordon Hendersoneb1fc2c2015-01-30 18:14:49 +0000273them. It used to have the ability to change the buffer size from the
Gordon Hendersond7950662015-09-30 16:11:42 +0100274default of 4096 bytes to an arbitrary value, however for some time the
Gordon Hendersoneb1fc2c2015-01-30 18:14:49 +0000275Pi Foundation have compiled the SPI device driver into the kernel and
276this has fixed the buffer size. The way to change it now is to edit
277the /boot/cmdline.txt file and add on spdev.bufsiz=8192 to set it to
278e.g. 8192 bytes then reboot.
279
Gordon Hendersonf6c40cb2015-09-24 22:35:31 +0100280Note: On recent kernels with the device tree enabled you should use the
281raspi-config program to load/unload the SPI device at boot time.
Gordon Hendersonf99ffed2012-08-19 15:12:45 +0100282
Gordon Henderson99095e32012-08-27 20:56:14 +0100283.TP
284.B gbr
285channel
286
Gordon Henderson86a5c682012-10-02 14:32:12 +0100287This reads the analog to digital converter on the Gertboard on the given
Gordon Henderson99095e32012-08-27 20:56:14 +0100288channel. The board jumpers need to be in-place to do this operation.
289
290.TP
291.B gbw
292channel value
293
294This writes the supplied value to the output channel on the Gertboards
Gordon Henderson86a5c682012-10-02 14:32:12 +0100295SPI digital to analogue converter.
Gordon Henderson99095e32012-08-27 20:56:14 +0100296The board jumpers need to be in-place to do this operation.
297
Gordon Hendersonbf0ad862012-08-16 15:04:43 +0100298
Gordon Hendersoneb1fc2c2015-01-30 18:14:49 +0000299.SH "WiringPi vs. BCM_GPIO Pin numbering vs. Physical pin numbering"
Gordon Hendersonbf0ad862012-08-16 15:04:43 +0100300
301.PP
Gordon Hendersoneb1fc2c2015-01-30 18:14:49 +0000302The quickest way to get a list of the pin differences is to run the command
303.TP
304gpio readall
Gordon Henderson13bbba72013-01-14 11:31:56 +0000305
Gordon Hendersonbf0ad862012-08-16 15:04:43 +0100306.SH FILES
307
308.TP 2.2i
309.I gpio
310executable
311
312.SH EXAMPLES
313.TP 2.2i
314gpio mode 4 output # Set pin 4 to output
315.PP
316gpio -g mode 23 output # Set GPIO pin 23 to output (same as WiringPi pin 4)
317.PP
318gpio mode 1 pwm # Set pin 1 to PWM mode
319.PP
320gpio pwm 1 512 # Set pin 1 to PWM value 512 - half brightness
321.PP
322gpio export 17 out # Set GPIO Pin 17 to output
323.PP
324gpio export 0 in # Set GPIO Pin 0 (SDA0) to input.
325.PP
326gpio -g read 0 # Read GPIO Pin 0 (SDA0)
327
328.SH "NOTES"
329
330When using the \fIexport\fR, \fIedge\fR or \fIunexport\fR commands, the
331pin numbers are \fBalways\fR native BCM_GPIO numbers and never wiringPi
332pin numbers.
333
Gordon Hendersond7950662015-09-30 16:11:42 +0100334As of kernels 4.1.7, a user-level GPIO access mechanism is available,
335however wiringPi will not use this by default - because at this time
336there appears to be issues when trying to program the PWM or clock output
337hardware. If you can live without PWM or GPIO clocks and you want to use
338the GPIO from a non-root program, then you need to make sure that the
339module \fIbcm2835_gpiomem\fR is loaded at boot time. This should happen
340automatically when you enable the device tree in raspi-config. You may
341also need some additional information in /etc/udev/rules.d/ to change the
342mode and ownership of the /dev/gpiomem file. Finally, you need to set
343the environment variable \fIWIRINGPI_GPIOMEM\fR. This will go-away
344in future releases once the /dev/gpiomem interface is fully operational.
345
Gordon Hendersonbf0ad862012-08-16 15:04:43 +0100346.SH "SEE ALSO"
347
348.LP
349WiringPi's home page
350.IP
Gordon Hendersonda384432013-05-13 19:43:26 +0100351http://wiringpi.com/
Gordon Hendersonbf0ad862012-08-16 15:04:43 +0100352
353.SH AUTHOR
354
355Gordon Henderson
356
357.SH "REPORTING BUGS"
358
Gordon Henderson183c5a62012-10-21 15:25:16 +0100359Please report bugs to <projects@drogon.net>
Gordon Hendersonbf0ad862012-08-16 15:04:43 +0100360
361.SH COPYRIGHT
362
Gordon Hendersoneb1fc2c2015-01-30 18:14:49 +0000363Copyright (c) 2012-2015 Gordon Henderson
Gordon Hendersonbf0ad862012-08-16 15:04:43 +0100364This is free software; see the source for copying conditions. There is NO
365warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Gordon Henderson183c5a62012-10-21 15:25:16 +0100366
367.SH TRADEMARKS AND ACKNOWLEDGEMENTS
368
Gordon Hendersone8f62582013-01-28 13:00:47 +0000369Raspberry Pi is a trademark of the Raspberry Pi Foundation. See
370http://raspberrypi.org/ for full details.