HiPi
Perl Modules for Raspberry Pi
Version 0.91 - released 25 February 2024

HiPi::Wiring

This module is a thin wrapper around the excellent WiringPi library by Gordon Henderson. You can see full description and examples of using the library at:

https://projects.drogon.net/raspberry-pi/wiringpi/

The HiPi::Wiring module is built against the installed distribution of wiringpi from the standard Raspbian repositories.

Exported Constants

use HiPi::Wiring qw( :wiring );

The following constants are exported by this module under the :wiring tag

tag :wiring

    WPI_NUM_PINS
    WPI_MODE_PINS
    WPI_MODE_GPIO
    WPI_MODE_GPIO_SYS
    WPI_MODE_PIFACE
    WPI_INPUT 
    WPI_OUTPUT
    WPI_PWM_OUTPUT
    WPI_LOW
    WPI_HIGH
    WPI_PUD_OFF
    WPI_PUD_DOWN
    WPI_PUD_UP
    WPI_PWM_MODE_MS
    WPI_PWM_MODE_BAL
    WPI_NES_RIGHT
    WPI_NES_LEFT
    WPI_NES_DOWN
    WPI_NES_UP
    WPI_NES_START
    WPI_NES_SELECT
    WPI_NES_B
    WPI_NES_A

You can also import constants for 'wiringPi' pin numbers from the main
Constant module. These map 'Wiring' pin numbers to the BCM pin number
equivalent.

e.g. WPI_PIN_1 maps to GPIO_18 or Raspberry Pi pin 12.

use HiPi::Constant qw( :wiring );

imports: 

    WPI_PIN_0
    WPI_PIN_1
    WPI_PIN_2
    WPI_PIN_3
    WPI_PIN_4
    WPI_PIN_5
    WPI_PIN_6
    WPI_PIN_7
    WPI_PIN_8
    WPI_PIN_9
    WPI_PIN_10
    WPI_PIN_11
    WPI_PIN_12
    WPI_PIN_13
    WPI_PIN_14
    WPI_PIN_15
    WPI_PIN_16
    WPI_PIN_17
    WPI_PIN_18
    WPI_PIN_19
    WPI_PIN_20
    WPI_PIN_21
    WPI_PIN_22
    WPI_PIN_23
    WPI_PIN_24
    WPI_PIN_25
    WPI_PIN_26
    WPI_PIN_27
    WPI_PIN_28
    WPI_PIN_29
    WPI_PIN_30
    WPI_PIN_31

Wrapped Methods from the WiringPi Libary

    HiPi::Wiring::wiringPiSetup()
    HiPi::Wiring::wiringPiSetupSys()
    HiPi::Wiring::wiringPiSetupGpio()
    HiPi::Wiring::wiringPiSetupPiFace()
    HiPi::Wiring::piBoardRev()
    HiPi::Wiring::wpiPinToGpio(wpiPin)
    HiPi::Wiring::wpiPin()
    HiPi::Wiring::wiringPiSetupPiFaceForGpioProg()
    HiPi::Wiring::pinMode(pin, mode)
    HiPi::Wiring::pullUpDnControl(pin, pud)
    HiPi::Wiring::digitalWrite(pin, value)
    HiPi::Wiring::digitalWriteByte(value)
    HiPi::Wiring::pwmWrite(pin, value)
    HiPi::Wiring::setPadDrive(group, value)
    HiPi::Wiring::digitalRead(pin)
    HiPi::Wiring::delayMicroseconds(howLong)
    HiPi::Wiring::pwmSetMode(mode)
    HiPi::Wiring::pwmSetRange(range)
    HiPi::Wiring::pwmSetClock(divisor)
    HiPi::Wiring::waitForInterrupt(pin, mS)
    
    HiPi::Wiring::piLock(key)
    HiPi::Wiring::piUnlock(key)
    
    HiPi::Wiring::piHiPri(pri)
    
    HiPi::Wiring::delay(howLong)
    HiPi::Wiring::millis()
    
    HiPi::Wiring::gertboardAnalogWrite(chan, value)
    HiPi::Wiring::gertboardAnalogRead(chan)
    HiPi::Wiring::gertboardSPISetup()
    
    HiPi::Wiring::lcdHome(fd)
    HiPi::Wiring::lcdClear(fd)
    HiPi::Wiring::lcdPosition(fd, x, y)
    HiPi::Wiring::lcdPutchar(fd, data)
    HiPi::Wiring::lcdPuts(fd, putstring)
    HiPi::Wiring::lcdInit (rows, cols, bits, rs, strb, d0, d1, d2, d3, d4, d5, d6, d7)
    
    HiPi::Wiring::setupNesJoystick (dPin, cPin, lPin)
    HiPi::Wiring::readNesJoystick (joystick)
        
    HiPi::Wiring::softPwmCreate(pin, value, range)
    HiPi::Wiring::softPwmWrite(pin, value)
    
    HiPi::Wiring::softServoWrite(pin, value)
    HiPi::Wiring::softServoSetup(p0, p1, p2, p3, p4, p5, p6, p7)
    
    HiPi::Wiring::softToneCreate(pin)
    HiPi::Wiring::softToneWrite(pin, frewq)
 
    HiPi::Wiring::wiringPiI2CRead(fd)
    HiPi::Wiring::wiringPiI2CReadReg8(fd, reg)
    HiPi::Wiring::wiringPiI2CReadReg16(fd, reg)
    HiPi::Wiring::wiringPiI2CWrite(fd, data)
    HiPi::Wiring::wiringPiI2CWriteReg8(fd, reg, data)

    HiPi::Wiring::wiringPiI2CWriteReg16(fd, reg, data)
    HiPi::Wiring::wiringPiI2CSetup(devId)
 
    HiPi::Wiring::wiringPiSPIGetFd(channel)
    HiPi::Wiring::wiringPiSPIDataRW(channel, data, len)

    HiPi::Wiring::wiringPiSPISetup(channel, speed)
 
    HiPi::Wiring::serialOpen(device, baud)
    HiPi::Wiring::serialClose(fd)
    HiPi::Wiring::serialFlush(fd)
    HiPi::Wiring::serialPutchar(fd, c)
    HiPi::Wiring::serialPuts(fd, s)
    HiPi::Wiring::serialDataAvail(fd)
    HiPi::Wiring::serialGetchar(fd)
    
    HiPi::Wiring::shiftIn(dPin, cPin, order)
    HiPi::Wiring::shiftOut(dPin, cPin, order, val)

WiringPi Methods not wrapped

  wiringPiISR(int pin, int mode, void (*function)(void))
  piThreadCreate (void *(*fn)(void *))

The wiringPi library offers the above functions to C programmers for the automatic creation of threads when polling for interrupts. In Perl it would be better to implement your own interrupt handling using a combination of 'select', IO::Poll and the Perl threads module if desired. In many application designs 'select' or IO::Poll may be all that you need

  serialPrintf(int fd, char *message, ...)
  lcdPrintf(int fd, char *message, ...)

The *Printf functions are not implemented. Use sprintf to format strings in Perl before passing to the appropriate wiringPi function.