Support Forum

Share your projects and post your questions

Register   or   Sign In
The Forum

I2C bus works only with direc start in development area/ but not when compiled programm is started by PHPskript

1086 Views - Created 20/02/2020

20/02/2020

Posted by:
Thomas Schmieder

Thomas Schmieder Avatar

I have developped a program for I2C bus and IO PI plus. This program works correctly when started in the developers area. When started the compiled program by a php file the message below pops up

The PHP file is shown here:





<?php

echo shell_exec('/home/pi/Documents/tom/tom/Debug/tom');

?>


The relevant C++ code is here for I2C bus is here


const char *fileName = "/dev/i2c-1"; // change to /dev/i2c-0 if you are using a revision 0002 or 0003 model B


void write_byte_data(char address, char reg, char value) {
    if ((i2cbus = open(fileName, O_RDWR)) < 0) {
        printf(".Failed to open i2c port for write\n");    This message pops up when started by the PHP file!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        exit(1);
    }

    if (ioctl(i2cbus, I2C_SLAVE, address) < 0) {
        printf("..Failed to write to i2c port for write\n");
        exit(1);
    }

    buf[0] = reg;
    buf[1] = value;

    if ((write(i2cbus, buf, 2)) != 2) {
        printf("...Failed to write to i2c device for write\n");
        exit(1);
    }

    close(i2cbus);
}






Can somebody please explain/I think it is a problem with the userrights of the Raspb and can please exactly what to program in Linux

and also please how parameters can be checked in Linux. PS program also dont work when using root rights (sudo -i)

Thank you for help Tom

PS im using a Raspberry 3 B /////// the parameter O_RDWR is no where declared...is this correct?

21/02/2020

Posted by:
andrew

andrew Avatar

Location:
United Kingdom

andrew Twitter  andrew Website  

Hello Thomas

The problem you are having is probably a permissions issue where PHP does not have permission to access the I2C bus.

Try adding www-data to the i2c group with the following command.


sudo adduser www-data i2c


You may also have to run the following command to give read/write permissions to /dev/i2c-1.


sudo chmod g+rw /dev/i2c-1


O_RDWR is an argument flag for the open system call. You can find out more about how open works on this Linux manual page.

22/02/2020

Posted by:
Thomas Schmieder

Thomas Schmieder Avatar

Vielen Dank an AB...funktioniert!

Sign in to post your reply

Note: documents in Portable Document Format (PDF) require Adobe Acrobat Reader 5.0 or higher to view.
Download Adobe Acrobat Reader or other PDF reading software for your computer or mobile device.