메뉴 건너뛰기

모바일앱


 

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


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

- 이제 소형 모터가 필요합니다. 저 같은 경우는 아래 사진과 같은 모터를 준비했습니다.

작을수록 제대로 진동합니다. (크고 힘이 쎈 모터라면 별도의 전원 구성을 해주어야 동작합니다) 

3V 이하의 전압으로 동작하는 놈으로 고르면 됩니다.

 


 

방수기능도 있는 모터라고 하는데, 솔직히 제작목적이... 네, 좀 그런 것 같습니다 >.<

 

물론 아래와 같은 모습의 모터도 있습니다. 요런걸 구입해도 됩니다.

 


 

 

- 이 모터에서 나오는 두 선을 라즈베리파이의 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] 죽지 않는 안드로이드 서비스 만들기 (Unstoppable service) [6] 파이팅건맨 2015.06.26 6503
공지 [TIP] 안드로이드 앱 빌드시 "Error:Execution failed for task ':app:compileDebugJavaWithJavac'" 오류가 발생할 경우 파이팅건맨 2017.09.13 6096
공지 [TIP] 안드로이드 앱이 처음 설치될때 Referrer 정보 받아 오기 파이팅건맨 2016.08.30 3327
43 [TIP] iOS - UIWebView에 로컬 html 파일 로드하기 (Swift 4) 파이팅건맨 2019.06.05 13
42 [TIP] Tizen Push가 갑자기 내려오지 않을때 파이팅건맨 2019.05.20 18
41 [TIP] 두근두근앱이 라즈베리파이를 두근거리도록 개발한 기록 #3 파이팅건맨 2019.05.15 61
40 [TIP] 두근두근앱이 라즈베리파이를 두근거리도록 개발한 기록 #2 파이팅건맨 2019.05.11 88
39 [TIP] Android 코드에서 블루투스 연결이 잘 안될때 파이팅건맨 2019.05.11 80
» [TIP] 두근두근앱이 라즈베리파이를 두근거리도록 개발한 기록 #1 파이팅건맨 2019.05.07 113
37 [TIP] 타이젠 스튜디오에서 웨어러블 디바이스로 디버깅을 위한 바이너리 전송이 안 될때 파이팅건맨 2019.03.26 123
36 [TIP] http://tizen.org/system/tizenid 으로 타이젠 고유 id를 확보할 때 유의할 점 파이팅건맨 2019.03.14 67
35 [TIP] "cordova run android" 명령을 실행했는데 "A problem occurred evaluating project ':CordovaLib'"오류가 뜰때 파이팅건맨 2019.01.22 173
34 [TIP] Mac에서 Cordova run android 를 실행했는데 "Command failed with exit code EACCES" 오류가 뜰때 파이팅건맨 2019.01.22 128
33 [TIP] 안드로이드에서 심박수 측정하는 코드 [6] 파이팅건맨 2019.01.02 301
32 [TIP] Google Cloud API 사용시 안드로이드의 Assets 폴더에 있는 Crendential 파일 사용하기 파이팅건맨 2018.05.29 206
31 [TIP] 안드로이드 스튜디오에서 Error:android-apt plugin is incompatible with the Android Gradle plugin. Please use 'annotationProcessor' configuration instead 오류날때 파이팅건맨 2018.02.02 1738
30 [TIP] 안드로이드 앱 빌드시 "Error:Execution failed for task ':app:compileDebugJavaWithJavac'" 오류가 발생할 경우 파이팅건맨 2017.09.13 6096
29 [TIP] Error:java.lang.OutOfMemoryError: GC overhead limit exceeded 파이팅건맨 2016.11.03 864
28 [TIP] 안드로이드 앱이 처음 설치될때 Referrer 정보 받아 오기 파이팅건맨 2016.08.30 3327
27 [TIP] 안드로이드에서 구글 스프레드시트에 데이터 쓰기 파이팅건맨 2016.05.04 2427
26 [TIP] 안드로이드에서 키보드가 나타날 때 레이아웃이 위로 움직인다면 파이팅건맨 2016.03.22 811
25 [TIP] 안드로이드 - 설치된 앱 목록 얻기 파이팅건맨 2016.03.22 2947
24 [TIP] 안드로이드의 최상단에 띄워놓은 Floating Window가 키보드를 인지하는 방법 파이팅건맨 2016.01.07 1638
위로