? ? ? ? 前段時(shí)間幫朋友弄了一套Android自動(dòng)售賣(mài)機(jī)的App损姜,主要工作流程就是用戶在自動(dòng)售賣(mài)機(jī)的屏幕(App)上點(diǎn)擊物品元咙,然后App控制工控主機(jī)來(lái)控制售貨機(jī)電控執(zhí)行動(dòng)作施籍,將貨物吐出來(lái)仲吏。
這里主要就記錄一下如何讓Android和工控主機(jī)連接起來(lái)濒析,在百度正什,谷歌,github搜了很久号杏,沒(méi)有符合我的婴氮。
我主要是用到modbus rtu通訊協(xié)議斯棒,在github找到一個(gè)modbus rtu的但是就是連接不上工控主機(jī),最后發(fā)現(xiàn)他的代碼是不僅僅有java還有.so文件這時(shí)候我就感覺(jué)java如果想和工控主機(jī)連接主经,還是得底層C荣暮,于是我找到他們是通過(guò)jssc連接的,就去github找到了jssc原版的.h和.c文件罩驻,然后將這兩個(gè)文件編譯成.so文件穗酥,通過(guò)調(diào)用.so文件暴露出來(lái)的接口即可實(shí)現(xiàn)與Android與工控主機(jī)連接。
1.1這里有三個(gè)文件惠遏,把這三個(gè)文件放入jni文件夾中砾跃,然后進(jìn)jssc_SerialNativeInterface.h,將所有 Java_jssc_SerialNativeInterface改成 Java_你的主包名_jssc_SerialNativeInterface;
? 1.2進(jìn)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代碼來(lái)調(diào)用這個(gè).so抽高,但是jssc官方demo也太簡(jiǎn)單了,而且沒(méi)有任何分裝课锌,于是我在網(wǎng)上找到了一套很完美的demo厨内,經(jīng)過(guò)修改和編譯過(guò)的.so完美匹配祈秕,并且在MainActivity中寫(xiě)好了幾個(gè)常用的方法渺贤,例如配置modbus,讀串口请毛,寫(xiě)串口等志鞍,文章最后有g(shù)ithub鏈接。
當(dāng)你自己編譯之后方仿,如果出現(xiàn):
1.找不到native方法固棚,那就重新研究一下1.1和1.2,肯定是包名沒(méi)修改好仙蚜,細(xì)心修改此洲。
2. cannot locatesymbol "tcgetattr" referenced by "xxx",這是因?yàn)閚dk在android發(fā)展過(guò)程中出現(xiàn)了一次很大的改變委粉,tcgetattr 被刪掉了呜师。不要怕,這個(gè)庫(kù)文件我已經(jīng)有提供贾节,將其丟進(jìn)jni文件夾下即可汁汗。
示例代碼,點(diǎn)擊下載栗涂,麻煩star:示例代碼里面有termios.h文件