สวัสดีครับทุกท่าน วันนี้ผมจะมาแนะนำการเขียนโปรแกรมส่งข้อมูลผ่านทาง Bluetooth บนโทรศัพท์ Android กันนะครับ เริ่มกันที่เราจะเขียน Class ที่เป็นตัวรวมการเชื่อมต่อและส่งข้อมูล Bluetooth กันนะครับ ซึ่งโค๊ดบางส่วนได้นำมาจากตัวอย่างหลายๆตัวอย่างบนอินเตอร์เนตมารวมเป็น Class เพื่อให้เรียกใช้งานกันอย่างง่ายๆนะครับ
package com.mekameka.bluetoothsample;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;public class BluetoothController {/*Private Variables*/
private BluetoothAdapter btAdapter = null;
private BluetoothSocket btSocket = null;
private BluetoothDevice btDevice = null;
private OutputStream outStream = null;
private InputStream inStream = null;
private byte[] inputBuffer = new byte[1024];/*Global Variable*/int inputSize = 0;/*Status Flag*/public boolean isInitial = false;public boolean isConnect = false;public boolean isEnabled = false;public boolean isSent = false;public boolean isRecieved = false;public BluetoothController( ){/*Constructor*/}public void BluetoothInit(String BT_UUID, String MAC){btSocket = null;isInitial = false;UUID LC_UUID = UUID.fromString(BT_UUID);btAdapter = BluetoothAdapter.getDefaultAdapter();btDevice = btAdapter.getRemoteDevice(MAC);if (btAdapter == null) {isInitial = false;}if (!btAdapter.isEnabled()) {isInitial = false;}else if (btAdapter.isEnabled()){isEnabled = true;try{btSocket = btDevice.createRfcommSocketToServiceRecord(LC_UUID);}catch (IOException e){}btAdapter.cancelDiscovery();}isInitial = true;}public void BluetoothConnect(){isConnect = false;try{btSocket.connect();}catch (IOException e){try{btSocket.close();}catch (IOException e2){isConnect = false;}}isConnect = true;}public void BluetoothSend(String message){isSent = false;byte[] outBuffer = message.getBytes();try{outStream = btSocket.getOutputStream();}catch (IOException e){isSent = false;}try{outStream.write(outBuffer);}catch (IOException e){isSent = false;}if (outStream != null){try{outStream.flush();}catch (IOException e){isSent = false;}}isSent = true;}public byte[] BluetoothRecieve(){isRecieved = false;try{inStream = btSocket.getInputStream();inputSize = inStream.read(inputBuffer);}catch (IOException e) {isRecieved = false;}isRecieved = true;return inputBuffer;}public void BluetoothDisconnect()
{
isConnect = true;
try
{
btSocket.close();
}
catch (IOException e2)
{
isConnect = true;
}
isConnect = false;
}
}เมื่อสร้าง Class BluetoothController เรียบร้อยแล้วเราก็ไปเรียกใช้ใน Activity ของเรากันเลยครับ
โดยขั้นแรกเริ่มจากเรียกใช้เมธอด BluetoothInit(String BT_UUID, String MAC) เพื่อทำการ Initial ค่าเริ่มต้นให้บลูธูทบนโทรศัพท์ Android ก่อนนะครับ โดย BT_UUID ที่ผมใช้ทดสอบจะเป็น 00001101-0000-1000-8000-00805F9B34FB และ MAC จะเป็น Address ของ Bluetooth ของตัวที่เราจะทำการติดต่อด้วยนะครับ เช่นของผมทำการเชื่อมต่อกับ Bluetooth Module มี MAC เป็น 00:19:5D:EE:32:67 หลังจากใช้เมธอด Initial ค่าแล้วต่อไปก็ใช้เมธอด BluetoothConnect() เพื่อทำการเชื่อมต่อไปยัง Bluetooth ตัวปลายทาง ถ้าการเชื่อมต่อสำเร็จก็สามารถใช้เมธอด BluetoothSend(String sendTxt) ทำการส่งข้อมูลไปยัง Bluetooth Module ปลายทางได้เลยครับโดยจะส่งข้อมูลในรูปแบบ String ไปนะครับ ส่วนการรับข้อมูล นั้นจะรับผ่านเมธอด BluetoothRecieve() นะครับโดยจะรีเทอร์นค่ามาเป็นข้อมูลประเภท byte[] นะครับทางด้านฝั่งรับนี้เรามักจะเขียนเป็น Thread เพื่อรอรับข้อมูลตลอดเวลาครับ เมื่อเราเราต้องการจะยกเลิกการเชื่อมต่อก็เรียกใช้เมธอด BluetoothDisconnect() เพื่อทำการยกเลิกการเชื่อมต่อครับด้านล่างจะเป็นตัวอย่างการเรียกใช้งานเมธอดต่างๆใน Activity นะครับ
package com.mekameka.bluetoothsample;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener , Runnable{
private static String testUUID = "00001101-0000-1000-8000-00805F9B34FB";//Test UUID
private static String address = "00:19:5D:EE:32:67"; //Target Device MacAddress
String message = "HelloWorld!\nMekameka! \n"; //Demo Message
boolean threadRun = false;/*Widget Declaration*/
Button sendBtn = null;
Button connectBtn = null;
Button disconnectBtn = null;
EditText sendTxtBox = null;
ListView recievedLbl = null;
TextView rxTitle = null;
private ArrayAdapter mConversationArrayAdapter;/*Initial Object*/
BluetoothController btComm = new BluetoothController();
Thread rxThread = new Thread(this);
public static final int MESSAGE_READ = 2;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);sendBtn = (Button)findViewById(R.id.sendBtn);connectBtn = (Button)findViewById(R.id.connectBtn);disconnectBtn = (Button)findViewById(R.id.disconnectBtn);sendTxtBox = (EditText)findViewById(R.id.sendTextBox);recievedLbl = (ListView) findViewById(R.id.in);rxTitle = (TextView)findViewById(R.id.rxTitle);mConversationArrayAdapter = new ArrayAdapter(this, R.layout.message);recievedLbl.setAdapter(mConversationArrayAdapter);sendBtn.setOnClickListener(this);connectBtn.setOnClickListener(this);disconnectBtn.setOnClickListener(this);sendBtn.setEnabled(false);disconnectBtn.setEnabled(false);btComm.BluetoothInit(testUUID, address);mConversationArrayAdapter.clear();}@Overridepublic void onClick(View wdg) {if(wdg.getId() == R.id.connectBtn){if(btComm.isInitial){btComm.BluetoothConnect();Toast.makeText(this, "Connected!", Toast.LENGTH_SHORT).show();sendBtn.setEnabled(true);disconnectBtn.setEnabled(true);connectBtn.setEnabled(false);//recievedLbl.setText("Hello World");mConversationArrayAdapter.add("Hello World!");/*Initial Recieved Thread*/if (rxThread.isAlive()){threadRun = true;}else{threadRun = true;rxThread.start();}}else{Toast.makeText(this, "Cannot Connect", Toast.LENGTH_SHORT).show();finish();}}else if (wdg.getId() == R.id.sendBtn){if(btComm.isConnect){btComm.BluetoothSend(sendTxtBox.getText().toString());mConversationArrayAdapter.add(sendTxtBox.getText().toString());Toast.makeText(this, "Data Sent!", Toast.LENGTH_SHORT).show();}else{Toast.makeText(this, "Cannot Send Data", Toast.LENGTH_SHORT).show();finish();}}else if (wdg.getId() == R.id.disconnectBtn){threadRun = false;//rxThread.btComm.BluetoothDisconnect();if (btComm.isConnect == false){Toast.makeText(this, "Disconnected!", Toast.LENGTH_SHORT).show();sendBtn.setEnabled(false);disconnectBtn.setEnabled(false);connectBtn.setEnabled(true);}else{Toast.makeText(this, "Cannot Disconnect", Toast.LENGTH_SHORT).show();}}}@Overridepublic void run() {// TODO Auto-generated method stubbyte[] buffer = new byte[1024]; // buffer store for the streamwhile (threadRun == true){buffer = btComm.BluetoothRecieve();String readMessage = new String(buffer, 0, buffer.length);//handler.sendEmptyMessage(0);try {rxThread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}handler.obtainMessage(MESSAGE_READ, buffer.length, -1, readMessage).sendToTarget();}}private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch(msg.what){case MESSAGE_READ:// Read in string from message, display to mainText for userString readMessage = (String) msg.obj;if (msg.arg1 > 0) {mConversationArrayAdapter.add(readMessage);rxTitle.setText(readMessage);}}}
};
}ตามด้วย Code XML main.xml ครับ
<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout
android:id=”@+id/widget30″
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:orientation=”vertical”
xmlns:android=”http://schemas.android.com/apk/res/android”
>
<LinearLayout
android:id=”@+id/widget52″
android:layout_width=”fill_parent”
android:layout_height=”339px”
android:orientation=”vertical”
>
<TextView
android:id=”@+id/rxTitle”
android:layout_width=”fill_parent”
android:layout_height=”18px”
android:text=”Recieved Data”
>
</TextView>
<ListView android:id=”@+id/in”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:stackFromBottom=”true”
android:transcriptMode=”alwaysScroll”
android:layout_weight=”1″
/>
<TextView
android:id=”@+id/widget38″
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Send Data”
android:layout_gravity=”bottom”
>
</TextView>
<EditText
android:id=”@+id/sendTextBox”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Type Here!”
android:textSize=”18sp”
android:layout_gravity=”bottom”
>
</EditText>
</LinearLayout>
<RelativeLayout
android:id=”@+id/widget78″
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
>
<Button
android:id=”@+id/sendBtn”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”Send Data”
android:layout_alignParentTop=”true”
android:layout_centerHorizontal=”true”
>
</Button>
<Button
android:id=”@+id/connectBtn”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”Connect”
android:layout_alignParentTop=”true”
android:layout_alignParentLeft=”true”
>
</Button>
<Button
android:id=”@+id/disconnectBtn”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”Disconnect”
android:layout_alignParentTop=”true”
android:layout_alignParentRight=”true”
>
</Button>
</RelativeLayout>
</LinearLayout>
message.xml ครับ
<?xml version=”1.0″ encoding=”utf-8″?>
<!– Copyright (C) 2009 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the “License”);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an “AS IS” BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
–>
<TextView xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:textSize=”18sp”
android:padding=”5dp”
/>
ใครมีข้อสงสัยสามารถโพสข้อความไว้ได้นะครับและสามารถดาวน์โหลดโค๊ดตัวอย่างได้จากลิงค์นี้เลยครับ BluetoothSample Source Code
พี่คะ
ตอบลบอยากทราบการทำงานของโค๊ดอันนิอ่าคะ
คือ มันต้องกดเลือกไฟล์ที่จะส่ง แล้วกดเลือกเครื่องที่จะรับเหมือนปกติมั้ยคะ
หนูสนใจเรื่องนิอยู่อ่าคะ อยากทำแบบ กดปุ่มครั้งเดียวแล้วรับส่งอัตโนมัติไม่ต้องตั้งค่าอะไรอีกอ่าคะ
แนวคิดหนูพอเปนไปได้มั้ยคะ(หนูทำโปรเจคค่ะ KMITL#47 ค่ะ)
ถ้าจะใช้ Bluetooth สำหรับรับส่งไฟล์ต้องดูว่าใช้ profile ตัวไหนด้วยครับ โค๊ดตัวอย่างที่ผมทดสอบให้ดูนี้ใช้ profile สำหรับส่งข้อมูลแบบ serial ธรรมดาน่ะครับ
ตอบลบโต๊ดนี้มันจะ fix MAC ของ Bluetooth module ทั้งตัวรับและตัวส่งไว้นะครับ ทำให้เมื่อเริ่มโปรแกรมมันสามารถส่งข้อมูลไปได้เลย ซึ่งตามปกติควรจะต้อง Pair ก่อน ส่วนเรื่องการส่งข้อมูลให้กดปุ่มครั้งเดียวแล้วรับส่งอัตโนมัตินั้นก็สามารถทำได้ครับโดยซ่อนการทำงานต่างๆไว้ด้านหลังเอา และโปรเจคนี้ก็มีความเป็นไปได้สามารถทำได้ครับ
ตอบลบความคิดเห็นนี้ถูกผู้เขียนลบ
ตอบลบprivate static String testUUID = "00001101-0000-1000-8000-8C7712BF9DBB";//Test UUID
ตอบลบอันนิ 8C7712BF9DBB คือ บลูทูธแอดเดรส ของแอนดรอย
private static String address = "7A:A3:C4:10:C8:C7"; //Target Device MacAddress
อันนิ 7A:A3:C4:10:C8:C7 คือ แมคแอดเดรสของคอมพิวเตอร์
หนูเข้าใจอย่างงิถูกต้องมั้ยคะ??
แล้วถ้าหนูจะรันโค๊ดนิบนเครื่องหนูได้เนี่ย ก็คือ ให้แก้ 2ค่านิ อย่างงิถูกต้องมั้ยคะ
ขอบคุณมากค่ะ
ใช่ครับ แก้แค่ 2 ค่านั้นแล้วลองใช้พวก terminal emulator จับข้อมูลจาก port serial บน pc ดูครับ
ตอบลบเอ่ๆ
ตอบลบพี่คะ หลังหนูแก้ค่านั้นแล้ว
พอตอนพิมอะไรลงไปแล้วส่งอ่ะค่ะ โปรแกรมมันบังคับปิด
อันนิเกิดจากอะไรคะ
ลองดู log error ใน DDMS ครับว่าเกิด error จากอะไร
ตอบลบพี่คะ
ตอบลบตอนนิมันไม่ปิดโปรแกรมแล้วล่ะค่ะ >__<
(ดีใจที่สุด)
แต่ที่คอมพิวเตอร์ไม่แสดงการรับข้อมูลอะไรเรย หลังจากกดส่งอ่าคะ
อันนิคือ มันไม่ได้ส่ง รึว่า ต้องมีโปรแกรมในเครื่องรองรับคะ
หรือพี่หมายถึง "terminal emulator จับข้อมูลจาก port serial บน pc ดูครับ" อันนิหรือคะ จึงจะเหนข้อมูล??
หนูไม่เคยได้ยิน terminal emulator มาก่อนเรยค่ะ
พี่มีตัวแนะนำมั้ยคะ
Terminal emulator เป็นซอฟท์แวร์สำหรับจทดลองการรับส่งโดยที่เราไม่ต้องเขียนซอฟท์แวร์ขึ้นมาทดลองเพื่อความรวดเร็วในการทำงานครับที่ผมใช้ก็ใช้ http://www.hw-group.com/products/hercules/index_en.html ตัวนี้ในการจำลองเป็นตัวรับส่งข้อมูลผ่าน serial port ผ่าน rs232 หรืองานอื่นๆครับ ผมได้ลองทำตัวอย่างวีดีโอแสดงการตั้งค่า terminal emulator บน PC สำหรับเทสโค๊ดนี้ไว้ที่นี่แล้วนะครับ http://www.youtube.com/watch?v=WPf0NPHcuxk ลองดูได้ถ้ามีข้อสงสัยก็ถามมาได้ครับ
ตอบลบที่เราต้องมีตัว Terminal emulator นี่เพราะว่า เรายังไม่มีโปรแกรมไว้รับข้อมูลหรือคะ?? หรือไม่จำเป็นต้องใช้ก็ได้
ตอบลบหนูนึกว่า ไฟล์ที่เราส่งมันจะไปเก็บในโฟลเดอร์ในเครื่อง เหมือนกับเราส่งบูทูธธรรมดาอ่าคะ
อีกอย่างคือ ถ้าหนูจำเป็นต้องใช้ข้อมูลที่ส่งจากมือถือไปคอมอ่าคะ หนูจะไปเรียกมาจากที่ไหนได้อ่าคะ??
ถ้าจะส่งไฟล์จากมือถือไปคอมต้องใช้ Profile Bluetooth สำหรับการส่งไฟล์ครับ Terminal Emulator จะใช้ debug ข้อมูลที่ส่งกันไปมาน่ะครับ
ตอบลบอืมเดี๋ยวผมจะลองเขียนตัวอย่างโค๊ดสำหรับการรับส่ง file ผ่าน bluetooth บน Android ให้ดูละกันครับ
ตอบลบอ่า รบกวนเรย
ตอบลบขอโทดนะคะ T^T
สวัสดีค่ะ
ตอบลบห่างหายไปนาน
มีคำถามค่ะว่า หนูลองเทสโค๊ดตามที่พี่แสดงไว้บนยูทูปแล้วค่ะ
ของหนูได้ PORT 5 แต่พอกดsend บนแอนดรอยแล้วไม่เหนมันแสดงบนTerminal Emulator ว่าหนูส่งอะไรเรยค่ะ ควรแก้ไขยังไงดีคะ
นัดเวลามาเดี๋ยว Remote desktop ไปดูให้
ตอบลบสวัสดีครับ คือ ผมกำลัง ศึกษาเรื่อง ส่งข้อมูลจากมือถือ android
ตอบลบไปยังไมโครคอนโทลเลอร์อยู่อ่ะครับ
ผมต้องการส่งข้อมูลไปเพื่อใช้เป็นเงื่อนไข (คำสั่ง) ของการ
สังการทำงานตัวไมโครคอนโทลเลอร์ครับ
ผมอยากทราบว่ามันเป็นไปได้ไหม แล้วถ้าเป็นไปได้
ผมจะส่งข้อมูลเป็นประเภทอะไรได้บ้าง
แบบว่ากดปุ่มนี้ส่งข้อมูลชุดนี้ กดอีกปุ่มส่งข้อมูลอีกชุด
(ส่งอย่างเดียวอ่ะครับไม่ต้องรับ)
คือผมไม่ค่อยเก่งเรื่องเขียนโปรแกรมหน่ะครับ
ขอรบกวนด้วยนะครับ สำคัญมาก
ปล.อยากได้รายละเอียดมากๆ
@Mangkorn สามารถทำได้ครับสบายมากครับผมทดลองทำมาแล้วข้อมูลที่ส่งก็ส่งเป็น String ไปครับแล้วให้ Microcontroller นำ String ไปประมวลผลได้ครับ
ตอบลบต้องแก้ไขตรงไหนอะครับ คือผมต้องการส่งไปที่microและรับค่าmicroอะคับ
ลบอ่าครับ ขอบคุณมากครับ
ตอบลบแล้วมันยุ่งยากหรือเปล่าครับ พอจะมีตัวอย่างให้ดูไหมครับ
@Mangkorn ใช้ตัวอย่างของผมไปแก้ Code ได้เลยครับ
ตอบลบ@fonthning ต้องเขียน App บน Android มารับค่านะครับแต่ไม่ยากนะครับสามารถทำได้
ตอบลบพี่ค่ะ ลอง โค๊ด จากพี่ดูแล้ว ไม่ทราบว่า มันเกิดข้อผิดผลาดจากตรงไหน คือ ส่งข้อความจาก android ไปแร้ว แต่ มันไม่แสดงในTerminal Emulator เรยค่ะ
ตอบลบT___T
@fonthning แก้ MAC Address ของ Bluetooth ปลายทางยังครับ
ตอบลบความคิดเห็นนี้ถูกผู้เขียนลบ
ตอบลบ...
ตอบลบผมได้โหลด code ของพี่มารันดูสามารถใช้งานได้สมบูรณ์ครับ ผลจึงลองสร้างโปรเจคใหม่แล้ว ทำตามโปรเจคพี่ทุกอย่าง ใน code ไม่มี error สามารถรันได้แต่เมื่อรันแล้วมันเด้งว่า The Application (ชื่อโปรเจค) has stopped unexpectedly.Plase try again.
ตอบลบปล.1 code ของผมเหมือนที่ทุกอย่างต่างที่ชื่อโปรเจค package และ class ซื่งในส่วน code ผมก็แก้เฉพาะ ส่วนที่มีผลตอชื่อ class ครับ
ลบปล.2 ผมได้ลอง debug ดูพบว่ามันเกิด error ที่ฟังชั่น BluetoothInit
ปล.3 หากผมไม่เรียกใช้ ฟังชัน BluetoothInit จะสามารถรันได้ปกติ
ลบปล.4 ผม copy ทั้ง code ไฟล์ java และ xml เหมือน เปะ ครับ
ปล.5 รบกวนหน่อยนะครับผมไม่รู้จะแก้ยังไง หรือยังขาดอะไรอีก ขอบคุณครับ
รบกวน zip Project ที่คุณลองรันแล้วเกิด error ส่งมาให้ผมหน่อยครับ เดี๋ยวผมช่วยดูให้
ลบสวัสดีครับ พี่ อ.ที่มหาลัยเพิ่งให้โปรเจคผมมาชิ้นนึงอะครับ ประมาณว่า ให้เอาค่าได้ที่ได้ จาก พวก เซ็นเซอร์ ECG มา monitor บนมือถือ โดยผ่าย Bluetooth คือผมไม่เคยทำ andriod มาก่อนเลย แต่ เคนมีประสบกาณ์มาบ้าง ในภาษา จาวา คือ เคยเขียน java application ลง PC อะครับ เคยเล่น พวก socket อยู่บ้าง และ ก็ เขียน APPs ของ Iphone เล่นๆ บ้างอะครับ
ลบปัญหา ผมอยู่ว่า ผมไม่แน่ใจว่า ถ้าผมใช้ บลูทูธ เป็นสื่อกลางในการสื่อสาร ระหว่างมือถือ andriod กับ ECG มันจะมีทางเป็นไปได้หรือป่าวครับ และ ถ้ามีทางเป็นไปได้ผมจะ ต้องเรียนรู็อะไรบ้างครับ
ขอบคุณมกาๆนะครับ
ตอบคุณ Hamealone นะครับ สามารถใช้ Bluetooth ได้ครับ เขียนง่ายๆไม่ยากครับ
ลบสิ่งที่ต้องเรียนรู้เพิ่มเติมก้เรื่องเกี่ยวกับการส่งข้อมูลด้วย RS232 ระหว่าง Bluetooth กับ Microcontroller และ Bluetooth กับ Android Device ครับ
ลบขอบคุณมากๆๆ ครับ พี่ ถ้าแบบนั้นผมจะตอบตกลง ข้อเสนอ อ. ละคัรบ ขอบคุณมกาๆครับ
ลบสวัสดีครับ ผมเพิ่งเริ่มหัดเขียน แอปบนแอนดรอยด์ เป็นแอปมัลติมิเตอร์ ที่รับค่าจากการวัด V ,A ,R
ตอบลบแล้วมันแสดงค่าบน แอนดรอยด์ อยากจะข้อคำแนะนำ เรื่องกับรับส่งข้อมูล แบบUSB กับ bluetooth อันไหนดีกว่ากัน ขอความช่วยเหลือน่อยนะครับ ขอบคุณมากครับ
เนื่องจาก Android มี USB พอร์ตแค่ช่องเดียวดังนั้นการส่งข้อมูลควรเป็นแบบไร้สายเช่น bluetooth หรือ wifi จะดีกว่าครับ
ลบขอบคุณครับผม
ลบพี่เคยลองเขียน การส่งค่า และ รับค่า กับพวก ไมโคร ไหมครับ
ลบถ้ามีช่วยแนะนำโค้ดหน่อยครับ
ลองนำโค๊ดของผมไปประยุกต์ก็ได้ครับเพราะผมก็ใช้โค๊ดตัวนี้เทสกับ Bluetooth module แล้วส่งผ่าน microcontroller เข้า PC แล้วเหมือนกันครับ
ลบอ่ะครับ มันจะแตกต่างกันไหมครับ ระหว่าง PC กับ Android เพราะผมต้อง ส่งค่าและรับค่า ด้วย
ลบการรับส่งค่าไม่ต่างกันครับ
ลบอะครับ กำลังตันสุดเลยครับ
ลบตันตรงไหนครับ บอกได้ครับ
ลบการนำค่าที่รับจาก USB มาโชว์ บน android อะครับ
ลบหมายถึงต่อ USB กับ android แล้วส่งค่าหากันเหรอครับ
ลบandroid ต่อ USB กับ board microcontroller ครับ มันรับส่งค่าแบบไหน
ลบและใช้คำสั่ง แบบไหนในการรับ การส่ง
ถ้าต่อตรงทาง usb ต้องเขียนให้เป็น USB Host แทนนะครับ ลองดูตัวอย่างที่นี่ http://developer.android.com/guide/topics/usb/index.html
ลบครับ แต่ดูแล้วผมยัง งง อยากได้ตัวอย่างโค้ด ที่มันต่อกับงานอื่นๆ พอมีไหมครับ
ลบพี่ครับ ถ้าผมจะลองเขียน ให้ แอนดรอยด์ส่ง TX RX จะต้องทำไงบ้างครับ พอมีตัวอย่างกัน ส่งค่าออกไหมครับ
ตอบลบถ้าส่งจาก Bluetooth ก็ตามโค๊ดตัวอย่างของผมเลยครับแต่ถ้าเป็นแบบ USB ผมยังไม่เคยลองเขียนเหมือนกันครับ
ลบครับผม ผมกำลังแก้ไข โค้ด ว่ามันจะไปใช้กับ USB ได้รึป่าว
ลบพี่ๆค่ะ นู๋ต้องทำโปรเจ็กย่อยส่งอาจารย์ ใช้แอนดรอยส่งผ่านบลูธูทไปหาคอนโทรลเลอร์นู๋เขียนcodeอย่างนี้หลังจากกดปุ่มค่ะ
ตอบลบString message="11";
byte[] outBuffer = message.getBytes();
try
{
outStream = btSocket.getOutputStream();
}
catch (IOException e)
{
// TODO Auto-generated catch block
}
try
{
outStream.write(outBuffer);
outStream.flush();
}
catch (IOException e)
{
// TODO Auto-generated catch block
}
นู๋ต้องการส่งอย่างเดียวส่งคำว่า "11" ไปที่คอนโทรลเลอร์แล้วให้คอนโทรลเลอร์ทำงานแต่พอrunในมือถือมันก็บังคับปิด ***มือถือนู๋จับคู้กับคอนโทรลเลอร์แล้วนะค่ะ ช่วยแนะนำทีนะค่ะ
ขอดู log ที่ error ใน logcat ของ ddms หน่อยครับ
ลบสวัสดีครับ ผมทำแอพส่งค่าสตริง ครับ แต่ส่งค่าไม่ได้ครับ แต่แอพก็รันในเครื่องได้นะครับจับคู่ได้ แต่ส่งค่าสตริงไม่ได้ ทำแอพ 2.3.3 แต่รันกับเครื่อง 2.3.4 มีปัญหารึป่าวครับ
ตอบลบพอรันขึ้นแบบนี้อะครับ ใน console
BluetoothChat] WARNING: Application does not specify an API level requirement!
BluetoothChat] Device API version is 10 (Android 2.3.4)
เลยอยากจะส่งให้อ.ช่วยดูให้หน่อยครับ จะได้หรือป่าว
ปกติการ develop จาก version ต่ำกว่าแล้วไปรันบน version สูงกว่าจะไม่มีปัญหานะครับ ลองปรับ API level เป็น Android 2.2 แล้วลองเทสดูอีกครั้งครับ
ลบminSdkVersion="8"
ตอบลบandroid 2.2
ช่ายรึป่าวครับ
ใช่ครับ ลองปรับดูครับ
ลบเครื่องต้องการเป็น API 10 รึป่าว ไม่ได้อะครับ
ลบ[2012-04-27 22:22:33 - BluetoothChat] WARNING: Application does not specify an API level requirement!
ตอบลบ[2012-04-27 22:22:33 - BluetoothChat] Device API version is 10 (Android 2.3.4)
ไม่ได้ครับขึ้นแบบนี้ใน console ส่งไม่ได้ หรือโค้ดผมจะผิด แต่ก็ไม่มีเออเร่อนะครับ :( ตัน
ส่งโค๊ดมาให้ผมดูก็ได้ครับ
ลบเมลล์อ. ดูตรงไหนหรอครับ หาไม่เจอ ^^"
ลบความคิดเห็นนี้ถูกผู้เขียนลบ
ลบส่งแล้วครับ ได้รับยังครับ
ลบได้แล้วครับ กำลังดูให้อยู่ครับ
ลบครับ ขอบคุณครับ
ลบผมเทสแล้วก็เชื่อมต่อได้และมีข้อมูล ABCD ออกปกตินะครับ ผมเทสบน Huawei Mediapad Android 3.2 กับ Motorola Atrix Android 2.3.7 ข้อมูลก็ออกปกตินะครับ
ลบหรอครับ ใช้ได้ใช่ไหมครับ ที่ผมทำ ทำไมผมเชื่อมต่อแล้วส่งค่าไปไมโครคอนโทรลเลอร์แล้ว ไม่มีผล หมายถึงไฟไม่ติด หรือเป็นที่โปรแกรมในไมโครคอนโทรลเลอร์
ลบหรือเป็นที่เครื่อง samsung mini ผม มีปัญหา ผมควรลองแก้เทส จากอะไรก่อนดีครับ
สรุปคือ ที่เขียนใช้ได้ ใช้ส่งได้จริงนะครับ ขอบคุณครับ
คิดว่าปัญหามันเกิดจากการที่ตอน pair อุปกรณ์นั้นมันมีการเซตให้ใส่รหัสด้วย ซึ่ง module bluetooth อาจจะเซตไม่ตรงกันทำให้ pair กันไม่ได้หรือเปล่าผมไม่แน่ใจนะ คิดว่าไม่น่าจะเป็นปัญหาที่ตัวแอพแล้วละครับ
ลบให้ debug ทีละส่วนนะครับ ส่วนแรกเป็นส่วนที่ส่งข้อมูงผ่าน bluetooth ลองเทสตามวิธีของผมในคลิปนี้ดูนะครับ ttp://www.youtube.com/watch?v=WPf0NPHcuxk
ลบออครับ ช่ายครับ ตอนคอนเน็คครั้งแรกจะให้ใส่รหัส แต่ครั้งต่อมาคอนเน็คอีกก็ไม่มีให้ใส่แล้วนะครับ งั้นผมจะไปดูที่อุปกรณ์ ไมโครคอนโทรล ครับ ขอบคุณครับ
ลบใช้โปรแกรมอะไรเทสหรอครับ เห็นเปิดขึ้นมา
ลบโปรแกรม hercules ครับ
ลบเทสยังไงครับดูแล้ว ไม่เข้าใจ ต้องต่อ usb เครื่องเข้ากับคอมหรอครับ ตอนเทส
ลบMobile <-- Bluetooth --> Notebook <-- Com Port --> Hercules Serial Emulator
ลบtoggleButton1 = (ToggleButton) findViewById(R.id.toggleButton1);
ตอบลบtoggleButton1.setOnClickListener(new OnClickListener() {
String message;
public void onClick(View v) {
if (.....เงื่อนไข..... ) {
message = "A";
sendMessage(message);
} else {
message = "a";
sendMessage(message);
}
}
});
ตรงเงื่อนไข จะเช็คว่า ถ้า toggle button on ให้ ส่ง A off ให้ส่ง b จะต้องใส่อะไรตรงเงื่อนไขครับหรือเช็คจาก text แนะนำบอกทีครับ ขอบคุณครับ
ตามนี้เลยครับ
ลบToggleButton tg;
if(tg.isChecked())
//Do something
else
//Do something else
toggleButton1 = (ToggleButton) findViewById(R.id.toggleButton1);
ตอบลบtoggleButton1.setOnClickListener(new OnClickListener() {
//Boolean isOn = false;
String message;
public void onClick(View v) {
if (toggleButton1.isChecked()) {
message = "A";
sendMessage(message);
}
else {
message = "a";
sendMessage(message);
}
}
});
แก้เป็นแบบนี้ถูกแล้วใช่ไหมครับ
ถูกแล้วครับ
ลบอ.ครับ หากเราจะเปลี่ยนชื่อโปรเจค จะทำได้อย่างไรครับ เพราะว่าชื่อโปรเจคตอนสร้าง แล้วรันก็จะแสดงชื่อนั้น ผมอยากจะเปลี่ยนทำอย่างไรครับ
ตอบลบแก้ในไฟล์ AndroidManifest.xml เลยครับมันจะมีลิงค์ที่อ้างอิงตัวแปรที่เก็บชื่อ Application อยู่ครับ
ตอบลบ[2012-05-09 09:58:51 - Controlblue] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.android.Bluetoothchat/.controlblue }
ตอบลบ[2012-05-09 09:58:51 - Controlblue] ActivityManager: Error type 3
[2012-05-09 09:58:51 - Controlblue] ActivityManager: Error: Activity class {com.example.android.Bluetoothchat/com.example.android.Bluetoothchat.controlblue} does not exist.
ผมจะแก้ชื่อให้เป็น controlblooth ตอนอยู่บนโทรศัพท์ แต่แก้ไป อ.ครับ มันขึ้นแบบนี้อะครับแก้ไป แก้มา ตอนแรกรันได้ แก้จนรันไม่ได้แล้วอะครับ อ.ช่วยดูให้ทีครับ ผมกลัวยิงแก้ยิ่งพังอะครับ ผมส่งเมลให้อ.ไปทางเมลแล้วครับ ช่วยดูให้ทีครับ ขอบคุณมากครับ
ตรงชื่อ package ไม่ต้องไปแก้นะครับ ดูจาก log มันเกิดจากหา main Activity class ไม่เจอนะครับ ผมยังไม่ได้เมลนะครับ
ลบแก้รันได้แล้วครับ แต่ว่าชื่อแอพที่แสดงบนโทรศัพท์ก็ยังเปลี่ยนไม่ได้อยู่ดีครับ ^^" ที่อ. บอกตรงนี้รึป่าว เปลี่ยนชื่อ แอพ
ตอบลบandroid:label="@string/app_name"
android:icon="@drawable/app_icon" >
<activity android:name=".controlblue" // เปลี่ยนชื่อ
android:label="@string/app_name"
ใช่ครับ
ลบแก้ไขครับ ไม่ใช่ตรงนั้นนะครับ จะมีไฟล์ resource ที่เก็บ String app_name อยู่ครับไปแก้ตรงนั้นแทน
ลบดูตัวอย่างตามภาพนะครับ https://picasaweb.google.com/lh/photo/NtKAjomwitTxsM5oDPX8g9MTjNZETYmyPJy0liipFm0?feat=directlink
ลบได้แล้วครับ ขอบคุณครับ
ลบImageButton เมื่อคลิกแล้วโชว์ listview image เพื่อให้เลือกคลิกไปแทน lmageButton เดิม มีตัวอย่างมั้ยครับ หรือช่วยแนะนำทีครับ
ตอบลบคือกด imagebutton แล้วแล้วมี list ของ image ขึ้นมาเพื่อนำภาพที่เลือกไปแทนภาพเดิมใช่ไหมครับ
ลบช่ายครับ อาจารย์
ลบเดี๋ยวพรุ่งนี้ผมเขียนตัวอย่างไว้ให้ดูละกันครับ
ลบขอบคุณมากเลยครับ
ลบผมขอเป็นไฟล์โปรเจคตัวอย่างได้ไหมครับ จะได้เห็นโค๊ด+รูปในไฟล์การรัน ใน xml กับ java จะได้เข้าใจ เห็นแต่โค้ด ผมเข้าใจยาก ต้องทำความเข้าใจนานๆ น่ะครับ ขอบคุณครับ bangkkub99999@gmail.com
ลบความคิดเห็นนี้ถูกผู้เขียนลบ
ลบความคิดเห็นนี้ถูกผู้เขียนลบ
ลบImageButton กับ ListView ผมเขียนไว้ให้แล้ว download จากลิงค์นี้ได้เลยครับ https://www.dropbox.com/s/kfzxelwh3li9c20/ImageButtonWithImageList.zip
ลบตัวอย่างที่ผมเขียนให้เพื่อความรวดเร็วผมได้นำโค๊ดจากที่ http://www.mkyong.com/android/android-listview-example/ มาปรับปรุงแก้ไขนิดหน่อย
ลบรอ รอ รอ ...
ตอบลบสวัสดีครับ..พอดีผมจะทำโปรแจคที่เกี่ยวกับการรับค่าจากไมโครคอนโทลเลอร์มาเก็บไว้ที่เครื่องsever เก็บเป็นดาต้าเบส และประมวลผล และแสดงออกมาทางแอนดรอย ควรเริ่มศึกษาที่ไหนครับ .... พอมีข้อมูลที่น่าสนใจไหมครับ พอดีพึ่งเริ่มหัดทำนะครับ แต่ยังไม่เคยเขียนเชื่อมต่อกับไมโคร อาจารย์เขาอยากให้เปิดเป็นเว็ปธรรมดา ก็สามารถดูได้ด้วยนะครับ
ตอบลบจาก micro controller --> DB ก็เขียนให้เชื่อมต่อกันได้หลายแบบ (RS232, Bluetooth) ส่วนแสดงผลแนะนำให้เขียนเป็นเวบแล้วใช้ responsive framework ช่วยเอาครับจะได้ไม่ต้องไปเขียนหน้าเวบหลายหน้า้พื่อแยกระหว่างมือถือกับ PC
ลบขออนุญาติสอบถามครับ
ตอบลบcode ชุดนี้สามารถนำไปควบคุมอุปกรณ์ได้หรือป่าวครับ
สามารถนำไปประยุกต์ใช้ควบคุมอุปกรณ์ได้ครับ
ลบถ้าผมอยากให้เมื่อกดปุ่มค้างก็ให้ส่งข้อความนั้นออกตลอด หยุดส่งเมื่อปล่อยมือจากปุ่มทำได้ไหมครับ
ตอบลบสามารถทำได้ครับ
ลบสวัสดีครับ ตอนนี้ผมกำลังศึกษา การเขียนโปรแกรมแอนดรอย์ เพื่อส่งค่าไปยัง ไมโครคอลโทรลเลอร์ ผ่านบลูทูธ แต่ความรู้ทางด้าน android ผมน้อยมาก อยากให้อาจารย์ช่วยหน่อยได้ไหมครับ
ตอบลบต้องลองศึกษาเองแล้วลองทำเองก่อนถ้าติดขัดตรงไหนผมจะช่วยตอบให้ครับ
ลบผมสามารถเชื่อมต่อบลูทูธได้แล้วครับ
ลบตอนนนี้ผมอยากเขียน คำสั่งกด switch แล้วส่งค่า digital ไปยังไมโครอะครับ มันต้องเขียนแนวไหนอะครับ
เอาโค๊ดที่ผมเขียนในตัวอย่างไปแก้ไขนิดหน่อยก็ใช้กับโปรเจคคุณได้แล้วครับ
ลบimport โปรเจคแล้วมัน error อะครับ
ลบThe method onClick(View) of type MainActivity must override a superclass method
The method onClick(View) of type MainActivity must override a superclass method
มี 2 อันอะครับ
แก้ได้แล้วครับ
ตอบลบสอบถามคะ มีโปรเจคเกี่ยวกับ รับค่า น้ำหนัก จากเครื่องชั่งมาแสดงผล บนโทรศัพท์ระบบ Android การรับส่งข้อมูลทาง Bluetooth ไม่ทราบว่า ทำอย่างไรคะ การติดต่อ รับค่า จากเครื่องชั่ง
ตอบลบต้องดูก่อนว่าจากเครื่องชั่ง มีการส่งข้อมูลแบบใดออกมาครับแล้วจึงนำข้อมูลนั้นมาต่อกับ Bluetooth module อีกทีเพื่อส่งข้อมูลมายัง Android อีกทีหนึ่งครับ
ลบตอนนี้ สามารถส่งค่า(serial)น้ำหนักที่ชั่ง ผ่านทางบลูทูธ(Bluestick)ได้คะ ใช้ Bluetooth Terminal มารับค่า .. แต่ไม่รู้ว่าจะนำค่าน้ำหนักที่ได้ มาแสดงในแอพที่เราจะสร้างได้ยังไงคะ // รบกวนด้วยแนะนำด้วยคะ เพิ่งเริ่มต้นคะ
ลบลองเอาโค๊ดของแอพตัวอย่างของผมไปลองทดสอบบน Android ดูก่อนครับ แล้วก้แก้ UI ของแอพผมเอาก้น่าจะใช้ได้ครับ
ลบโอเคคะ .. เด่วของลองศึกษาโค๊ด แล้วยังไง จะขอมาปรึกษาเพิ่มเติมนะคะ ^^ ขอบคุณมากคะ
ลบปัญหาที่พบ หลังจาก เอา app ไป ลง ที่ โทรศัพท์ 2 เครื่อง
ลบไม่สามารถ ส่งข้อความกันได้ ไม่ทราบว่าต้อง แก้อย่างไรคะ
ขอโทษนะคะ รบกวนถามเพิ่มเติม จากโค๊ดที่แจกฟรีคะ
ลบส่งค่า *120.5*140.5*025.0 (ค่าติดกันทุกตัว)
แสดงผลจาก โปรแกรมแสดงค่า (เว้นบันทัดให้เอง ไม่ได้เขียนสั่งจากโค๊ดคะ)
*
120.5
*
140.5
*
025.0
แสดงผลจาก App - bluetooth terminal
*120.5
*140.5
*025.0
แสดงผลจาก ต่อกับคอม ผ่านโปรแกรม Hercules SETUP utility
*120.5*140.5*025.0
ลองแก้ไขการต่อกันของข้อความที่รับเข้ามาดูครับ
ลบความคิดเห็นนี้ถูกผู้เขียนลบ
ตอบลบพอดีผมเเก้ใขเเมกเเอดเดรสทั้งสองดัวเเล้วครับ เเล้วเเอฟยังบังคับปิด อีกมันเป็นเพราะอะไร
ตอบลบและ คืออะไรครับแก้ยังไงครับ
ต้องดู log ของ error ใน DDMS นะครับ
ลบรบกวนหน่อยคับ
ตอบลบพอดีผมจะหาบอร์ดไมโครคอนโทรลเลอร์ ตัวไหนคับ ที่จะติดต่อกับโทรศัพท์มือถือ โดยผ่าน wifiไร้สายนะคับ พอดีผมไม่ค่อยรู้เรื่องพวกนี้นะคับ ขอบคุณมากคับ
มีหลายตัวนะครับ ถ้าแบบง่ายๆหน่อยก็ arduino + wifi Shield ครับ
ลบเเล้ว เอา accelerometer ออก บลูทุธ ต้องเริ่มยังไงครับ พอดี มีโคด accelerometer เเล้ว เพียงเเต่ประสานกันกะบลูทูชไม่เป็น
ตอบลบเขียน Timer หรือ Thread บนแอนดรอยด์แล้วทำการอัพเดตค่าจาก accelerometer ไปยัง ฟังก์ชันส่งค่าผ่านบลูธูทครับ
ลบ