Enable I2C proximity sensor vl53l.
Connect GND, VCC(3V), I2C3_SCL_3V3 and I2C3_SDA_3V3 data lines on expansion header and connect the sensor accordingly.
Setup should look like this:
Look inside ~/work/nss-linux/drivers/iio
and find a proper driver for vl53l
sensor. Use git grep vl53l
. Once you find the correct source file look inside the driver and remember the compatible string.
Once you found the driver, use make menuconfig
and select it to be compiled as a module. <M>
Look inside arch/arm64/boot/dts/freescale/imx8mq-pico-pi.dts
and add your node under i2c3
node.
Your node should look like this:
&i2c3 { proximity-sensor@XX { compatible = <compatible-you-found-in-the-driver>; reg =<XX>; pinctrl-0 = <&pinctrl_prox>; status = "okay"; }; };
XX - is the address of the I2C device. There are two ways of finding this. You can dig inside the datasheet and confirm the address by scanning for devices on i2c3 node on the hardware. Use i2cdetect -y 2
.
The datasheet states that the I2C address is as shown as below, but you need to look closer and also understand the output of i2c scan command i2cdetect -y 2
.
Once the device tree is ready, recompile the kernel and boot the board. On the board, use modprobe <driver-name>
to load the driver. If everything goes well the driver will be correctly loaded and you will be able to read data.
$ modprobe vl53l0x-i2c $ cat /sys/bus/iio/devices/iio:device0/in_distance_scale
Use the following script the poll for proximity measurements every 0.5 seconds:
$ cat read_meas.sh while true; do cat /sys/bus/iio/devices/iio:device0/in_distance_raw sleep 0.5 done
Control a motor using GPIOs. Use the following Guide