/** * Execute the console command. * * @return mixed */ public function fire() { while (true) { $serial = new PhpSerial(); // First we must specify the device. This works on both linux and windows (if // your linux serial device is /dev/ttyS0 for COM1, etc) $serial->deviceSet($this->argument('device')); // We can change the baud rate, parity, length, stop bits, flow control $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->confFlowControl("none"); $serial->deviceOpen(); $read = ''; $theResult = ''; $start = microtime(true); while ($read == '' && microtime(true) <= $start + 0.5) { $read = $serial->readPort(); if ($read != '') { $theResult .= $read; $read = ''; } } $theResult = trim($theResult); if (!$theResult) { continue; } echo $theResult . "\n"; $line = explode("\n", $theResult); foreach ($line as $l) { $l = trim($l); $watt_array = explode(" ", $l); $unitId = 1; if ($watt_array[0] == "watt" && isset($watt_array[1]) && $watt_array[1] != false) { Watts::addWatt($unitId, $watt_array[1]); //funtion sa models/Watts.php Units::lessCredit($unitId, $watt_array[1]); } } $unitId = 1; if (Units::hasCredit($unitId)) { $serial->sendMessage("on"); } else { $serial->sendMessage("off"); } $serial->deviceClose(); } }
/** * Sends seprate command to COM port and wait for response. * * @param string $command Command to send. * @param string $output Returns response here (optional). * @param float $timeout Timeout for waiting response (optional). * @return boolean True if there were no errors, false - otherwise. */ protected function sendCommand($command, &$output = null, $timeout = 1) { $this->_logger->log(__METHOD__, array('command' => $command)); $this->_serial->sendMessage($command, $timeout); $response = $this->_serial->readPort(); if ($response === false) { $this->_errors[] = 'Error during send command: ' . $command; return false; } $output = $response; return true; }
function enviarSMS($nr_tlm, $sms) { $serial = new PhpSerial(); $serial->deviceSet("COM6"); //choose COM port $serial->confBaudRate(9600); //Choose Bitrate $serial->deviceOpen('w+'); //Open COM port $serial->sendMessage("AT" . chr(13)); //Check if is acessible //read response and check if it can continue $codigo_at = $serial->readPort(); $verificar = substr($codigo_at, -4); if (substr($verificar, 0, 2) == 'OK') { $serial->sendMessage("AT+CMGF=1" . chr(13)); //Prepare to SMS //read response and check if it may continue $codigo_at = $serial->readPort(); $verificar = substr($codigo_at, -4); if (substr($verificar, 0, 2) == 'OK') { $serial->sendMessage('AT+CMGS="' . $nr_tlm . '"' . chr(13)); //send destination number $serial->sendMessage($sms . chr(26)); //send SMS text sleep(5); //read response and check if the sms was sent $codigo_at = $serial->readSMS(); $verificar = substr($codigo_at, -4); if (substr($verificar, 0, 2) == 'OK') { $resposta = "OK"; } else { $resposta = "NOK"; } } else { $resposta = "NOK"; } } else { $resposta = "NOK"; } $serial->deviceClose(); //close COM port - NEVER FORGET THIS STEP! return $resposta; }
public function test_AtAndCpinCommands() { $connector = new PhpSerial(); $connector->deviceSet('COM1'); $connector->confBaudRate(9600); $connector->confParity('none'); $connector->confFlowControl('rts/cts'); $connector->confCharacterLength(8); $connector->confStopBits(1); $connector->deviceOpen('r+b'); stream_set_timeout($connector->_dHandle, 2); $connector->sendMessage("AT+CPIN?\r\n"); $result = $connector->readPort(); $connector->deviceClose(); $result = explode("\r\n", $result); $this->assertEquals(4, count($result)); $this->assertEquals('AT+CPIN?', $result[0]); $this->assertEmpty($result[1]); $this->assertEquals('+CPIN: READY', $result[2]); $this->assertEmpty($result[3]); }
$serial = new PhpSerial(); // First we must specify the device. This works on both linux and windows (if // your linux serial device is /dev/ttyS0 for COM1, etc) $serial->deviceSet("COM1"); // We can change the baud rate, parity, length, stop bits, flow control $serial->confBaudRate(2400); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->confFlowControl("none"); // Then we need to open it $serial->deviceOpen(); // To write into $serial->sendMessage("Hello !"); // Or to read from $read = $serial->readPort(); // If you want to change the configuration, the device must be closed $serial->deviceClose(); // We can change the baud rate $serial->confBaudRate(2400); // etc... // // /* Notes from Jim : > Also, one last thing that would be good to document, maybe in example.php: > The actual device to be opened caused me a lot of confusion, I was > attempting to open a tty.* device on my system and was having no luck at > all, until I found that I should actually be opening a cu.* device instead! > The following link was very helpful in figuring this out, my USB/Serial > adapter (as most probably do) lacked DTR, so trying to use the tty.* device > just caused the code to hang and never return, it took a lot of googling to
exit; } sort($tty); $updated_time = time(); try { $serial = new PhpSerial(); $serial->deviceSet("/dev/ttyACM" . end($tty)); $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $data = ""; if ($serial->deviceOpen()) { DebMes("Open device " . end($tty) . ": " . basename(__FILE__)); do { $data .= $serial->readPort(); //GET /objects/?object=sensorGarage&op=m&m=statusChanged&status=%i HTTP/1.0 $start = strpos($data, 'GET '); $end = strpos($data, ' HTTP/1.0'); if ($start !== false && $end) { $url = BASE_URL . trim(substr($data, $start + 4, $end - $start - 4)); $context = stream_context_create(array('http' => array('timeout' => 5))); file_get_contents($url, false, $context); $data = substr($data, $end + 9); } if (!$updated_time || time() - $updated_time > 1 * 60 * 60) { //Log activity every hour DebMes("Cycle running OK: " . basename(__FILE__)); $updated_time = time(); } usleep($uSleep);
$serial->deviceOpen(); $context = new ZMQContext(); $socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'my pusher'); $socket->connect("tcp://127.0.0.1:5555"); /*new image*/ $new = ""; $MASK = 255; $MASK2 = $MASK << 8; $image = fopen("test2", "w"); $lastFrame = 0; // default str $defaultStr = getDefaultStr(); // while (true) { $read = ""; while (strlen($read .= $serial->readPort()) < 32) { } $dataStr = substr($read, 0, 32); $data = unpack('C*', $dataStr); $read = substr($read, count($data)); $nFrames = ($data[1] << 8 & $MASK2) + $data[2]; $frame = ($data[3] << 8 & $MASK2) + $data[4]; if ($frame == 1) { rewind($image); ftruncate($image, 0); $socket->send(1); } if ($frame == $lastFrame + 1) { fwrite($image, substr($dataStr, 4)); $lastFrame += 1; } else {
$sum = 0; //echo "Strlen " . strlen($out) . " reqlen " . $reqlen . " [" . bin2hex($out) . "]\n"; //return; for ($i = 3; $i < $reqlen + 3; $i++) { $sum += ord($out[$i]); } $sum = 0xff - ($sum & 0xff); $out .= pack("C", $sum); $serial->sendMessage($out); //echo "Sending " . bin2hex($out) . "\n"; // wait for reply $inbuf = ''; $done = false; $timestart = time(); do { $datain = $serial->readPort(); if ($datain) { $inbuf .= $datain; } //if ($datain) echo bin2hex($datain) . " "; $len = strlen($inbuf); if ($len == 0) { continue; } if (ord($inbuf[0]) != 0x7e) { $inbuf = substr($inbuf, 1); continue; } // bad framing if ($len < 3) { continue;
<?php require 'vendor/autoload.php'; set_time_limit(60 * 5); $serial = new PhpSerial(); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(57600); $serial->confParity("none"); $serial->confCharacterLength(32); $serial->confStopBits(1); $serial->confFlowControl("none"); $source = file_get_contents(isset($_FILES['image']['tmp_name']) ? $_FILES['image']['tmp_name'] : 'descarga.png'); $serial->deviceOpen(); $index = 0; $len = strlen($source); $nFrames = ceil($len / 28); $curFrame = 1; $start = true; $MASK = 255; echo $nFrames . "\n"; while ($index < $len) { $aux = substr($source, $index, 28); $aux = chr($nFrames >> 8 & $MASK) . chr($nFrames & $MASK) . chr($curFrame >> 8 & $MASK) . chr($curFrame & $MASK) . $aux; echo $curFrame . "\n"; $serial->sendMessage($aux); while ($serial->readPort() == "") { } $index += 28; $curFrame++; } $serial->deviceClose();
protected function _transmit($message, $fetch_answer = false) { $this->last_message = $message; $this->last_raw_message = $this->_buildRawMessage($this->last_message); $this->last_answer = ''; $this->last_raw_answer = ''; // start the serial connection $serial = $serial = new PhpSerial(); // First we must specify the device. This works on both linux and windows (if // your linux serial device is /dev/ttyS0 for COM1, etc) $serial->deviceSet($this->serial_port); // We can change the baud rate, parity, length, stop bits, flow control // http://forum.mysensors.org/topic/340/pidome-domotica-home-automation $serial->confBaudRate(115000); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->confFlowControl("none"); // ? // Then we need to open it $serial->deviceOpen(); // we may have to sleep before arduino restart ? // http://stackoverflow.com/questions/13114275/php-serial-port-data-return-from-arduino //sleep($this->arduino_boot_time); // We may need to return if nothing happens for $timeout seconds if ($fetch_answer) { $timeout = $this->socket_timeout_answer; } else { $timeout = $this->socket_timeout_message; } stream_set_timeout($serial->_dHandle, $timeout); // send message $serial->sendMessage($this->last_raw_message . "\n"); if ($fetch_answer) { $line = ''; $until_t = time() + $timeout; while (true) { if (!$serial->_dHandle or time() > $until_t) { break; } $line = $serial->readPort(); if ($this->last_answer = $this->_filterAnswer($line)) { $this->last_raw_answer = trim($line); $out = $this->last_answer['payload']; break; } } } else { $out = true; } $serial->deviceClose(); return $out; }
<?php require 'vendor/autoload.php'; $serial = new PhpSerial(); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(57600); $serial->confParity("none"); $serial->confCharacterLength(10); $serial->confStopBits(1); $serial->confFlowControl("none"); $serial->deviceOpen(); // ratchet $context = new ZMQContext(); $socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'my pusher'); $socket->connect("tcp://127.0.0.1:5555"); while (true) { while (($read = $serial->readPort()) == "") { } $socket->send($read); echo $read; } $serial->deviceClose();
<?php include 'lib/serial/src/PhpSerial.php'; $serial = new PhpSerial(); $serial->deviceSet("COM11"); //$serial->confBaudRate(9600); //$serial->confParity("even"); //$serial->confCharacterLength(7); //$serial->confStopBits(1); //$serial->confFlowControl("rts/cts"); $serial->deviceOpen('w+'); sleep(5); // We may need to return if nothing happens for 20 seconds stream_set_timeout($serial->_dHandle, 20); for ($i = 0; $i < 100; ++$i) { $serial->sendMessage("30,50;"); var_dump($serial->readPort()); sleep(0.03); } $serial->deviceClose();