问题标签 [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.

0 投票
1 回答
332 浏览

java - Pi4j:SG90 没有完全转至 180°

我有这个 SG90 伺服电机(功能齐全且全新),它不能一直转动到 180°(或 0°)。当我试图让它从右到左(逆时针)转动时,它会中途停止。我已经检查了 4 次接线和硬件,所以问题可能出在代码中。我正在尝试通过带有 Pi4j 的树莓派 pi3 来控制伺服电机。

我已经尝试过更改接线,但我认为这不是问题。

我尝试使用的代码是我的,它所做的是发送 1ms 和 2ms 的 PWM。

现在到 2ms PWM

0 投票
1 回答
106 浏览

java - 有没有办法用输入定义引脚?

我正在尝试编程一种dmx controller,因此我得到了一个RaspberryPi,现在我想编写一个程序来控制一个 GPIO pi4j。这个想法是询问应该作为输出的 GPIO,将其保存在 int 中并重用它来告诉pi4j我希望哪个 GPIO 成为输出。

抱歉代码不好:)

我是一个母语为德语的人,所以println都是德语。

通常你的代码:

GpioPinDigitalOutput dmx_output = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01);

Java 说:

我也试过了switch/case,但这也不会

Java的错误:

0 投票
0 回答
84 浏览

java - Raspberry Pi 的微秒脉冲

尝试使用 Raspberry Pi/pi4j、wiringPi 输出 10 mhz 脉冲...

毫秒脉冲没问题

这适用于 Mac...不适用于安装了 pi4j 和 Wiringpi 的 Raspberry Pi:

0 投票
0 回答
81 浏览

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,所以我不必担心创建电机类的多个实例。

我仍在研究如何安排作业,因此代码非常不完整,但这基本上是我想要实现它的伪代码。

0 投票
1 回答
63 浏览

java - Pi4J 事件监听器独立应用程序

嗨,我想构建一个应用程序来监听 agpio pin上的状态变化raspberry pi。我如何创建一个永远不会终止但除了听什么都不做的java应用程序。聆听由handleGpioPinDigitalStateChangeEvent()from完成https://pi4j.com/1.2/usage.html

现在我while(true)在主程序中使用了一个空循环。我想更换它以提高性能,因为它运行在较旧的树莓派上。

感谢你们!

0 投票
2 回答
176 浏览

spring-boot - 使用 Springboot 和 ServoBlaster 控制 Raspberry Pi 上的伺服

我正在尝试从 Web 界面控制伺服电机。我正在使用SpringBoot 2.0、ServoBlasterpi4j

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

在简化的(只有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. 使用RPIServoBlasterProvider来自的类Springboot或者
  2. 写信给/dev/servoblaster或者
  3. 执行任何终端脚本?或者
  4. 在哪里保存脚本以便能够调用它
  5. 写入一个简单的文件(例如 afile.txt)? 或者
  6. 以一种我还没有考虑过的更好的方式解决这个问题。

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

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

0 投票
1 回答
54 浏览

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 构建的神经网络解决移动腿伺服电机的问题,读取各种输入信号,直到系统达到成功条件(静态平衡和身体处于水平位置)。

深入探讨这个话题,让我提供我的分析。

每条腿都应执行以下步骤:

每次可以独立移动一个舵机,从任意位置开始(在腿部允许的角度范围内)

每次移动后重新读取,所有腿段位置,等待下一个静态条件

确定最后一步是否给整个系统带来了优势或劣势。

如果由于上次移动而没有发生变化,请保留最新的更改/移动并继续

如果已达到任何最大角度,请更改该角度的方向,以便下一步移动

检查系统成功现在是否更接近上一步并确定下一个操作类型

对我来说,问题是一系列开放性问题,其中一个是如何从数据角度表示这个系统:

来自加速度计的数据都属于同一条腿上的伺服系统,是数据集群或机器人子系统的候选者?

每个舵机及其位置测量是否可以成为主系统的子系统?

这些问题真的可以是多个问题而不是一个吗?

你会如何从神经网络的角度来解决这个问题?

0 投票
1 回答
353 浏览

java - 须藤 java -jar 与 java -jar

我有一个在 Java 上运行的服务器,它使用库 Pi4j 来控制 RaspberryPi 的 GPIO 和一个我在其上写入当前 GPIO 状态的文件。当我从 IntelliJ IDE 运行代码时,一切正常。
但是当我创建 .jar 文件并运行它时

更新文件可以正常工作,但 GPIO 不会改变它们的状态。
当我做

GPIO 正确更改了它们的状态,但我收到错误java.io.FileNotFoundException: relStat.txt (Permission denied) 我的文件权限都设置为任何人,所以任何人都应该能够读取、修改和运行它。为什么会这样?


0 投票
1 回答
167 浏览

java - Pi4j 事件侦听器未由 GPIO 状态更改触发

我有一个简单的 Java 程序,它应该监听 GPIO 状态的变化。
我正在使用一个按钮来更改 GPIO 的状态,从终端我可以看到它有效: 在此处输入图像描述


尽管如此,事件监听器永远不会被触发。这是代码:

我正在使用 RaspberryPi 4 和最新版本的 Pi4j (1.2)。
有什么建议吗?

0 投票
0 回答
234 浏览

java - 使用 Netbeans 和 Pi4J 库的 Raspberry Pi 简单 Java 应用程序 (LED) 在构建后无法唤醒

有没有人可以帮助我解决这个问题?当我直接在 Netbeans 上运行 Java 应用程序时,它可以 100% 正常工作。我可以控制LED。但是当我构建项目并运行构建的 jar 文件时,应用程序会出现,但似乎每次单击按钮时它都无法控制 LED。

源代码: