Android新手,在學習scoket套接字編程。我正在寫一個用Arduino開發板獲取資料并將資料通過wifi傳送到手機上的專案,現在android可以向wifi發送資料,然后Arduinno可以將傳感器獲取到的資料列印在串口上。請問各位大神,我在Android端怎么能拿到串口上的資料?
下面是專案的部分程序和部分代碼:
1.Android端:
public class MainActivity extends AppCompatActivity {
private EditText mEtIp,mEtData;
private TextView tv;
private OutputStream mOutputStream = null;
private InputStream mInputStream=null;
private Socket mSocket = null;
private String ip;
private String data;
private boolean socketStatus = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEtIp = findViewById(R.id.et_ip);
mEtData = findViewById(R.id.et_data);
}
public void connect(View view) {
ip = mEtIp.getText().toString();
Toast.makeText(MainActivity.this,""+ip,Toast.LENGTH_SHORT).show();
Thread thread = new Thread() {
@Override
public void run() {
super.run();
if (!socketStatus) {
try {
//連接服務端
mSocket = new Socket(ip,2001);
if(mSocket != null){
socketStatus = true;
}
mOutputStream = mSocket.getOutputStream();
mInputStream=mSocket.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
}
}
};
thread.start();
}
public void send(View view){
data = mEtData.getText().toString();
Toast.makeText(MainActivity.this,""+data,Toast.LENGTH_SHORT).show();
if (data != null) {
data = data + '\0';
}
Thread thread = new Thread(){
@Override
public void run() {
super.run();
if(socketStatus){
try {
mOutputStream.write(data.getBytes());
// 問題就在這兒,我想通過輸入流獲取串口內的資料,但是獲取不到,而且Log列印出來的是中文亂碼,但我串口里沒有中文
byte[] buffer = new byte[mInputStream.available()];
mInputStream.read(buffer);
String s1=new String(buffer);
Log.i("context",s1);
} catch (IOException e) {
e.printStackTrace();
}
}
}
};
thread.start();
}
/*當客戶端界面回傳時,關閉相應的socket資源*/
@Override
public void onBackPressed() {
super.onBackPressed();
/*關閉相應的資源*/
try {
mOutputStream.close();
mSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static String readStream(InputStream in) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = in.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
String content = baos.toString();
in.close();
baos.close();
return content;
} catch (Exception e) {
e.printStackTrace();
return e.getMessage();
}
}
}
這是android端的界面,通過輸入ip地址連接wifi,再通過發送按鈕發送想獲取的資料

這是串口除錯軟體,我在android發送的資料以后,Arduino開發板將我希望的得到的資料列印到了串口上,我現在就想在手機端獲取到這些資料。

請問大神們,有沒有方法讓我在Android端獲取到串口除錯軟體里的這些資料??謝謝了
uj5u.com熱心網友回復:
JAVA怎么可能實作讀寫串口?需要通過C/C++來支持,即通過JNI橋接,這里有個GOOGLE開源的,你參考一下:
https://code.google.com/p/android-serialport-api/
uj5u.com熱心網友回復:
看看。。。。。轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/151216.html
標籤:Android
