使用 Springboot 和 ServoBlaster 在 Raspberry Pi 控制伺服

Controlling a servo at Raspberry Pi with Springboot and ServoBlaster

我正在尝试从 Web 界面控制伺服电机。我正在使用 SpringBoot 2.0, ServoBlaster and pi4j

为了启动应用程序,我是 运行 root ./gradlew bootrun --no-daemon。它必须是 root 才能处理 GPIO,我对设备没有任何安全担忧。

在简化中(一个class只有main函数)Java/Kotlin我通过以下任何一种方式实现了对舵机的控制:

  1. RPIServoBlasterProvider

    val servoProvider = RPIServoBlasterProvider() val servo0 = servoProvider.getServoDriver(servoProvider.definedServoPins[5]) println("Go to 150") //middle servo0.servoPulseWidth = 150 println("Went to ${servo0.servoPulseWidth}") Thread.sleep(1550)

  2. 写入/dev/servoblaster

    val out = PrintWriter(FileOutputStream("/dev/servoblaster"), true) println("Go to 65 again") out.println("5=65") out.flush() out.close

  3. 调用写入 /dev/servoblaster

    的辅助脚本

    val servoId = 5 val script = "/home/pi/ServoHardwareSteering.sh" val cmdMinPosition = "$script $servoId 65" val cmdMidPosition = "$script $servoId 150" val cmdMaxPosition = "$script $servoId 235" val runtime = Runtime.getRuntime() println(cmdMidPosition) runtime.exec(cmdMidPosition)//.waitFor() Thread.sleep(1550)

  4. 将值写入文件并让二次执行读取该文件并将该值应用于伺服

我在 Springboot 中尝试了以上所有方法,但没有成功。

所以问题是,有人能告诉我我怎么能:

  1. 使用 Springboot 中的 RPIServoBlasterProvider class?
  2. 写入/dev/servoblaster
  3. 执行任何终端脚本?
  4. 在哪里保存脚本以便能够调用它
  5. 写入简单文件(例如 afile.txt)?
  6. 以我没有想到的更好的方式解决问题。

以上任何一个问题的解决方案都可以帮助我解决问题。

PS: Whosebug 中源代码的blockquote 有什么问题吗?我无法将其格式化为块,我使用了行代码格式化!

use the RPIServoBlasterProvider class from Springboot? OR

与您之前所做的相同 - 它的 Java(kotlin 基于) - 或者只是将 Kotlin 与 Spring https://spring.io/guides/tutorials/spring-boot-kotlin/

一起使用
write to /dev/servoblaster? OR

和你一样 - linux 中的所有内容都是一个文件,因此它写入一个普通文件

execute any terminal script? OR

Runtime.getRuntime.exec - 任何变体或 ProcessBuilder

where to save the script in order to be able to call it OR

任何地方

write to a simple file (ex. afile.txt)? OR

点 2.

solve the issue in a better way that I did not think about already.

没有使用 servo blaster 的经验。

整个问题出在 ServoBlasterservod 上。它不小心被杀了,我不得不再次运行它! 我遵循了 No 5 解决方案。