Communicating serial port on windows with php

15,452

You need to determinate COM port number of your USB device via some external command called trough PHP's shell_exec().

For Windows you can try this small tool:

http://todbot.com/blog/2012/03/02/listcomports-windows-command-line-tool-for-usb-to-serial/

https://github.com/todbot/usbSearch/

After you call this tool via shell_exec(), you need to parse it's output (RegExp) and look for exact COM port number based on company/device name.

Share:
15,452
Radhakrishna Rayidi
Author by

Radhakrishna Rayidi

UI & Application Developer from India

Updated on June 15, 2022

Comments

  • Radhakrishna Rayidi
    Radhakrishna Rayidi over 1 year

    I'm working with an application which connects to Huawei 3G Modem using COM ports in php. Here is my code:

    <?php
    include("sms.php");
    $sms = new sms();
    $device = "COM11";
    exec("mode $device BAUD=9600 PARITY=n DATA=8 STOP=1 xon=off octs=off rts=on");
    $comport = fopen($device, "r+b");
    if ($comport === false){
        die("Failed opening com port<br/>");
    }else{
        echo "Com Port Open<br/>";
    }
    
    //Set non-blocking mode for writing
    //stream_set_blocking($comport, 0);
    $sms->_blocking($comport,0);
    $atcmd = "AT\r";
    fputs($comport, $atcmd);
    
    sleep(5); // Sleep for response from the modem
    
     // Set blocking mode for reading
    $sms->_blocking($comport,1);
    $res = fgets($comport, 4017);
    if(trim($res) == "OK"){
        echo "Modem supports AT Commands<br/>";
    }else{
        echo "Error response: ".$res;
    }
    
    fclose($comport);
    ?>
    

    sms.php:

    <?php
        class sms{
            function _blocking($device,$mode){
                stream_set_blocking($device, $mode);
                return true;
            }
        }
    ?>
    

    This is working fine with me. Now challenge is every time i connect to the new usb port the COM was changing for my modem. Is there any other way to detect the device automatically with php in windows ?