BeagleBone® Enhanced Developer Tutorial
Pressure Sensor Set-Up
How to Extract Data from the Device Node of your BeagleBone® Enhanced?
The access of the pressure sensor can be done using the iio dev nodes that are created by the driver.
Here we will show you a simple way to extract data from the device node.
To discover the iio device you need to first list the directory contents of all iio nodes:
Debian-9.2: There are 3 devices listed (please use iio:device2 for newer images or match the device that is mapped to i2c-0/0-005c
root@beaglebone:~# ls -l /sys/bus/iio/devices/ total 0 lrwxrwxrwx 1 root root 0 Dec 8 18:23 iio:device0 -> ../../../devices/platform/ocp/44e0b000.i2c/i2c-0/0-0068/iio:device0 lrwxrwxrwx 1 root root 0 Dec 8 18:23 iio:device1 -> ../../../devices/platform/ocp/44e0b000.i2c/i2c-0/0-005c/iio:device1 lrwxrwxrwx 1 root root 0 Dec 8 18:23 trigger0 -> ../../../devices/platform/ocp/44e0b000.i2c/i2c-0/0-0068/trigger0 lrwxrwxrwx 1 root root 0 Dec 8 18:23 trigger1 -> ../../../devices/platform/ocp/44e0b000.i2c/i2c-0/0-005c/trigger1
As you can see we have 2 iio devices 0 and 1. Inspect the contents of the folders to see what the devices are. e.g.:
root@beaglebone:~# ls -l /sys/bus/iio/devices/iio\:device1/
For the ST pressure sensor we need the following contents :
drwxr-xr-x 2 root root 0 Dec 8 18:24 buffer -r--r--r-- 1 root root 4096 Dec 8 18:24 dev -rw-r--r-- 1 root root 4096 Dec 8 18:24 in_pressure_raw -rw-r--r-- 1 root root 4096 Dec 8 18:24 in_pressure_scale -rw-r--r-- 1 root root 4096 Dec 8 18:24 in_temp_offset -rw-r--r-- 1 root root 4096 Dec 8 18:24 in_temp_raw -rw-r--r-- 1 root root 4096 Dec 8 18:24 in_temp_scale -r--r--r-- 1 root root 4096 Dec 8 18:24 name lrwxrwxrwx 1 root root 0 Dec 8 18:24 of_node -> ../../../../../../../firmware/devicetree/base/ocp/i2c@44e0b000/lps331ap@5C drwxr-xr-x 2 root root 0 Dec 8 18:24 power -r--r--r-- 1 root root 4096 Dec 8 18:24 sampling_frequency_available drwxr-xr-x 2 root root 0 Dec 8 18:24 scan_elements lrwxrwxrwx 1 root root 0 Dec 8 18:23 subsystem -> ../../../../../../../bus/iio drwxr-xr-x 2 root root 0 Dec 8 18:24 trigger -rw-r--r-- 1 root root 4096 Dec 8 18:23 uevent
Check that we have the correct device by querying the name:
root@beaglebone:~# cat /sys/bus/iio/devices/iio\:device1/name lps331ap
Pressure
If we need to know the current pressure we can simply cat the dev node to extract the reading:
root@beaglebone:~# cat /sys/bus/iio/devices/iio\:device1/in_pressure_raw 4144784 root@beaglebone:~# cat /sys/bus/iio/devices/iio\:device1/in_pressure_scale 0.000024414
Reading the datasheet for the scaling it is the following calculation:
(in_pressure_raw * in_pressure_scale)*10 = mb
(4144784 * 0.000024414) *10 = 1011.90756576 mb
Temperature
If we need to know the current temperature we can simply cat the dev node to extract the reading:
root@beaglebone:~# cat /sys/bus/iio/devices/iio\:device1/in_temp_offset 42.500000000 root@beaglebone:~# cat /sys/bus/iio/devices/iio\:device1/in_temp_raw -1621 root@beaglebone:~# cat /sys/bus/iio/devices/iio\:device1/in_temp_scale 0.002083333
Reading the datasheet for the scaling it is the following calculation:
in_temp_offset+(in_temp_raw * in_temp_scale) = degC
42.500000000 + ( -1621 * 0.002083333 ) = 39.12291 deg C
Debian-9.2 and newer: There has been a change to the offset and scale values:
root@beaglebone:~# cat /sys/bus/iio/devices/iio\:device1/in_temp_offset 20400.000000000 root@beaglebone:~# cat /sys/bus/iio/devices/iio\:device1/in_temp_raw -1621 root@beaglebone:~# cat /sys/bus/iio/devices/iio\:device1/in_temp_scale 2.083333333
Reading the datasheet for the scaling it is the following calculation:
(in_temp_offset + in_temp_raw) * (in_temp_scale / 1000) = degC
(20400 + -1621) * (2.083333333 / 1000 ) = 39.12291 deg C
Don’t forget that the measured temperature will be of the sensor on the board, so if your board is contained within an enclosed case and the processor loaded, it will read high temperatures.