에뮬레이터 실행
C:\android\tools\emulator.exe -avd Android.2.0.1 -verbose -qemu -serial COM4
안드로이드 에뮬레이터에 쉘 접속
c:\adb kill-server
c:\adb devices
C:\adb shell
안드로이드 에뮬레이터 쉘에서 명령 실행
#cd /data/bin
# ./busybox microcom -s 300 /dev/ttyS2
./busybox microcom -s 300 /dev/ttyS2
connected to ‘/dev/ttyS2’ (300 bps), exit with ctrl-X…
*0100P3
*000114.2696
*0100P3
*000114.2695
시리얼 통신용 프로그램을 만들어서 테스트
# ./seriald
./seriald
ttyS0 ttyS1 ttyS2
recv: *000114.2712
안드로이드 기반에서 시리얼 통신에 관한 정보를 찾다 글을 보고 왔습니다만
잘 이해가 안되서 글 올립니다.
현재까지 수집한 정보로 안드로이드에서는 시리얼 통신이 안된다고 알고 있었는데 사용할수 있는 방법이 있으면
정보를 얻고 싶습니다.
무례한 부탁일지도 모릅니다만 안드로이드에서 시리얼 통신을 할수 있는 방법이 있으면 자세히좀 알고 싶습니다.
sobakr@gmail.com
안드로이드에서도 시리얼 통신이 됩니다.
자바로 앱을 만드는 경우와 C나 Pascal 같은 언어로 개발하는 방법 등이 있습니다.
먼저 C나 Pascal 같은 언어로 개발하는 경우에는 일반적으로 PC에서 시리얼 통신 프로그램을 개발하는 것과 동일하며, 크로스 컴파일만 하면 됩니다. 에뮬레이터에서 테스트하기 위해서 장치만 /dev/ttyS2로 설정했습니다.
전 프리 파스칼로 개발했습니다.
자바로 앱을 만들 경우는 조금 복잡합니다. 기본 API에 시리얼통신 관련된 것이 없습니다. 그래서 NDK를 이용하여 C로 시리얼통신을 하는 라이브러리(*.so)를 만들고, 자바에서 JNI를 이용하여 그 라이브러리를 불러다 사용해야 됩니다.
저는 NDK를 이용하여 시리얼 포트를 제어하는 함수를 만들고 그 함수를 JNI를 이용하여 자바로 만든 앱에서 호출했습니다.(회사에서 안드로이드 기반 하드웨어를 개발하고 있는 중이라서 에뮬레이터에서만 동작됨을 확인했습니다)
구글에서 배포하는 NDK 예제 소스가 있으니 참고하시면 됩니다.
NDK나 JNI를 이용하지 않는 방법으로는 C나 Pascal 같은 언어로 시리얼 통신용 프로그램(데몬)을 만들고, TCP Server를 띄우고, 자바로 만든 앱에서 localhost TCP Server에 접속하여 데이터를 요청하면 C로 만든 프로그램(데몬)에서 시리얼포트를 통하여 데이터를 받고, 다시 앱으로 넘겨주는 방법도 있습니다.
안녕하십니까,
안드로이드 기반에서 시리얼 통신하는 것을 준비 중입니다.
검색 중 isul님의 내용을 보고 도움이 되었습니다.
추가 질문 드려도 될까요?
구글에서 배포하는 NDK 예제 소스를 어떻게 구할 수 있는지 알수 있을까요?
그걸 참고하여 자바로 구현하는 것은 어렵지 않나요? 경험이 없어서 t.t
염치 불구하고 한번 더 조언을 구하겠습니다.
안녕하세요.
아래 사이트에 들어가시면 NDK 받을 수 있고, 그 안에 예제 소스가 많이 들어가 있습니다. c로된 라이브러리와 안드로이드 앱에서 불러오는 예제 모두 있습니다.
http://developer.android.com/sdk/ndk/index.html
회신 감사 드립니다.
항상 좋은 일 많으시길..^^
안녕하세요.
안드로이드 기반 장치에서 시리얼 통신 관련 정보를 검색하다보니 이글에 오게되었네요.
에뮬레이터에서 실행하는 것을 따라해보고있는데
시리얼포트를 열때 실패하게되네요;
혹시라도 저와 같은 에러 겪으신적있는지,,
에러는 아래와 같습니다.
Failed CreateFile (2)
ko:qemu: could not open serial device ‘COMxx’
C:\android\tools\emulator.exe -avd Android.2.0.1 -verbose -qemu -serial COM4
에러가 위 명령에서 발생하는지요?
먼저 하이퍼터미널 같은 프로그램으로 해당 COM 포트가 오픈되는지 먼저 확인해보세요..
위 명령을 내리기 전에 해당 포트를 오픈하고 있는 다른 프로그램이 있어서는 안되며, -avd 다음에 나오는 Android.2.0.1은 생성하신 Android Virtual Device 명으로 설정해야 됩니다.
답변감사합니다.
해당 명령에서 에러가 발생하는것이 맞고, avd의 명칭도 제가 생성한 것으로 잘 작성하엿는데 에러가 납니다…
C#을 이용하여 간단히 시리얼포트 프로그램을 작성하여 테스트를 해보니, 잘 작동합니다.
안드로이드로 시리얼 통신을 해야하는데,, 정말 갈길이 멀고 막막하네요
저도 왜 에러가 발생되는지 모르겠네요..
Win이라면 관리자 권한으로 실행되었는지도 확인해보시고, 시리얼 포트도 한 번 변경해보세요.
그리고, 제가 블로그에 게시한 시리얼 통신 방법은 단독으로 동작되는 실행 프로그램 형식입니다.
혹시나 앱에서 시리얼 통신을 해야 된다면 위와 같은 방법으로 하는 것보다는 JNI를 이용하는 방법이 좋을 것입니다.
일단 에러는 해결하였습니다!
COM포트가 13에 잡혀있었는데 1로 변경하니 성공했네요;;
감사합니다
저는 안드로이드 공부하는 왕 초보인데요 ..
이 시리얼 통신하는방법을 정말 자세하게 해서 올려주실순 없나요 ? 보고 따라해볼 정도로요 !
정말 도움이 간절합니다 ㅠ.ㅠ
안녕하세요..
제가 지금 상세하게 포스팅할 여유가 없네요..
어느 부분이 안되는지 진행하다 막히는 부분이나 기타 질문을 올려주시면 답변 드리도록 하겠습니다.
제가 올린 글에서는 하드웨어와 시리얼통신 케이블로 연결하는 부분과 통신 프로그램 제작에 관련된 부분은 포함되지 않았습니다.
지금 여기 글을 써도 보실지 모르겠는데요…..
만약 보시게 되면 질문하나 드리겠습니다. 제가 에뮬레이터로 시리얼 통신을
테스트 해보려는데요. 여기 있는 글대로 하다가 보니 에뮬레이터 shell까지는 왔는데요
저기 cd /data/bin 에서
cd : can;t cd to /data/bin 이라고 뜨네요.
그냥 그 밑에 명령 쳐도 안되고요.
어떻게 해결 하는 방법이 없을까요?
/data/bin은 busybox 사용하기 위한 것으로 원하는 폴더에 busybox를 설치하고 사용하면 됩니다.