Android的串列埠通訊測試程式
阿新 • • 發佈:2018-12-23
現在有很多Android屏作為主站給單片機發送命令,第一步就是需要串列埠通訊,這裡主要是記錄232串列埠通訊的方法。只要通訊成功了,就可以進一步研究modbus協議通訊或者其他協議。
長話短說,直接進入正題。串列埠通訊基本原理就是開啟串列埠,通訊,關閉串列埠。這裡可以參考我以前寫過的文件:網址:http://blog.csdn.net/sky_918/article/details/50474151。
可以直接上程式碼
然後就是傳送資料和接收資料@Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); // tyy 關閉串列埠 mApplication.closeSerialPort(); } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); // tyy 開啟串列埠 mSerialPort = mApplication.getSerialPort(); mOutputStream = mSerialPort.getOutputStream(); mInputStream = mSerialPort.getInputStream(); }
傳送資料程式碼如下
/** * tyy 傳送資料 */ private void toSendData() { // TODO Auto-generated method stub String data = "1234567890";//tyy 預設傳送資料 String data1 = edSendData.getText().toString(); if (data1.length() > 0) { try { mOutputStream.write(data1.getBytes()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { try { mOutputStream.write(data.getBytes()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
接收資料程式碼如下
public class ReadThread extends Thread { byte[] buf = new byte[1024]; @Override public void run() { super.run(); int size; final String a; System.out.println("進入方法中" + mInputStream); if (mInputStream == null) { return; } try { size = mInputStream.read(buf); // tyy 輔助陣列 byte[] buf1 = new byte[size]; for (int i = 0; i < size; i++) { buf1[i] = buf[i]; } a = new String(buf1); handler1.post(new Runnable() { @Override public void run() { // TODO Auto-generated method stub showData.setText(a); } }); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
佈局很簡單就不上了。
重點是一些需要用的jni檔案和lib檔案如下圖,你需要注意
相信大家都明白了。
還要注意一些東西:
第一個包名不可以更改,因為這裡的包名和jni裡的.h .c有用到,建議不要改。
注意這裡的串列埠路徑需要修改成你自己Android裝置的串列埠路徑。
<span style="color:#ff0000;">//dev/ttyAMA1這是我的串列埠路徑,你請注意修改</span>
public SerialPort getSerialPort() {
if (mSerialPort == null) {
/* Open the serial port */// 串列埠的路徑,波特率 ,校驗位
// mSerialPort = new SerialPort(new File("//dev/ttyAMA1"), 9600, 0);
try {
mSerialPort = new SerialPort(new File("/dev/ttyAMA1"), 9600, 0);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return mSerialPort;
}
其他的沒有特別注意的了。
歡迎點贊!