Coroutines on the RaspberryPi (Pi4J-Kotlin)

If you didn’t know already, Pi4J has had a Kotlin DSL for quite some time now.

And I’m here to announce the latest release v2.4.0 with a sack of additions and to tell you about all the good stuff that’s been added since the first release.

1. Coroutines

If the pi4j { … } wasn’t good enough for ya, and you want to use coroutines instead of weaving fat threads on your precious precious Pi, you can now use the new pi4jAsync { … } block—It can do everything pi4j { … } does + you can run suspended functions within.

I know you guys just want to use coroutines so that you can call delay() instead of Thread::sleep. And I won’t disappoint you. Here’s a blinking LED example with coroutines

pi4jAsync {
digitalOutput(PIN_LED) {
id(“led”)
name(“LED Flasher”)
shutdown(DigitalState.LOW)
initial(DigitalState.LOW)
piGpioProvider()
}.run {
while (true) {
toggle()
delay(500L) // The most loved suspended function
}
  }
}

Feel free to visit the docs on coroutines support, and the full example.

2. I²C DSL

This will add a little beauty to your life when dealing with I²C

i2c(1, 0x3f) {
id(“TCA9534”)
linuxFsI2CProvider()
}.use { tca9534Dev ->
// use here. Will auto close
}

Feel free to visit the docs on I²C support, and the full example.

3. Serial DSL

I know I’m messing with “taboos” right now, but I’ve just made Serial look nice. You guessed it right, it’s as simple as just a serial { … } block

serial(“/dev/ttyS0”) {
use_9600_N81()
dataBits_8()
parity(Parity.NONE)
stopBits(StopBits._1)
flowControl(FlowControl.NONE)
piGpioSerialProvider()
}.open {
// use here.
}

You know the drill, feel free to visit the docs on Serial support, and the full example.

4. Misc

Updated Pi4J to v2.3.0
Updated docs and examples


If you want to share feedback, or report a bug, feel free to discuss and open issues on the Github Repo!

The post Coroutines on the RaspberryPi (Pi4J-Kotlin) appeared first on foojay.