RockpiE/dev/libmraa
ROCK Pi E > Development > libmraa
Contents
Libmraa-rockpie
Install libmraa
Modify your /etc/apt/sources.list.d/apt-radxa-com.list as follow :
#deb http://apt.radxa.com/buster-stable/ buster main deb http://apt.radxa.com/buster-testing/ buster main
Get the pub key :
wget -O - apt.radxa.com/buster-testing/public.key | sudo apt-key add -
Update APT package information :
sudo apt-get update
Install libmraa :
sudo apt-get install libmraa-rockpie
Enable interface
See ROCK Pi E GPIO pintout. ROCK Pi E has one 40-pin expansion header. Each pin is distinguished by color.
Hardware V1.0/V1.1
25 GPIO:
PIN3 GPIO2_A4 PIN5 GPIO2_A5 PIN7 GPIO3_A4 PIN8 GPIO2_A0 PIN10 GPIO2_A1 PIN11 GPIO3_A0 PIN12 GPIO2_D2 PIN13 GPIO3_B0 PIN15 GPIO3_A2 PIN19 GPIO0_D3 PIN21 GPIO2_C3 PIN22 GPIO2_B4 PIN23 GPIO1_D4 PIN24 GPIO2_A3 PIN26 GPIO2_C7 PIN27 GPIO3_A1 PIN28 GPIO2_C1 PIN29 GPIO2_C0 PIN31 GPIO2_B7 PIN32 GPIO3_A6 PIN33 GPIO2_C2 PIN36 GPIO2_C5 PIN37 GPIO2_A2 PIN38 GPIO2_C4 PIN40 GPIO2_C6
I2C: x1, I2C1
PIN3 I2C1_SDA PIN5 I2C1_SCL
SPI: x1, SPI0(Pin#11/13/15/27)
PIN11 SPI_CLK_M2 PIN13 SPI_CSN0_M2 PIN15 SPI_RXD_M2 PIN27 SPI_TXD_M2
UART: x1, UART1 and UART2
PIN7 UART1_TX PIN32 UART1_RX PIN8 UART2_TX_M1 PIN10 UART2_RX_M1
ADC_IN1: x1, ADC_IN1
PIN35 ADC_IN1
Modify /boot/uEnv.txt to enable uart1 and spi0 for test,as follow :
verbosity=7 fdtfile=rockchip/rk3328-rock-pi-e.dtb console=ttyS2,1500000n8 overlays=rk3328-uart2 rk3328-spi-spidev rk3328-uart1 param_spidev_spi_bus=0 param_spidev_spi_cs=0 param_spidev_max_freq=10000000 initrdsize=0x655f2d kernelversion=4.4.194-12-rockchip-g615ae7431150 initrdimg=initrd.img-4.4.194-12-rockchip-g615ae7431150 kernelimg=vmlinuz-4.4.194-12-rockchip-g615ae7431150 rootuuid=6bdd02ee-ae60-404d-99c9-913f3f1bffb1
then reboot
Test
test gpio
Use mraa-gpio to test
rock@rockpie:~$ mraa-gpio list 01 3V3: 02 5V: 03 SDA1: GPIO I2C 04 5V: 05 SCL1: GPIO I2C 06 GND: 07 TXD1: GPIO UART 08 TXD2: GPIO UART 09 GND: 10 RXD2: GPIO UART 11 SPI_CLK_M2: GPIO SPI 12 GPIO2_D2: GPIO 13 SPI_CSN0_M2: GPIO SPI 14 GND: 15 SPI_RXD_M2: GPIO SPI 16 USB20DM: 17 3V3: 18 USB20DP: 19 GPIO0_D3: GPIO 20 GND: 21 GPIO2_C3: GPIO 22 GPIO2_B4: GPIO 23 GPIO1_D4: GPIO 24 GPIO2_A3: GPIO 25 GND: 26 GPIO2_C7: 27 SPI_TXD_M2: GPIO SPI 28 GPIO2_C1: GPIO 29 GPIO2_C0: GPIO 30 GND: 31 GPIO2_B7: GPIO 32 UART1_RX: GPIO UART 33 GPIO2_C2: GPIO 34 GND: 35 ADC_IN1: AIO 36 GPIO2_C5: GPIO 37 GPIO2_A2: GPIO 38 GPIO2_C4: GPIO 39 GND: 40 GPIO2_C6: GPIO rock@rockpie:~$ rock@rockpie:~$ sudo mraa-gpio set 23 1 //pin40 pull high rock@rockpie:~$ sudo mraa-gpio set 23 0 //pin40 pull low
test i2c
Use mraa-i2c to test, we must have a i2c slave device , for example, we use I2C EEPROM:
rock@rockpie:~$ mraa-i2c list Bus 0: id=01 type=linux default rock@rockpie:~$ sudo mraa-i2c detect 0 00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- 18 -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: 50 51 52 53 54 55 56 57 -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- rock@rockpie:~$ sudo mraa-i2c set 0 0x50 0x10 0x55 Device 50, Register = 10, Value = 55 rock@rockpie:~$ sudo mraa-i2c get 0 0x50 0x10 Register 0X10 = 0X55 rock@rockpie:~$
test spi
fristly, modify /boot/uEnv.txt to enable the spi0, The changes are as follows :
rock@rockpie:~$ cat /boot/uEnv.txt verbosity=7 fdtfile=rockchip/rk3328-rock-pi-e.dtb console=ttyS2,1500000n8 overlays=rk3328-uart2 rk3328-spi-spidev param_spidev_spi_bus=0 param_spidev_spi_cs=0 param_spidev_max_freq=10000000 initrdsize=0x655f2d kernelversion=4.4.194-12-rockchip-g615ae7431150 initrdimg=initrd.img-4.4.194-12-rockchip-g615ae7431150 kernelimg=vmlinuz-4.4.194-12-rockchip-g615ae7431150 rootuuid=6bdd02ee-ae60-404d-99c9-913f3f1bffb1 rock@rockpie:~$
After modification, you need to reboot
use c to test spi,compile spi.c.
root@rockpie:~# cat spi.c #include <signal.h> #include <stdlib.h> #include <unistd.h> /* mraa header */ #include "mraa/spi.h" /* SPI declaration */ #define SPI_BUS 0 /* SPI frequency in Hz */ #define SPI_FREQ 400000 int main(int argc, char** argv) { mraa_result_t status = MRAA_SUCCESS; mraa_spi_context spi; int i, j; /* initialize mraa for the platform (not needed most of the times) */ mraa_init(); //! [Interesting] /* initialize SPI bus */ spi = mraa_spi_init(SPI_BUS); if (spi == NULL) { fprintf(stderr, "Failed to initialize SPI\n"); mraa_deinit(); return EXIT_FAILURE; } /* set SPI frequency */ status = mraa_spi_frequency(spi, SPI_FREQ); if (status != MRAA_SUCCESS) goto err_exit; /* set big endian mode */ status = mraa_spi_lsbmode(spi, 0); if (status != MRAA_SUCCESS) { goto err_exit; } while(1) { printf("0x%x\n",mraa_spi_write(spi, 0xaa)); } err_exit: mraa_result_print(status); /* stop spi */ mraa_spi_stop(spi); /* deinitialize mraa for the platform (not needed most of the times) */ mraa_deinit(); return EXIT_FAILURE; } root@rockpie:~# gcc spi.c -lmraa
then short pin15 and pin27 and run a.out
root@rockpie:~# ./a.out 0xaa 0xaa ......
test Uart
Enable Uart1 for uart test, The changes are as follows :
rock@rockpie:~$ cat /boot/uEnv.txt verbosity=7 fdtfile=rockchip/rk3328-rock-pi-e.dtb console=ttyS2,1500000n8 overlays=rk3328-uart2 rk3328-uart1 initrdsize=0x655f2d kernelversion=4.4.194-12-rockchip-g615ae7431150 initrdimg=initrd.img-4.4.194-12-rockchip-g615ae7431150 kernelimg=vmlinuz-4.4.194-12-rockchip-g615ae7431150 rootuuid=6bdd02ee-ae60-404d-99c9-913f3f1bffb1 rock@rockpie:~$
then reboot and short pin7 and pin32. use ssh connect to rockpie,we must have 2 windows,one is for send data,anothor is for receive.
send command follow:
sudo mraa-uart dev 0 baud 1500000 send data
receive command follow:
sudo mraa-uart dev 0 baud 1500000 recv 1000
the receive window will show the data
test adc
Firstly, short pin23 and pin35, Compile mraa example file to test, as follow:
rock@rockpie:~$ cp /usr/local/share/mraa . -r rock@rockpie:~$ cd mraa/examples/ rock@rockpie:~/mraa/examples$ ls CMakeLists.txt c c++ python rock@rockpie:~/mraa/examples$ mkdir build rock@rockpie:~/mraa/examples$ cd build rock@rockpie:~/mraa/examples/build$ sudo apt-get install cmake rock@rockpie:~/mraa/examples/build$ sudo apt-get install g++ rock@rockpie:~/mraa/examples/build$ cmake .. rock@rockpie:~/mraa/examples/build$ cd c; make rock@rockpie:~/mraa/examples/build/c$ sudo su [sudo] password for rock: #password:rock root@rockpie:/home/rock/mraa/examples/build/c# ./gpio & [1] 1250 root@rockpie:/home/rock/mraa/examples/build/c# ./aio ADC A0 read 3FF - 1023 ADC A0 read float - 1.00000 ADC A0 read 3FF - 1023 ADC A0 read float - 1.00000 ... ADC A0 read 0 - 0 ADC A0 read float - 0.00000 ADC A0 read 0 - 0 ADC A0 read float - 0.00000
Compilation example
Install compiler and project builder
Install g++ compiler and cmake project builder
rock@rockpie:~$ sudo apt-get install cmake g++
Configure Java environment variables. Because the libmraa-rockpie package has been installed openjdk-11, there is no need to install JDK, but openjdk-11 does not contain JRE, so you need to generate JRE manually and configure the Java environment variables.
rock@rockpie:~$ sudo su #password: rock root@rockpie:/home/rock# cd /usr/lib/jvm/java-1.11.0-openjdk-arm64 root@rockpie:/usr/lib/jvm/java-1.11.0-openjdk-arm64# jlink --module-path jmods --add-modules java.desktop --output jre root@rockpie:/usr/lib/jvm/java-1.11.0-openjdk-arm64# cd root@rockpie:~# vim ./.bashrc ... export JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-arm64 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib root@rockpie:~# source ./.bashrc root@rockpie:~# cp /usr/local/share/mraa . -r root@rockpie:~# cd mraa/examples/ root@rockpie:~/mraa/examples# mkdir build root@rockpie:~/mraa/examples# cd build root@rockpie:~/mraa/examples/build# cmake ..; make ... [ 97%] Building CXX object c++/CMakeFiles/i2c_cpp.dir/i2c.o [100%] Linking CXX executable i2c_cpp [100%] Built target i2c_cpp root@rockpie:~/mraa/examples/build# ls CMakeCache.txt CMakeFiles Makefile c c++ cmake_install.cmake java
After compiling, you can see that C, C + + and Java are generated. Let's take a look at the example of using Java.
Example of running Java
Go to the Java sample directory and use the Java command to run the .jar package.
Let's short 35pin and 23pin, and then run the .jar package, and watch the output.
root@rockpie:~/mraa/examples/build# cd java/ root@rockpie:~/mraa/examples/build/java# ls AioA0 CMakeFiles GpioMmapped Isr UartExample BlinkIO CyclePwm3 GpioRead6 Makefile cmake_install.cmake BlinkOnboard Example HelloEdison SpiMAX7219 Bmp85 FTDITest I2cCompass SpiMCP4261 root@rockpie:~/mraa/examples/build/java# java -jar GpioMmapped/GpioMmapped.jar & root@rockpie:~/mraa/examples/build/java# hello mraa Version: v2.1.0-6-gb915502 Platform: ROCK Pi E #Enter the Enter key on the keyboard root@rockpie:~/mraa/examples/build/java# java -jar AioA0/AioA0.jar ADC A0 read 0 - 0 ADC A0 read 0.00000 ADC A0 read 0 - 0 ADC A0 read 0.00000 ... ADC A0 read 3FF - 1023 ADC A0 read 1.00000 ADC A0 read 3FF - 1023 ADC A0 read 1.00000
Look, you have successfully run it. Next, you can try to write a Java demo yourself. Viewing these .hpp files can help you write your own demo
root@rockpie:/usr/local/include/mraa# ls aio.h gpio.h iio.hpp led.hpp types.h uart_ow.hpp aio.hpp gpio.hpp iio_kernel_headers.h pwm.h types.hpp common.h i2c.h initio.h pwm.hpp uart.h common.hpp i2c.hpp initio.hpp spi.h uart.hpp firmata.h iio.h led.h spi.hpp uart_ow.h root@rockpie:/usr/local/include/mraa#
More examples
More examples (including examples written in python and c++) can be found at:
/usr/local/share/mraa/examples/