树莓派遇上 Java 01:总述篇

本文时间久远,部分内容可能过时,仅供参考。

我是一个喜欢玩的人,尤其对遥控玩具情有独钟,小时候为看它们的工作原理不知有多少玩具被我大卸八块,但除去发现几块电路板、几节电池和一堆马达外总是一无所获。而且小时候的我已经能看到它们在设计和功能上存在的各种缺陷,特别想拥有一个能完全自定义的大玩具。

三个月前我获得第一台树莓派,一种为方便学生计算机教育设计的卡片式电脑,机身配备 RJ45、USB、HDMI 等通用接口和 MicroSD 卡插槽,可以运行 Linux 和 Windows10 IoT 操作系统,侧面 23 个 GPIO 针脚则为控制其它设备提供无限可能性。我买到的是 RaspberryPi 3B,板载蓝牙和无线网卡,淘宝 200 元左右。

树莓派 RaspberryPi 3B

对于操作系统,我接触过 Linux,所以选择官方的 Raspbian,安装时只需依照说明把系统文件写入一张 MicroSD 卡插入树莓派即可。我身边没有显示器,只能用 Terminal 的 SSH 通过网络进行命令行操作,或借助 VNC-Viewer 这种远程桌面工具显示图形化界面,相关细节随后提到。

作为完整计算机的树莓派支持多种编程语言,最受欢迎的是 Python,但 Java 更合适我(实际上我只学过 Java 和 C++)。Raspbian 内置 JDK,操作 GPIO 则基于 Pi4J 项目,它把底层 C 接口用 JNI 封装为 Java 友好的面向对象 API。Java 一直宣称具有“一次编译,到处运行”的跨平台性,所以操作树莓派的最佳方式是在 PC 上用 Intellij IDEA 等成熟 IDE 编程并生成 JAR 包,再用 FileZilla 之类的 FTP 工具传输到树莓派运行。

借助 GPIO 接口,树莓派可以控制很多诸如传感器、马达、舵机、LED 灯珠等外围设备,为软硬结合带来无限可能性。近些年虽然不断有类似的廉价设备出现,但都无法复制它在开源社区的核心优势,有无数开发者贡献代码,各种框架、套件层出不穷,可玩性和易用性是其它设备不可比肩的。大部分玩家通常把树莓派用作物联网计算中枢制成轮式或仿形机器人,普通人能用自己的双手体验“创造”,其中乐趣自然无穷。

我用它做了一台配备机械手和摄像头的履带式机器人,由 Android 软件控制,还有一些传感器没来得及安装,初期效果如下:

树莓派 RaspberryPi 机器人 Robot

树莓派 RaspberryPi Android

用到的配件淘宝上都能找到,需要自己接线并编写 Linux 端和 Android 端控制程序。

在不依赖互联网的情况下,手机和树莓派建立连接有两种方式,必须处在同一个局域网中:

  1. 树莓派和手机连接在同一个路由器上。
  2. 树莓派发射一个 WiFi 热点,手机连接该热点。

一般移动机器人会使用第二种方式,不依赖固定路由器,或者说发射 WiFi 的树莓派本身就是路由器,通信距离内可以在任何地点遥控。如果要做接入互联网的 IOT 设备从外网访问,可使用路由器的端口映射功能,或直接给它加上带物联网卡的移动通信模块。

具体通信实现,我使用 Java 原生的Socket连接,通过 IP 地址和端口找到对应设备的对应软件建立数据流连接传输数据。但有一个小问题,如果Socket连接意外断开,原生的ServerClient不会收到任何通知。我在控制器上用一个View显示实时连接状态,它会检测定时发送的心跳包是否异常,在指定时间内收不到心跳即判断连接断开。

我在打造自己的设备时遇到很多陌生问题,但都被一一解决,发现问题、解决问题的过程其实也是软硬件创造中的独特乐趣。

arrow_upward