메뉴 건너뛰기

모바일앱


 

이 연재는 아래의 방법들을 설명합니다.


1. 라즈베리파이에서 소형 진동모터를 제어하는 방법
2. 라즈베리파이에서 BLE를 동작시키고 다른 디바이스에서 검색되도록 하는 방법
3. 안드로이드에서 라즈베리파이의 BLE(Advertising)신호를 검색하고 연결한 후 데이터를 전송하는 방법


현재 안드로이드 마켓에서 배포되고 있고 개발중인 "두근두근"이라는 앱에 블루투스 기능을 추가했던 내용을 기록하였습니다.

정확하게는, 앱과 라즈베리파이를 블루투스로 연결하였고 라즈베리파이에 붙어 있는 진동모터를 동작시키도록 개발한 내용을 정리하였습니다.


두근두근에 블루투스 기능을 추가한 이유는 아래와 같은 예제를 만들어 보기 위해서 입니다.

즉, 두근두근이 하드웨어 모듈과 블루투스로 연결되어 있고 부모나 친구가 두근두근을 터치하면 심장박동처럼 진동하는 예제 입니다.




라즈베리파이에서 소형 진동모터를 제어하는 방법


먼저 라즈베리파이에 소형 진동모터를 연결하고 해당 모터를 제어하는 방법을 설명합니다.

 

라즈베리파이 Zero W 타겟을 대상으로 진행했습니다. 

 

- 아래의 경로에서 최신 버전의 이미지를 다운로드 받아 SDCARD에 씁니다. 물론, 그냥 Copy & paste 가 아닙니다.

이미지를 쓰려면 Etcher나 Win32 Disk Imager라는 앱을 사용하세요.

 

- 라즈베리파이의 이미지를 받을 수 있는 경로입니다. 'Raspbian Stretch Lite'를 다운로드 받으시길 권장합니다.

https://www.raspberrypi.org/downloads/raspbian/

 

- SDCARD에 이미지를 잘 구웠다면 이제, 라즈베리파이가 부팅하자마자 WiFi에 연결하고 노트북이나 데스크탑에서 라즈베리파이의 Shell에 접속할 수 있도록 만들고자 합니다.

 

1. SDCARD의 루트경로에 아래와 같이 두 파일을 작성하여 복사해 둡니다.

 

파일이름 : wpa_supplicant.conf

ctrl_interface=DIR=/var/run/wpa_supplicant
country=US
update_config=1
network={
  ssid="WIFI이름입력"
  psk="WIFI암호입력"
  key_mgmt=WPA-PSK
}


파일이름: ssh

파일의 내용이 비어있어도 괜찮습니다.

 

* 저의 경우에는 생각지 않게 와이파이가 잘 안 붙더군요. 한참을 고생한 끝에 알아낸 문제의 해결법 입니다.

바로 와이파이의 SSID를 공개로 해 두어야 한다는 것!

다른 모든 (암호나 AES등의)설정이 바르더라도 SSID가 공개상태가 아니면 연결되지 않습니다ㅠㅠ
(한참 과거 이미지를 SDCARD에 구워 테스트 해 보기까지...ㅠㅠ)

 

2. 복사가 완료 되었으면 라즈베리파이에 SD카드를 꽂고 재부팅!

 

- 넉넉하게 1분이상이 지난 후 PC나 노트북의 터미널 프로그램으로 라즈베리파이에 접속합니다.

 

1. 공유기에 접속하셔야 합니다. 웹브라우저에서 공유기에 접속하여 라즈베리파이에 할당된 ip주소를 확인하세요.

 

2. Mac 사용자라면 터미널에서, 윈도우 사용자라면 Putty 등의 앱으로 라즈베리파이에 접속할 수 있습니다.

$ ssh pi@123.123.123.123

3. 접속에 성공했다면, 아이디는 pi, 암호는 raspberry 로 로그인 합니다. 

 

- 환경을 최신상태로 업데이트 합니다. 그리고 모터를 다루기 위한 파이선 라이브러리를 설치 합니다.

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install python-gpiozero


- 이제 아래와 같은 모습의 소형 모터가 필요합니다.

 


 

 

- 이 모터에서 나오는 두 선을 라즈베리파이의 GPIO 14번에 해당하는 핀과 GND 핀에 연결합니다. +,- 구분은 필요 없더군요) 저는 마침 집안에 굴러다니던 커텍터가 있어서 아래와 같이 구성할 수 있었습니다만, 없는 분들은 땜질 좀 하셔야 할 것 같습니다^^;;;

 


 

이미지 출처: https://raspberrypi.stackexchange.com/questions/83610/gpio-pinout-orientation-raspberypi-zero-w

 


 


* 귀찮고 익숙하지 않지만 땜질이 필요했습니다ㅠㅠ

 


 




 

- 연결을 잘 했다면 아래와 같이 모터를 진동시키는 코드를 작성해 보겠습니다.


파일이름: test.py

from gpiozero import PWMOutputDevice
from time import sleep

motor = PWMOutputDevice(14, active_high=True, frequency=100)
motor.off()
while True:
  for i in range(1, 11):
    speed = float (i / float(10))
    print(str(speed))
    motor.value = speed
    sleep(0.5)

exit(0)


- 그리고 아래와 같이 해당 코드를 실행합니다.

$ python test.py

모터가 진동하나요? PWM 제어가 요렇게나 간편해 졌습니다^^


다음 연재의 내용은 "두근두근앱이 라즈베리파이를 두근거리도록 개발한 기록 #2" - 라즈베리파이에서 BLE를 동작시키고 다른 디바이스에서 검색되도록 하는 방법

입니다^^


* 참고로 열심히 배포중이고 개발중인 두근두근앱은 "https://top.dkdk.io"에서 확인하실 수 있습니다^_^






번호 제목 글쓴이 날짜 조회 수
공지 [TIP] 안드로이드 앱 빌드시 "Error:Execution failed for task ':app:compileDebugJavaWithJavac'" 오류가 발생할 경우 파이팅건맨 2017.09.13 8681
공지 [TIP] 죽지 않는 안드로이드 서비스 만들기 (Unstoppable service) [6] 파이팅건맨 2015.06.26 6947
공지 [TIP] 안드로이드 앱이 처음 설치될때 Referrer 정보 받아 오기 파이팅건맨 2016.08.30 4687
44 [TIP] 안드로이드 앱 빌드시 "Error:Execution failed for task ':app:compileDebugJavaWithJavac'" 오류가 발생할 경우 파이팅건맨 2017.09.13 8681
43 [TIP] 죽지 않는 안드로이드 서비스 만들기 (Unstoppable service) [6] 파이팅건맨 2015.06.26 6947
42 [TIP] 안드로이드 앱이 처음 설치될때 Referrer 정보 받아 오기 파이팅건맨 2016.08.30 4687
41 [TIP] 안드로이드 앱 삭제 방지 기능 구현 파이팅건맨 2015.06.03 3579
40 [TIP] 안드로이드 - 설치된 앱 목록 얻기 파이팅건맨 2016.03.22 3563
39 [TIP] 안드로이드에서 구글 스프레드시트에 데이터 쓰기 파이팅건맨 2016.05.04 2678
38 [TIP] 안드로이드 스튜디오에서 Error:android-apt plugin is incompatible with the Android Gradle plugin. Please use 'annotationProcessor' configuration instead 오류날때 파이팅건맨 2018.02.02 2406
37 [TIP] Android - WebView 사용된 앱에 Proguard 적용시 주의 [1] 파이팅건맨 2011.08.06 2323
36 [TIP] 안드로이드의 Floating Window가 Back키를 인지 하는 방법 [2] 파이팅건맨 2016.01.07 2093
35 [TIP] C# Windows Mobile 용 HttpUtility 코드 파이팅건맨 2010.02.23 1935
34 [TIP] 안드로이드의 최상단에 띄워놓은 Floating Window가 키보드를 인지하는 방법 파이팅건맨 2016.01.07 1897
33 [LINK] 증강현실 툴킷 라이브러리 파이팅건맨 2010.02.04 1268
32 WM6.5 프로세스 숨기기 여쭐께요. [1] 이원철 2012.04.18 1266
31 [LINK] cab 파일 설치시 투데이 메뉴에 단축 아이콘 생성하기 파이팅건맨 2010.02.22 1257
30 [TIP] 안드로이드에서 심박수 측정하는 코드 [18] 파이팅건맨 2019.01.02 1185
29 Android 기반의 재미있는 개발제품을 파는 사이트 파이팅건맨 2012.04.26 1174
28 [LINK] 동공, 맥박등 이용 거짓말 탐지기 파이팅건맨 2010.02.05 1064
27 [TIP] 실행파일의 리소스 자원 활용하기 파이팅건맨 2010.02.23 1047
26 [LINK] Windows Mobile 카메라 캡쳐 관련 참고 파이팅건맨 2010.02.04 959
25 [TIP] Error:java.lang.OutOfMemoryError: GC overhead limit exceeded 파이팅건맨 2016.11.03 949
위로