树莓派遇上Java 01:总述篇
立泉本文时间久远,部分内容可能过时,仅供参考。
我是一个喜欢玩的人,尤其对遥控玩具情有独钟,小时候为看它们的工作原理不知有多少玩具被我大卸八块,但除了发现几块电路板、几节电池和一堆马达外总是一无所获。而且即使在我小时候,也能看到它们在设计和功能上存在的各种缺陷,特别想拥有一个可以完全自定义的大玩具。
三个月前,我获得一台树莓派,是一种为方便学生计算机教育而设计的卡片式电脑,机身集成RJ45
、USB
、HDMI
、AV
等接口和MicroSD
卡插槽,可以运行Linux
或Windows10 IoT
操作系统,配有的23个GPIO
针脚则为控制其它设备提供了无限的可能性。我买到的是RaspberryPi 3B
,板载蓝牙
和无线网卡
,淘宝200元左右。
对于操作系统,我接触过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
控制程序初期效果如下:
用到的配件淘宝上都能找到,需要自己接线并编写Linux
端和Android
端的控制程序。
在不依赖互联网的情况下,手机和树莓派
建立连接有两种方式,使它们处在同一个局域网中:
树莓派
和手机连接在同一个路由器上。树莓派
发射一个WiFi
热点,手机连接该热点。
一般对于这种移动机器人会使用第二种方式,不依赖固定路由器,准确的说,发射WiFi
的树莓派
就是路由器,通信距离内可以在任何地点遥控。如果要做接入互联网的IOT
设备从外网访问,则依赖路由器的端口映射
功能,或直接给它加上带物联网卡
的移动通信模块。
具体通信,我使用Java
原生的Socket
连接,通过IP
地址和端口
找到对应设备的对应软件,然后建立数据流
连接传输数据。但有一个小问题,如果Socket
连接中间意外断开,服务端和客户端是不会收到任何通知的,我在控制软件上用一个View
显示实时连接状态,它会检测定时发送的心跳包是否异常,在指定时间内收不到心跳即判断连接已经断开。
我在打造自己设备的那段时间里遇到很多陌生问题,但都被一一解决,不得不说,发现问题、解决问题的过程才是软件开发中最大的乐趣。有时候实现一种功能会有很多不同方案,这时就要比较取舍,以最高效简洁的方式解决实际问题。