4.9 KiB
GPIO Module
Since | Origin / Contributor | Maintainer | Source |
---|---|---|---|
2016-11-26 | Johny Mattsson | Johny Mattsson | gpio.c |
This module provides access to the GPIO (General Purpose Input/Output) subsystem.
GPIO Overview
The ESP32 chip features 40 physical GPIO pads. Some GPIO pads cannot be used or do not have the corresponding pin on the chip package (refer to the ESP32 Datasheet).
- GPIO6-11 are usually used for SPI flash.
- GPIO20, GPIO24, and GPIO28-31 are not available as pins.
- GPIO34-39 can only be set as input mode and do not have software pullup or pulldown functions.
gpio.config()
Configure GPIO mode for one or more pins.
Syntax
gpio.config({
gpio=x || {x, y, z},
dir=gpio.IN || gpio.OUT || gpio.IN_OUT,
opendrain= 0 || 1 -- only applicable to output modes
pull= gpio.FLOATING || gpio.PULL_UP || gpio.PULL_DOWN || gpio.PULL_UP_DOWN
}, ...)
Parameters
List of configuration tables:
gpio
one or more (given as list) pins, see GPIO Overviewdir
direction, one ofgpio.IN
gpio.OUT
gpio.IN_OUT
opendrain
1 enables opendrain mode, defaults to 0 if omittedpull
enable pull-up and -down resistors, one ofgpio.FLOATING
disables both pull-up and -downgpio.PULL_UP
enables pull-up and disables pull-downgpio.PULL_DOWN
enables pull-down and disables pull-upgpio.PULL_UP_DOWN
enables both pull-up and -down
Returns
nil
Example
gpio.config( { gpio={19,21}, dir=gpio.OUT }, { gpio=22, dir=gpio.IN, pull=gpio.PULL_UP })
gpio.read()
Read digital GPIO pin value.
Syntax
gpio.read(pin)
Parameters
pin
pin to read, see GPIO Overview
Returns
0 = low, 1 = high
gpio.set_drive()
Set the drive strength of a given GPIO pin. The higher the drive strength, the more current can be sourced/sunk from the pin. The exact maximum depends on the power domain of the pin and how much current other pins in that domain are consuming.
Syntax
gpio.set_drive(pin, strength)
Parameters
pin
, a valid GPIO pin number.strength
the drive strength to set, one ofgpio.DRIVE_0
weakest drive strengthgpio.DRIVE_1
stronger drive strengthgpio.DRIVE_2
default drive strengthgpio.DRIVE_DEFAULT
default drive strength (same asDRIVE_2
)gpio.DRIVE_3
maximum drive strength
Returns
nil
Example
gpio.set_drive(4, gpio.DRIVE_3)
gpio.trig()
Establish or clear a callback function to run on interrupt for a GPIO.
Syntax
gpio.trig(pin [, type [, callback]])
Parameters
pin
, see GPIO Overviewtype
trigger type, one ofgpio.INTR_DISABLE
ornil
to disable interrupts on this pin (in which casecallback
is ignored and should benil
or omitted)gpio.INTR_UP
for trigger on rising edgegpio.INTR_DOWN
for trigger on falling edgegpio.INTR_UP_DOWN
for trigger on both edgesgpio.INTR_LOW
for trigger on low levelgpio.INTR_HIGH
for trigger on high level
callback
optional function to be called when trigger fires. Ifnil
or omitted (andtype
is notgpio.INTR_DISABLE
) then any previously-set callback will continue to be used. Parameters are:pin
level
Returns
nil
gpio.wakeup()
Configure whether the given pin should trigger wake up from light sleep initiated by node.sleep()
.
Note that the level
specified here overrides the interrupt type set by gpio.trig()
, and wakeup only supports the level-triggered options gpio.INTR_LOW
and gpio.INTR_HIGH
. Therefore it is not possible to configure an edge-triggered GPIO callback in combination with wake from light sleep, at least not without reconfiguring the pin immediately before and after the call to node.sleep()
.
The call to node.sleep()
must additionally include gpio = true
in the options
in order for any GPIO to trigger wakeup.
Syntax
gpio.wakeup(pin, level)
Parameters
pin
, see GPIO Overviewlevel
wake-up level, one ofgpio.INTR_NONE
changes to the level of this pin will not trigger wake from light sleepgpio.INTR_LOW
if this pin is low it should trigger wake from light sleepgpio.INTR_HIGH
if this pin is high it should trigger wake from light sleep
Returns
nil
See also
gpio.write()
Set digital GPIO pin value.
Syntax
gpio.write(pin, level)
Parameters
pin
pin to write, see GPIO Overviewlevel
1 or 0
Returns
nil