问题标签 [pi4j]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Pi4j:SG90 没有完全转至 180°
我有这个 SG90 伺服电机(功能齐全且全新),它不能一直转动到 180°(或 0°)。当我试图让它从右到左(逆时针)转动时,它会中途停止。我已经检查了 4 次接线和硬件,所以问题可能出在代码中。我正在尝试通过带有 Pi4j 的树莓派 pi3 来控制伺服电机。
我已经尝试过更改接线,但我认为这不是问题。
我尝试使用的代码是我的,它所做的是发送 1ms 和 2ms 的 PWM。
现在到 2ms PWM
java - 有没有办法用输入定义引脚?
我正在尝试编程一种dmx controller
,因此我得到了一个RaspberryPi
,现在我想编写一个程序来控制一个 GPIO pi4j
。这个想法是询问应该作为输出的 GPIO,将其保存在 int 中并重用它来告诉pi4j
我希望哪个 GPIO 成为输出。
抱歉代码不好:)
我是一个母语为德语的人,所以println
都是德语。
通常你的代码:
GpioPinDigitalOutput dmx_output = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01);
Java 说:
我也试过了switch/case
,但这也不会
Java的错误:
java - Raspberry Pi 的微秒脉冲
尝试使用 Raspberry Pi/pi4j、wiringPi 输出 10 mhz 脉冲...
毫秒脉冲没问题
这适用于 Mac...不适用于安装了 pi4j 和 Wiringpi 的 Raspberry Pi:
java - Java:如何在不创建多个实例的情况下访问也处理 gpio 初始化的类的方法
总之,我的项目是一个控制步进电机的 JavaFX 应用程序,由 RaspberryPi 使用 Pi4j 库控制。我的程序的第一个版本是通过终端运行的更简单的 Java 实现。在 v1 中,我有 2 个类:主类和电机类。电机的 gpio 初始化是在电机类和主类中的按钮中完成的。为了操作电机,我创建了电机类的实例并使用motor.run();
.
在 v2 中,我在程序中添加了一个调度程序,我正在尝试使用 Quartz API 来实现它,但现在我不仅需要从主类访问电机类,还需要从调度类访问电机类。在我的日程安排类中,我从 main 接收作业和触发器的参数,并且作业是motor.up()
or motor.down()
。我无法从静态上下文访问非静态方法是问题所在。如果我在计划内创建另一个电机实例,它将引发重新初始化 gpio 引脚的错误。
我无法在主类中初始化 gpio,因为那时我有相同的非静态到静态问题,从主初始化运行电机方法。
如果我在计划内创建一个 main 实例并像shade.motor.up()
我没有任何编译错误一样访问,但这似乎不正确,因为每次我创建一个新作业时都会创建一个主 GUI 的新实例。
是否有适当的方法来全局初始化 GPIO,所以我不必担心创建电机类的多个实例。
我仍在研究如何安排作业,因此代码非常不完整,但这基本上是我想要实现它的伪代码。
java - Pi4J 事件监听器独立应用程序
嗨,我想构建一个应用程序来监听 agpio pin
上的状态变化raspberry pi
。我如何创建一个永远不会终止但除了听什么都不做的java应用程序。聆听由handleGpioPinDigitalStateChangeEvent()
from完成https://pi4j.com/1.2/usage.html
现在我while(true)
在主程序中使用了一个空循环。我想更换它以提高性能,因为它运行在较旧的树莓派上。
感谢你们!
spring-boot - 使用 Springboot 和 ServoBlaster 控制 Raspberry Pi 上的伺服
我正在尝试从 Web 界面控制伺服电机。我正在使用SpringBoot 2.0、ServoBlaster和pi4j。
为了启动我以 root 身份运行的应用程序./gradlew bootrun --no-daemon
。它必须是 root 才能处理 GPIO,我对设备没有任何安全担忧。
在简化的(只有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
但没有成功。
所以问题是,有人能告诉我我怎么能:
- 使用
RPIServoBlasterProvider
来自的类Springboot
?或者 - 写信给
/dev/servoblaster
?或者 - 执行任何终端脚本?或者
- 在哪里保存脚本以便能够调用它或
- 写入一个简单的文件(例如 afile.txt)? 或者
- 以一种我还没有考虑过的更好的方式解决这个问题。
上述任何问题的解决方案都可以帮助我解决我的问题。
PS:stackoverflow中源代码的blockquote有什么问题吗?我无法将其格式化为一个块,我使用了行代码格式化!
spring - 四足蜘蛛实验
让我开始说我是神经网络、机器学习等方面的新手,到目前为止,我只做了一些非常简单的实验来学习,所以如果我提出非常幼稚或冗长的问题,请耐心等待。我最喜欢的编码语言是 java,我正在考虑使用 Weka。为了使用这个在我看来非常清晰和完整的 API,这一次,要拥有一组更理想的数据来训练和检查成功率,我不仅从软件开始,而且从现实世界的问题开始我为自己创造的。我创建的问题是我想用神经网络解决的问题,是一个由 Raspberry PI 控制的四足蜘蛛形机器人,带有一些 ADC 和伺服帽子。这种奇怪的机器人有 4 条腿,每条腿由 3 个部分组成,每个部分由一个伺服电机驱动。我总共有 4 条腿 * 3 条腿部件 = 12 台伺服电机。在每个伺服电机上,我连接了一个 3 轴模拟加速度计(总共 12 个),我可以从 Raspberry PI 读取数据。从这些加速度计中的每一个,我读取 2 轴以确定每个伺服的位置,即每条腿的每个腿段的位置。此外,4条腿的每条“脚底”都有一个按钮,用于确定腿是否已到达地板并支撑蜘蛛。蜘蛛构建博客在这里,对于那些感兴趣的人:4 条腿中的每条腿的“脚底”都有一个按钮,用于确定腿是否已到达地板并支撑蜘蛛。蜘蛛构建博客在这里,对于那些感兴趣的人:4 条腿中的每条腿的“脚底”都有一个按钮,用于确定腿是否已到达地板并支撑蜘蛛。蜘蛛构建博客在这里,对于那些感兴趣的人:https://thestrangespider.blogspot.com/ 这个实验的目的是让蜘蛛能够在任何条件下保持平衡和水平设置。简单地说,蜘蛛应该能够将其身体水平水平,而不管我是否将蜘蛛放在水平或倾斜的表面上。硬件平台已准备就绪,我错过了一些细节,但假设我可以使用 PI4J API 从 Java Spring Boot 应用程序读取我需要的所有信号以连接硬件(来自 ADC 的 24 个值,用于 12 个伺服和 4 个数字输入(真/假) 来自蜘蛛脚底的按钮)。其目的是使用 Weka 构建的神经网络解决移动腿伺服电机的问题,读取各种输入信号,直到系统达到成功条件(静态平衡和身体处于水平位置)。
深入探讨这个话题,让我提供我的分析。
每条腿都应执行以下步骤:
每次可以独立移动一个舵机,从任意位置开始(在腿部允许的角度范围内)
每次移动后重新读取,所有腿段位置,等待下一个静态条件
确定最后一步是否给整个系统带来了优势或劣势。
如果由于上次移动而没有发生变化,请保留最新的更改/移动并继续
如果已达到任何最大角度,请更改该角度的方向,以便下一步移动
检查系统成功现在是否更接近上一步并确定下一个操作类型
对我来说,问题是一系列开放性问题,其中一个是如何从数据角度表示这个系统:
来自加速度计的数据都属于同一条腿上的伺服系统,是数据集群或机器人子系统的候选者?
每个舵机及其位置测量是否可以成为主系统的子系统?
这些问题真的可以是多个问题而不是一个吗?
你会如何从神经网络的角度来解决这个问题?
java - 使用 Netbeans 和 Pi4J 库的 Raspberry Pi 简单 Java 应用程序 (LED) 在构建后无法唤醒
有没有人可以帮助我解决这个问题?当我直接在 Netbeans 上运行 Java 应用程序时,它可以 100% 正常工作。我可以控制LED。但是当我构建项目并运行构建的 jar 文件时,应用程序会出现,但似乎每次单击按钮时它都无法控制 LED。
源代码: