树莓派部署踩坑记录

树莓派部署踩坑记录

  1. 硬盘扩容

工控机开机,ssh登录成功后,上传JDK安装包,失败,查看硬盘空间:

可用空间没多少了,连装个JDK都不够,然而使用sudo fdisk -l 命令查看磁盘

这还有14.6GB的盘,是磁盘空间没有分配挂载?

那就按照磁盘挂载的套路来一遍,重新分区,格式化,挂载,但是没有成功。

仔细观察,这个空间应该已经分配挂载完成了,但是为什么没有读取出来。

想起来工控机之前重新烧录过,可能导致部分磁盘空间不能读取,需要扩容,参考这个链接:

https://blog.csdn.net/wy_bk/article/details/86751299

这上面的命令并不能生效,在网上找了一通命令,反复尝试,总算找到能用的了

sudo resize2fs /dev/mmcblk0p2 12G

磁盘扩容成功,多了12G,够用了

2. JDK安装

把之前在Linux上安装的JDK安装包上传,解压,配置环境完成,java命令不能正常执行。。。

检查了环境变量配置都没有问题,这个jdk包在云服务器、自己的PC上使用都没有问题,是不是机器的架构不一样,一查果然是,工控机是arm架构,去oracle下载一个arm版本的jdk

      上传解压后,java命令执行正常。

      测试了我们的java程序可以在工控机上正常运行。

 

3. 485串口调试

 

第一步:测试串口是否正常

先参考工控机软件使用文档,工控机上有2个485串口,把2个串口连接起来互相发送数据,确认串口正常。

分别连接 B1B2A1A2,对发对收来测试 RS485

接口的收发数据,系统上电后,打开终端,在终端中输入以下命令测试:

打开 B1A1 接口的 485,发送“ttyAMA1 send”:

sudo minicom -8 -b 115200 -D /dev/ttyAMA1

打开 B2A2 接口的 485,发送“ttyAMA2 send”:

sudo minicom -8 -b 115200 -D /dev/ttyAMA2

如下图所示:

2个串口都可以接收到对方发送过来的数据,串口工作正常

(实际使用的时候,发现A1B1口对应/dev/ttyAMA2,A2B2口对应/dev/ttyAMA1,应该是这2个口搞反了,实际使用的时候要进行充分测试,确定实际的串口对应哪个文件

 

第二步:准备串口通信测试程序

在Windows(我的工作电脑)上写一个串口测试程序,运行程序和工控机通过485通信,我这里用了一个485转USB的线,长这样

通讯成功,我的测试程序和工控机的485串口能够双向发送数据。

 

第三步:将485测试程序打包到工控机上运行

这一步按说也并不复杂,将RXTXcomm.jar引入java程序,然后到网上下载librxtxSerial.so动态库文件放入/usr/lib目录下(Windows下就是dll文件),启动程序,报错,java程序不认识这个so文件。。。

应该还是arm架构的问题,到这个链接去下载:

http://users.frii.com/jarvi/rxtx/download.html

这里,下载解压后进入Linux目录,下面有3个目录,对应3种架构的Linux

光看名字,不确定哪个是支持arm架构的,嗯。。,一个一个传上去试吧,也不多。

试完了,没有一个能用的。。。

继续在官网上翻翻,点击ToyBox进去,到了这个目录下

再点击Linux进来,

有这么多,支持arm架构的原来都在这里啊

仍然不确定具体用哪个,不过总有一个是能用的,一个一个来吧。

很快我把所有包含arm的so库文件都尝试完了,依然没有一个能用的。。。

不知道咋搞了。。。

不过除了arm的,还有这么多没试过

虽然名字里没有arm,运气好的话,总有一个能用的吧,硬着头皮继续一个一个下载下来试试。

然后2个多小时过去了,嗯。。。

不要干这种傻事!

只有一条路了,把rxtx的源码下载下来,在工控机上自己编译一个so库文件出来,如果能够编译成功的话,肯定是可以用的。

源码依然是在官网下载,下载解压之后,进入目录:

东西很多,先别慌,先找configure文件,在src目录下

进入src目录,然后闭着眼睛

./configure

make

make install

三连

果然编译失败,不出意外的一堆报错

有错误解决错误吧

错误一:

/tmp/rxtx-2.1-7r2/./src/RS485Imp.c:96:25: error: 'UTS_RELEASE' undeclared (first use in this function)

  if(strcmp(name.release,UTS_RELEASE)!=0)

这是由于 version.h 中缺少 UTS_RELEASE 信息,需要手工添加。先获取当前系统的版本信息:

然后在 /usr/include/linux/version.h 中添加

#define UTS_RELEASE "5.4.83-v7l+"

错误二:

libtool: install: armv6l-unknown-linux-gnu/librxtxRS485.la’ is not a directory

 

这个错误会出现在JDK1.6及以上的运行环境下,需要对configure文件进行修改。在configure文件中找到所有的1.2*|1.3*|1.4*|1.5* ,将现有的JDK版本加入进去即可.如:改成 1.2*|1.3*|1.4*|1.5*|1.6*|1.7*|1.8* 。

 

解决完这两个错误后,继续

./configure

make

make install

三连

编译成功!

可以看到so文件已经自动打包到jre目录下

怀着喜悦的心情启动串口通信程序,没有报错:

等下,扫描出来的串口,没有485、232的?

看下系统中的串口设备

485串口对应的/dev/ttyAMA1/dev/ttyAMA2,然而我的程序并没有识别到这几个串口,怎么会识别不了呢,串口明明就在那里啊,咋就没扫描出来 。

为了是不是程序的问题,虽然又纠结了很久,但确实不是程序的问题

解决方法:

进入rxtx源代码的src目录,找到RXTXCommDriver.java这个文件

修改源码

然后再来一次

./configure

make

make install

编译完成后,启动程序

485串口可以被识别出来了,串口通讯测试成功,没有问题了

485调通了之后,232应该就好弄了,套路类似吧。

相关的链接放出来:

https://blog.csdn.net/xiaolicd/article/details/98114113

https://blog.csdn.net/h4241778/article/details/107677700?utm_term=java%E4%B8%B2%E5%8F%A3arm&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduweb~default-0-107677700&spm=3001.4430

https://blog.csdn.net/qq_42865331/article/details/90264722

 

 

4.继电器调试

测试继电器之前,先了解下gpio引脚这些概念(硬件架构不懂,说多了都是泪)

要用java调用继电器,需要先安装WiringPi原生库、pi4j

WiringPi原生库已经在工控机上安装好了,安装pi4j,执行以下命令即可

curl -s get.pi4j.com | sudo bash

安装完成后,库在以下这个目录

/opt/pi4j/lib

库里有大量的java范例程序,在目录下

/opt/pi4j/examples

照着例子折腾吧。

测试继电器的话,一般需要一个led灯,我手头没有,用EIO控制盒的开关量输入来接收继电器信号。

中间亮的绿灯, 就是继电器接通之后会亮,然后用java程序控制继电器信号,进而控制信号灯。查询文档,控制继电器的引脚是gpio22

这里有个坑,java按照gpio22来发送信号,怎么发信号灯都没反应。

我用Python代码发送信号到22,可以实现控制信号灯,然而在java代码中同样控制22确没有任何效果。

是程序有问题,还是gpio的库有问题,继而改代码,换版本,改配置,又是一通不堪回首的折腾。。。

会不会是引脚用的不对,只能用笨方法,把所有的引脚扫描出来,一个一个试哪个能生效:

试到GPIO 3的时候,居然可以了!

用java调用继电器,正确的gpio竟然是3,但是用Python代码,又是22

这么诡异吗?

是因为gpio引脚有两种编码方式

python里设的是用bcm编码,java是用的PI4J库,是依赖wiringpi封装而成的,编码不一样,对应的GPIO引脚也不一样。

好吧,又学习到了。

继电器也可以正常控制了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值