前段时间帮朋友弄了一套Android自动售卖机的App,主要工作流程就是用户在自动售卖机的屏幕(App)上点击物品,然后App控制工控主机来控制售货机电控执行动作,将货物吐出来。
这里主要就记录一下如何让Android和工控主机连接起来,在百度,谷歌,github搜了很久,没有符合我的。
我主要是用到modbus rtu通讯协议,在github找到一个modbus rtu的但是就是连接不上工控主机,最后发现他的代码是不仅仅有java还有.so文件这时候我就感觉java如果想和工控主机连接,还是得底层C,于是我找到他们是通过jssc连接的,就去github找到了jssc原版的.h和.c文件,然后将这两个文件编译成.so文件,通过调用.so文件暴露出来的接口即可实现与Android与工控主机连接。
1.1这里有三个文件,把这三个文件放入jni文件夹中,然后进jssc_SerialNativeInterface.h,将所有 Java_jssc_SerialNativeInterface改成 Java_你的主包名_jssc_SerialNativeInterface;
1.2进jssc.cpp,将所有 Java_jssc_SerialNativeInterface改成 Java_你的主包名_jssc_SerialNativeInterface且将#include "../jssc_SerialNativeInterface.h"改成"#include "jssc_SerialNativeInterface.h"";
具体怎么编译看这里:如何编译.so
下载.h和.c的的github连接:这里下载jssc.h和jssc.cpp
编译之后,还需要有一些java代码来调用这个.so,但是jssc官方demo也太简单了,而且没有任何分装,于是我在网上找到了一套很完美的demo,经过修改和编译过的.so完美匹配,并且在MainActivity中写好了几个常用的方法,例如配置modbus,读串口,写串口等,文章最后有github链接。
当你自己编译之后,如果出现:
1.找不到native方法,那就重新研究一下1.1和1.2,肯定是包名没修改好,细心修改。
2. cannot locatesymbol "tcgetattr" referenced by "xxx",这是因为ndk在android发展过程中出现了一次很大的改变,tcgetattr 被删掉了。不要怕,这个库文件我已经有提供,将其丢进jni文件夹下即可。
示例代码,点击下载,麻烦star:示例代码里面有termios.h文件