danjohnson95/
pinout
g4t.io

Control Hardware Components in Laravel with Pinout

326 stars by Paul Redmond

Pinout is a Laravel package that bridges the gap between web applications and hardware, enabling developers to control hardware components directly from their L…

README from danjohnson95/pinout Open on GitHub →

Pinout

Connect your Laravel application to the physical world with Pinout, where code meets circuitry. Hardware and web, seamlessly united 🤝

Features

With a Laravel application running on supported hardware, you can:

  • Get the current state of any GPIO pin
  • Set the state of any GPIO pin

These basic features open up a world of possibilities, from simple LED control to complex robotics.

And with the included drivers, you can also:

  • Display digits on a 7 segment display
  • Display anything on a 16x2 LCD display

Hardware support

At the moment, Pinout supports the following hardware:

Model Supported
Raspberry Pi Model A ✅
Raspberry Pi Model B ✅
Raspberry Pi Model B+ ✅
Raspberry Pi Model 2 ✅
Raspberry Pi 3 Model B ✅
Raspberry Pi 3 Model B+ ✅
Raspberry Pi 3 Model A+ ✅
Raspberry Pi 4 Model B ✅
Raspberry Pi 400 ✅
Raspberry Pi 5 ✅
Raspberry Pi Zero ✅
Raspberry Pi Zero v1.3 ✅
Raspberry Pi Zero W ✅
Raspberry Pi Zero WH ✅
Raspberry Pi Zero 2 W ✅

Getting started

Install the package to an existing Laravel project:

composer require danjohnson95/pinout

If you're using Laravel 11 or later, the package will be auto-discovered. If you're using an earlier version, you'll need to add the service provider to your config/app.php file:

'providers' => [
    // ...
    DanJohnson95\Pinout\ServiceProvider::class,
    // ...
],

Usage

PinService facade

This package allows you to interact with hardware using the PinService facade, and also comes with a couple of Artisan commands for convenience.

Use the pin method to get a Pin instance for a specific pin:

$pin = \DanJohnson95\Pinout\Facades\PinService::pin(13);

The argument is a reference to the GPIO pin number. (The BCM pin number is used, not the physical pin number.) See pinout.xyz for a visual reference.

The Pin instance has methods for interacting with the pin:

$pin->isOn(); // Whether the pin is "on" (high)
$pin->isOff(); // Whether the pin is "off" (low)
$pin->turnOn(); // Set the pin to "on"
$pin->turnOff(); // Set the pin to "off"
$pin->makeInput(); // Set the pin to input mode
$pin->makeOutput(); // Set the pin to output mode

The facade also has a pins method for pulling multiple pins at once:

$pins = \DanJohnson95\Pinout\Facades\PinService::pins(13, 19, 26);

This will return a PinCollection instance, which is a collection of Pin instances.

The PinCollection comes with some handy methods too:

$pins->turnOn(); // Turns all pins on in the collection
$pins->turnOff(); // Turns all pins off in the collection
$pins->makeInput(); // Sets all pins to input mode
$pins->makeOutput(); // Sets all pins to output mode
$pins->findByPinNumber(13); // Returns the Pin instance for the given pin number
$pins->whereIsOn(); // Returns a collection of pins that are on
$pins->whereIsOff(); // Returns a collection of pins that are off

Artisan commands

This package comes with a couple of Artisan commands for convenience:

php artisan pinout:get 13

This will return the current state of the pin.

php artisan pinout:on 13

This will turn pin 13 on.

php artisan pinout:off 13

This will turn pin 13 off.

Roadmap

  • Hardware interrupts
  • I2C
  • SPI

More from the ecosystem

marcreichel/
laya-php
g4t.io
3 53

LayaPHP: Self-Hosted Text Classification for PHP and Laravel

Classify text in PHP without an LLM bill: typed decisions in 100+ languages, self-hosted. Laravel-ready SDK for Laya, a Jev AI alternative.

ai classification decision-engine
marcreichel/laya-php via Laravel News
Josh-Dovey/
postcodes-laravel
g4t.io
5 9

Postcodes for Laravel: GB Postcode Lookup and Geography Data

Postcodes for Laravel adds typed GB postcode lookups, validation, geography data, distance searches, and test fakes through the GB Postcodes API.

Josh-Dovey/postcodes-laravel via Laravel News
RedberryProducts/
mailbox-for-laravel
g4t.io
4 115

Mailbox for Laravel: Preview and Test Rendered Email

Mailbox for Laravel captures outgoing mail in a local dashboard and lets you test rendered HTML, recipients, and attachments with fluent assertions.

RedberryProducts/mailbox-for-laravel via Laravel News