RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 608977
Accepted
Dmitriy Mironov
Dmitriy Mironov
Asked:2020-12-29 01:50:21 +0000 UTC2020-12-29 01:50:21 +0000 UTC 2020-12-29 01:50:21 +0000 UTC

微控制器和Java

  • 772

对这个问题感兴趣。假设我的桌子上有某种按钮。什么微控制器,设备等。可以用来实现这个按钮和java?

java
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Nofate
    2020-12-29T21:32:41Z2020-12-29T21:32:41Z

    由于 Java 最初是为冰箱和咖啡机编程而开发的,如果完全失去了与铁打交道的能力,那才奇怪。

    将按钮连接到微控制器的最简单选择是 GPIO 端口,这在嵌入式世界中很普遍。该按钮的一个触点连接到端口引脚,另一个连接到地面 (GND)。然后微控制器要么自己做一些事情,要么通过 UART/USB/以太网/WiFi/蓝牙向其他地方发送有关按下按钮的消息。

    直接上熨斗,有以下几种选择。

    1. 使用专为 Java 优化的微控制器。

      是的,有。例如,Centerion 系列的 3G 模块。固件是一个 Java ME MIDlet,也可以通过无线方式上传。在端口上监听看起来像这样:

      Vector inPins = new Vector();
      inPins.addElement("GPIO11");
      
      InPort inPort = new InPort(inPins);  
      inPort.addListener(new InPortListener() {
          public void portValueChanged(int val) {
              System.out.println("Port value: " + val);
          }
      });
      

    1. 使用基于 ARM 处理器的成熟通用嵌入式系统,例如 BeagleBone 或 RaspberryPi。

      在那里,您将拥有一个完整的 Linux,可以选择安装完整的 Java SE 或 Java SE Embedded。端口将通过文件系统作为/sys/class/gpio/gpio49. 您可以通过普通文件 I/O(相对较慢,但足以完成许多任务)或通过内存映射文件的直接内存访问/dev/mem(速度很快)与端口交互。

      但是使用第三方pi4j库的传播API会好很多:

      GpioController gpioController = GpioFactory.getInstance();
      GpioPinDigitalInput pin02 = gpioController.provisionDigitalInputPin(RaspiPin.GPIO_02,PinPullResistance.PULL_DOWN);
      pin02.addListener(new GpioPinListenerDigital() {
          @Override
          public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent gpioPinDigitalStateChangeEvent) {
              System.out.println("state: " + gpioPinDigitalStateChangeEvent.getState());
          }
      });
      

      另外还有Java ME Embedded,在包中提供了原生的端口访问API com.oracle.deviceaccess:

      GPIOPin switchPin = null;
      switchPin = (GPIOPin) PeripheralManager.open(1);
      switchPin.setInputListener(new PinListener() {
          @Override
          public void valueChanged(PinEvent event) {
             // do something
          }
      });
      

      对了,这里的生活不局限于ARM,还有MIPS和Intel Atom。但是方法是一样的。

      第三方基于 Java 的软件平台看起来很有趣:

      • 微电子。Youtube 上有一个视频,其中带有图形的 Java 应用程序在非常弱的硬件(Cortex™-M0+ @48 MHz、256 KB 闪存、32 KB RAM)上运行。

      • Google 的Android Things,以前称为 Brillo。


    1. 令人惊讶的是,Java 可以为 8 位 AVR 微控制器(与构建 Arduino 的微控制器相同)编写!

      这要归功于HaikuVM,它将 Java 字节码从 .class 文件转换为 C 结构,将解释器链接到它们并生成 AVR 微控制器常用的 HEX 文件,该文件像往常一样缝入硬件中。

      还有:

      • NanoVM是一个 Java 子集虚拟机,占用 8 kB 闪存。

      • uJ - 这个 VM 更大(几十 KB),但承诺完整的字节码支持、多线程和synchronized.

      如果您想将一个按钮连接到 Arduino,然后将它连接到计算机并通过触摸按钮在计算机上执行某些操作,请尝试JArduino。此 API 要求您将固件上传到 Arduino,之后您可以通过计算机上的常规 Java 程序与设备进行交互。

    • 12

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5