휴대폰 J2ME 프로그램이 프로토콜을 통해 내 Bluetooth 모듈과 어떻게 통신할 수 있습니까? 즉, 휴대폰을 사용하여 Bluetooth 모듈에 데이터를 보낸 다음 마이크로컨트롤러에 보냅니다. 차이 없음
j2me를 사용하여 SPP 프로토콜을 구현하여 데이터를 연결하고 페어링하고 전송합니다. Bluetooth 모듈은 직렬 포트를 통해 마이크로컨트롤러에 연결됩니다.
가져오기 java.io.DataInputStream;
가져오기 java.io.DataOutputStream
가져오기 java.io.IOException; java.util.Vector;
javax.bluetooth.* 가져오기
javax.microedition.io.Connector 가져오기
javax.microedition.io 가져오기 StreamConnection;
javax.microedition.lcdui.* 가져오기
javax.microedition.midlet.MIDlet 가져오기
import javax.microedition.midlet.MIDletStateChangeException;
공용 클래스 BtSppMid는 MIDlet을 확장하여 Runnable, CommandListener, ItemCommandListener를 구현합니다. {
공용 StreamConnection 클라이언트 = null
//Bluetooth SPP 데이터 스트림
public DataInputStream dis = null;
public DataOutputStream dos = null
public boolean running; //스레드 실행 플래그
public Display display = null;
public Form form = new Form("JB00 Bluetooth suite");
private Command cmdExit = new Command("Exit", Command.EXIT, 1)
private Command cmdConnect1 = new Command("Connect1", Command.SCREEN, 1); //찾은 SPP 서비스에 연결
private Command cmdSearch = new Command("장치 검색", Command. SCREEN, 1); //블루투스 장치 검색
private Command cmdSrchService = new Command("Search service", Command.SCREEN, 1); //블루투스 서비스 검색
private Command cmdStopSrch = new Command("Stop", Command.SCREEN, 1); //블루투스 장치 검색 중지
private Command cmdOK = new Command("OK", Command.OK, 1) / /Search 장치에 도착한 후 해당 SPP 서비스에 직접 연결합니다.
public Command cmdConnect = new Command("Connect", Command.ITEM, 1)
DiscoveryAgent discoveryAgent;
DiscoveryListener discoveryListener;
//검색된 장치를 저장하는데 사용
Vector devices = new Vector();
Vector devName = new Vector();
Vector devAdr = new Vector();
Vector devItem = new Vector();
//검색된 서비스를 저장하는데 사용
Vector services = new Vector();
//서버 서비스 레코드
ServiceRecord Record=null; 검색에서 가져옴
p>String deviceAddr;
String conURL;
public BtSppMid() {
super()
form.addCommand(cmdExit);
form.addCommand(cmdSearch);
form.setCommandListener(this); new MyDiscoveryListener(this);
form.setCommandListener(this)
p>
}
protected void startApp() throws MIDletStateChangeException { p>
display = Display.getDisplay(this);
display.setCurrent(form) ;
running = true;
try { p>
LocalDevice localDevice = LocalDevice.getLocalDevice();
discoveryAgent = localDevice.getDiscoveryAgent( );
form.append("블루투스가 준비되었습니다. 먼저 장치를 검색하세요./ n");
} catch (BluetoothStateException e) {
form.append("블루투스를 사용하지 못했습니다!/n블루투스 상태를 확인하는 것이 좋습니다./n");
pauseApp();
}
}
protected void PauseApp() {
// 닫기 ();
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
running = false;
close();
}
public void commandAction(Command cmd, Displayable d) {
if (cmd == cmdExit) {
notifyDestroyed( );
}
else if (cmd == cmdSearch) p>
{
시도
{
//블루투스 장치 검색 시작
discoveryAgent.startInquiry(DiscoveryAgent.GIAC ,discoveryListener)
form.append("BT 장치 검색 중../n ");
}
catch(예외 e)
{
form.append("검색 오류!/n") ;
return;
}
form.removeCommand(cmdSearch);
form.addCommand(cmdStopSrch);
form.addCommand(cmdSrchService); //검색 서비스 명령 추가
}
else if (cmd == cmdSrchService)
{
UUID uuid[] = {new UUID(0x1101)}; //0x1101은 블루투스 SPP 서비스 UUID에 해당합니다.
for (int i=0;i { RemoteDevice btDevice = (RemoteDevice)devices.elementAt( i); 시도해 보세요 { discoveryAgent.searchServices(null, uuid, btDevice, discoveryListener); //검색된 장치에서 SPP 서비스 찾기 form.append("searching service../n") } catch (IOException e) { form.append("검색 오류!/n"); return; } break; } form.removeCommand(cmdSrchService ) form.addCommand(cmdConnect1); } else if (cmd == cmdConnect1) { conURL = ((ServiceRecord)services.elementAt(0)).getConnectionURL(0,false); //첫 번째로 발견된 장치에 연결 form.append("Trying to connect1 "+conURL+"/n"); //블루투스 연결 스레드 시작 new Thread(this).start(); } p> else if (cmd == cmdStopSrch) { discoveryAgent.cancelInquiry(discoveryListener); //블루투스 장치 검색 중지/ } } public void run() { client = null; try { client = (StreamConnection)Connector.open(conURL) //지정된 장치의 SPP 서비스에 연결합니다. >form.append("Connected./n"); dis = client.openDataInputStream( ); dos = client.openDataOutputStream(); form.removeCommand(cmdConnect); form.removeCommand(cmdConnect1); form.removeCommand(cmdSrchService); form.removeCommand(cmdStopSrch); for(int i=0; i { //연결 성공 후 StringItem의 연결 명령을 제거합니다. 모든 장치에 해당 StringItem si = (StringItem)devItem.elementAt(i); si.removeCommand(cmdConnect); } p> } catch (예외 e) { form.append("연결 오류!/n") close(); return; } } public void commandAction(명령어 c, 항목 항목) { String deviceName; if(c == cmdConnect) //기기의 SPP 서비스 연결 { p> deviceName = ((StringItem)item).getText(); for (int i=0;i { if((String)devName.elementAt(i) == deviceName ) { deviceAddr = (String) devAdr.elementAt(i) / /저장된 장치 주소에서 블루투스 주소 가져오기 conURL = "btspp ://"+deviceAddr+":1"; form.append("Connecting "+deviceName+". ./n"); //블루투스 연결 스레드 시작 새 스레드(this).start(); break; } } } } public void close() { try { if (dis != null) { dis.close(); dis = null; } if (dos != null) { dos. close(); dos = null; } if (클라이언트 != null) { client.close() ; 클라이언트 = null; } } catch ( 예외 e) { e.printStackTrace(); > } } public void sendDataToBluetooth(문자열 데이터) { 시도 { dos.write(data.getBytes()); dos.flush( ) } catch(IOException e) { e.printStackTrace(); } } } //블루투스 장치 검색, 서비스 검색 처리 class MyDiscoveryListener는 DiscoveryListener를 구현합니다. { BtSppMid midlet p> public MyDiscoveryListener(BtSppMid midlet) { this.midlet = midlet; } public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) { 문자열 이름 = null; p> StringItem tmpItem; try { name = btDevice.getFriendlyName(false) // 장치 이름 찾기 } catch (IOException e) { } //장치를 검색한 후 화면에 StringItem으로 표시하여 명령을 추가하고 벡터에 저장합니다. tmpItem = new StringItem(null, 이름); midlet.devItem.addElement(tmpItem) midlet.form.append ((StringItem)midlet.devItem.lastElement()); midlet.devices.addElement(btDevice) } public void queryCompleted(int discType ) { for(int i= 0; i { StringItem si = (StringItem)midlet .devItem.elementAt(i); RemoteDevice rd = (RemoteDevice)midlet.devices.elementAt(i); 문자열 이름 = null; String adr = null; try { name = rd.getFriendlyName(false); adr = rd.getBluetoothAddress(); midlet.devName.addElement(name); midlet.devAdr.addElement(adr); } catch (IOException e) { } p> si.setText(name); StringItem을 장치 이름으로 설정 } midlet.form.append("/n검색 완료./n") for(int i=0 ; i { StringItem si = (StringItem)midlet.devItem .elementAt(i); si.setDefaultCommand(midlet.cmdConnect); //기기별 연결 명령어 추가 si.setItemCommandListener(midlet) } } p> public void servicesDiscovered(int transID, ServiceRecord[] servRecord) { if(servRecord.length > -1) { for (int i = 0; i < servRecord.length; i++) { midlet.services.addElement(servRecord[ i]); midlet. form.append(servRecord[i].toString()+"/n"); } } p> else{ midlet.form.append("서비스를 찾을 수 없습니다!/n") } } public void serviceSearchCompleted(int transID, int responseCode) { midlet.form.append(responseCode+"는 검색 결과입니다./n"); } }