B4J Question Pi4J (add orange PI).

alexhi

Member
Licensed User
Longtime User
Hi Erel! I test this lib v2.0 on orangepi One and see error:

Unable to determine hardware version. I see: Hardware : sun8i
,
- expecting BCM2708 or BCM2709.
If this is a genuine Raspberry Pi then please report this
to [email protected]. If this is not a Raspberry Pi then you
are on your own as wiringPi is designed to support the
Raspberry Pi ONLY.

This lib work only Raspberry?
 
Upvote 0

Erel

B4X founder
Staff member
Licensed User
Longtime User
Orange Pi is not supported by Pi4J. The list of supported hardware is available here: http://pi4j.com/
I confused it with Banana Pi which is supported.

Download Pi4J v1.2-snapshot: http://pi4j.com/download.html

Unzip it and copy pi4j-core.jar, pi4j-device.jar and pi4j-gpio-extension.jar to the additional libraries folder.

Run it. If it fails try with this code:
B4X:
Dim provider As JavaObject
provider.InitializeNewInstance("com.pi4j.io.gpio.OrangePiGpioProvider", Null)
Dim jo as JavaObject
jo.InitializeStatic("com.pi4j.io.gpio.GpioFactory").RunMethod("setDefaultProvider", provider)
'above code should be before the controller is initialized.
controller.Initialize
 
Upvote 0

alexhi

Member
Licensed User
Longtime User
I try its and see error: :(


main._appstart (java line: 52)
java.lang.ClassCastException: com.pi4j.io.gpio_OrangePiGpioProvider cannot be cast to [Ljava.lang.Object;
at b4j.example.main._appstart(main.java:52)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:90)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:77)
at b4j.example.main.main(main.java:29)
 
Upvote 0

alexhi

Member
Licensed User
Longtime User
I do
jo.InitializeStatic("com.pi4j.io.gpio.GpioFactory").RunMethod("setDefaultProvider", Array(provider))

in Debug mode
Waiting for debugger to connect...
Program started.
Error occurred on line: 24

Pin8.Initialize(10, True) 'GpioPinDigitalOutput

and see err:


main._appstart (java line: 56)
com.pi4j.io.gpio.exception.PinProviderException: GPIO pin [GPIO 10] expects provider [RaspberryPi GPIO Provider] but is attempting to be provisioned with provider [OrangePi GPIO Provider]; provisioning failed.
at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionPin(GpioControllerImpl.java:546)
at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalOutputPin(GpioControllerImpl.java:717)
at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalOutputPin(GpioControllerImpl.java:711)
at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalOutputPin(GpioControllerImpl.java:734)
at anywheresoftware.b4j.objects.GpioControllerWrapper$GpioPinDigitalOutputWrapper.Initialize(GpioControllerWrapper.java:116)
at b4j.example.main._appstart(main.java:56)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflec
t.Method.invoke(Method.java:497)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:90)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:77)
at b4j.example.main.main(main.java:29)
 
Last edited:
Upvote 0

wirog80

Member
Licensed User
same result(error) with me :)
but i have tried this code with java using pi4j 1.2, and successful.

B4X:
import com.pi4j.io.gpio.*;
import com.pi4j.platform.Platform;
import com.pi4j.platform.PlatformAlreadyAssignedException;
import com.pi4j.platform.PlatformManager;

public class Mainclass {

    public static void main(String[] args) throws InterruptedException, PlatformAlreadyAssignedException {

        System.out.println("Starting Demo");
        PlatformManager.setPlatform(Platform.ORANGEPI); // Support for Orange Pi

        final GpioController gpio = GpioFactory.getInstance();

        GpioPinDigitalInput inputPin = gpio.provisionDigitalInputPin(OrangePiPin.GPIO_00,PinPullResistance.PULL_UP);// Pulled UP
        GpioPinDigitalOutput outputPin = gpio.provisionDigitalOutputPin(OrangePiPin.GPIO_07);
        while(true){
        if(inputPin.isLow()){// Checks if switch is pressed.

            System.out.println("Switch is pressed.");
            outputPin.low();
        }
        else{
            outputPin.high();
        }
        }
       // gpio.shutdown();
    }
}

for OrangePi just add this syntax:
PlatformManager.setPlatform(Platform.ORANGEPI);
how to wrap a syntax in B4J?

a .jar output copying with pi4j-core library
i copy test1.jar and test1_lib folder with contain pi4j-core.jar to the board

i don't understand about Java, just copy-paste from this link :)
http://weargenius.in/orange-pi-zero-gpio-programming-using-java/
and from this video:
 
Last edited:
Upvote 0

wirog80

Member
Licensed User
thanks Erel.
i have tried it.
same error code :)

Error occurred on line: 19
com.pi4j.io.gpio.exception.PinProviderException: GPIO pin [GPIO 0] expects provider [RaspberryPi GPIO Provider]...

line 19 >> pinI1.Initialize("pinI1",0 )

this is my code:
B4X:
Sub Process_Globals

    Private gpio As GpioController
    Private pinI1 As GpioPinDigitalInput
    Private pinO2 As GpioPinDigitalOutput
End Sub

Sub AppStart (Args() As String)
    Dim platform As JavaObject
    platform.InitializeStatic("com.pi4j.platform.PlatformManager").RunMethod("setPlatform", Array("ORANGEPI"))
  
    gpio.Initialize
    pinI1.Initialize("pinI1",0 )
    pinI1.SetPinPullResistance("PULL_UP")
    pinO2.Initialize(7,True)
    StartMessageLoop
End Sub

Sub pinI1_StateChange(State As Boolean)

End Sub
 
Last edited:
Upvote 0

wirog80

Member
Licensed User
sorry Erel, want to ask again :)
your syntax
B4X:
Dim provider As JavaObject
provider.InitializeNewInstance("com.pi4j.io.gpio.OrangePiGpioProvider", Null)
Dim jo as JavaObject
jo.InitializeStatic("com.pi4j.io.gpio.GpioFactory").RunMethod("setDefaultProvider", provider)

is wrap from this ?
GpioFactory.setDefaultProvider(new OrangePiGpioProvider());
 
Upvote 0

wirog80

Member
Licensed User
still confusing, why pi4J can running in OrangePI with Java.
but still not success with a wrapper (B4J) :)
have you tried it with OrangePI board?
 
Upvote 0
Top