1. Go to this page and download the library: Download flat3/revpi library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
flat3 / revpi example snippets
use Flat3\RevPi\Interfaces\Module;
use Flat3\RevPi\Led\LedColour;
use Flat3\RevPi\Led\LedPosition;
$pi = app(Module::class); // Resolved from the interface to the correct module type
$pi->led(LedPosition::A1)->set(LedColour::Red);
print_r($pi->led(LedPosition::A1)->get());
use Flat3\RevPi\Interfaces\Module;
use Flat3\RevPi\Led\LedColour;
use Flat3\RevPi\Led\LedPosition;
use Flat3\RevPi\Monitors\DigitalMonitor;
use Flat3\RevPi\SerialPort\BaudRate;
use Flat3\RevPi\SerialPort\LocalFlag;
use Illuminate\Console\Command;
use Revolt\EventLoop;
$pi = new \App\MyPi;
// Create an instance of the serial port that loops the input back to the output
$port = $pi->serialPort();
$port->setSpeed(BaudRate::B576000);
$port->clearFlag(LocalFlag::CanonicalInput);
$port->onReadable(function (string $data) use ($port) {
$port->write($data);
});
// Monitor the core temperature, writing updated values to the serial port
$pi->Core_Temperature()->monitor(new DigitalMonitor, function ($value) use ($port) {
$port->write($value."\n");
});
// Start polling
$pi->module()->resume();
// Start the event loop
EventLoop::run();
$pi = new \App\MyPi;
// Read input (as property)
$level = $pi->input1; // int|bool
// Or as a method (returns InputIO object)
$input = $pi->input1();
$currentValue = $input->get();
// Read output
$currentStatus = $pi->output1;
// Set output (as property)
$pi->output1 = true;
// Or as a method (returns OutputIO object)
$pi->output1()->set(1);
// Reset output to its default value
$pi->output1()->reset();
use Flat3\RevPi\Monitors\DigitalMonitor;
$pi = new \App\MyPi;
$pi->input1()->monitor(new DigitalMonitor, function($newValue) {
// React to input1 changes
logger("input1 changed: $newValue");
});
$image = $pi->processImage();
$value = $image->readVariable('input1');
$image->writeVariable('output1', 1);
$dump = $image->dumpImage(); // Raw string of process image data
$info = $image->getDeviceInfo(); // Information about the base module
$infoList = $image->getDeviceInfoList(); // Information about all expansion modules
use Flat3\RevPi\Led\LedColour;
use Flat3\RevPi\Led\LedPosition;
// Set LED A1 to green
$pi->led(LedPosition::A1)->set(LedColour::Green);
// Get current LED color (as enum)
$current = $pi->led(LedPosition::A1)->get(); // LedColour instance
// Turn an LED off
$pi->led(LedPosition::A1)->off();
use Flat3\RevPi\SerialPort\BaudRate;
// Open default serial port
$port = $pi->serialPort();
// Or specify device path:
$port = $pi->serialPort('/dev/ttyRS485-1');
// Configure the port:
$port->setSpeed(BaudRate::B9600);
$port->setParity(Parity::Even);
$port->setDataBits(DataBits::CS8);
// Write and read
$port->write("Hello, RevPi!");
$response = $port->read(128); // up to 128 bytes
// Register event handler for readable data
$port->onReadable(function($data) {
echo "Serial received: $data\n";
});
// Flush or break
$port->flush(QueueSelector::Both);
$port->break();
use Flat3\RevPi\RevolutionPi;
$pi = new \App\MyPi;
// Adding the remote call creates a connection to a device
$pi->remote('ws://10.1.2.3:12873');
// From now, other methods act remotely:
$pi->output1 = 1;
$status = $pi->input2;
$pi->led(LedPosition::A1)->set(LedColour::Cyan);
$port = app(\Flat3\RevPi\Interfaces\SerialPort::class); // Usually you want $pi->serialPort(...)
use Flat3\RevPi\Interfaces\Monitor;
class MyMonitor implements Monitor {
public function evaluate(int|bool|null $next): bool {
// Implement custom transition/action logic here
// e.g. if crossing a threshold, fire webhook
// Return true if the monitor has detected sufficient change
}
}
// Register:
$pi->module()->monitor('input1', new MyMonitor, function($newValue) {
// Callback logic
});
use Revolt\EventLoop;
$pi = new \App\MyPi;
$pi->repeat(1, function($pi) {
// This is called every second
logger("Current value is: " . $pi->input1);
});
EventLoop::run();
composer
bash
php artisan revpi:generate pictory.rsc MyPi
bash
php artisan revpi:run
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.