使用 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我通过以下任何一种方式实现了对舵机的控制:
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)
写入/dev/servoblaster
val out = PrintWriter(FileOutputStream("/dev/servoblaster"), true)
println("Go to 65 again")
out.println("5=65")
out.flush()
out.close
调用写入 /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)
将值写入文件并让二次执行读取该文件并将该值应用于伺服
我在 Springboot
中尝试了以上所有方法,但没有成功。
所以问题是,有人能告诉我我怎么能:
- 使用
Springboot
中的 RPIServoBlasterProvider
class? 或
- 写入
/dev/servoblaster
? 或
- 执行任何终端脚本? 或
- 在哪里保存脚本以便能够调用它或
- 写入简单文件(例如 afile.txt)? 或
- 以我没有想到的更好的方式解决问题。
以上任何一个问题的解决方案都可以帮助我解决问题。
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 的经验。
整个问题出在 ServoBlaster
的 servod
上。它不小心被杀了,我不得不再次运行它!
我遵循了 No 5 解决方案。
我正在尝试从 Web 界面控制伺服电机。我正在使用 SpringBoot 2.0, ServoBlaster and pi4j。
为了启动应用程序,我是 运行 root ./gradlew bootrun --no-daemon
。它必须是 root 才能处理 GPIO,我对设备没有任何安全担忧。
在简化中(一个class只有main
函数)Java/Kotlin我通过以下任何一种方式实现了对舵机的控制:
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)
写入
/dev/servoblaster
val out = PrintWriter(FileOutputStream("/dev/servoblaster"), true) println("Go to 65 again") out.println("5=65") out.flush() out.close
调用写入
的辅助脚本/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)
将值写入文件并让二次执行读取该文件并将该值应用于伺服
我在 Springboot
中尝试了以上所有方法,但没有成功。
所以问题是,有人能告诉我我怎么能:
- 使用
Springboot
中的RPIServoBlasterProvider
class? 或 - 写入
/dev/servoblaster
? 或 - 执行任何终端脚本? 或
- 在哪里保存脚本以便能够调用它或
- 写入简单文件(例如 afile.txt)? 或
- 以我没有想到的更好的方式解决问题。
以上任何一个问题的解决方案都可以帮助我解决问题。
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 的经验。
整个问题出在 ServoBlaster
的 servod
上。它不小心被杀了,我不得不再次运行它!
我遵循了 No 5 解决方案。