1. 程式人生 > >Android的串列埠通訊測試程式

Android的串列埠通訊測試程式

   現在有很多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;
	}

其他的沒有特別注意的了。

歡迎點贊!