树莓派遇上Java 01:总述篇

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

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

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

树莓派 RaspberryPi 3B

对于操作系统,我接触过Linux,所以选择树莓派官方的Raspbian,安装过程很简单,只需按照说明把系统文件拷录到一张MicroSD卡上,再将卡插入树莓派即可。我身边没有显示器,只能用TerminalSSH通过网络进行命令行操作,或用VNC-Viewer这种远程桌面软件来显示图形化界面,相关细节随后提到。

树莓派支持多语言编程,最受欢迎的是Python,但对我而言Java才是最合适的(实际上我只学过JavaC++)。Raspbian自身集成JDK,对GPIO的操作则基于Pi4J项目,它对底层C接口用JNI进行封装,旨在为Java开发提供友好的面向对象APIJava一直宣称具有良好的跨平台性,所谓“一次编译,到处运行”,所以操作树莓派最好的方法就是在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连接中间意外断开,服务端和客户端是不会收到任何通知的,我在控制软件上用一个View显示实时连接状态,它会检测定时发送的心跳包是否异常,在指定时间内收不到心跳即判断连接已经断开。

我在打造自己设备的那段时间里遇到很多陌生问题,但都被一一解决,不得不说,发现问题、解决问题的过程才是软件开发中最大的乐趣。有时候实现一种功能会有很多不同方案,这时就要比较取舍,以最高效简洁的方式解决实际问题。

arrow_upward