Pebble을 통해 안드로이드의 이미지 슬라이드를 원격으로 조작

예전에하지만 이번에는 Pebble 앱을 직접 만들고 싶어서 해봤어요.겸사겸사 안드로이드와의 협업에도 도전했다.
Pebble 버튼과 제스처를 사용하여 원격 작업을 수행할 수 있습니다.
Pebble을 통한 Power 원격 작업
대체로 문서의 샘플만 직접 사용하기 때문에 대충 설명해 드리겠습니다.

차리다


Pebble 어플리케이션 개발
- Pebble 시계(디버깅용, 1세대 Pebble 사용)
- Pebble 계정
- CloudPebble IDE ( 비디오 검색 )
Android 애플리케이션 개발
- Android 장치(디버깅용)
- Android Studio
기본적으로 Pebble 앱은 클라우드에서 개발할 수 있으며 브라우저만 있으면 OK.응용 프로그램의 동작 확인은 클라우드 피블로 할 수 있지만 이번에는 가속도 센서의 데이터를 얻어야 하기 때문에 실제 기기를 사용하는 것이 비교적 편리하다.

Pebble 어플리케이션 개발


우선 Pebble 쪽부터 시작합시다.기본적으로참고로 개발했습니다.
개발 언어는 JavaScript 또는 C로 선택할 수 있으며 이번에는 C를 사용했습니다.
C를 모르는 사람도 친절해야 한다.준비가 다 되었으니 저것을 참고하세요.
4https://cloudpebble.net GiitHub에 공개.
하나의 설명 소스 코드가 길어지기 때문에 문서의 어느 페이지만 참고했는지 설명합니다.

그래프


웹 페이지 정보
도형에 관해서는 버튼으로 제어할 수 있도록 이런 느낌을 만들어 보았다.
위 단추는 이전 슬라이드를 열거나 닫을 수 있고, 다음 단추는 다음 슬라이드를 열거나 닫을 수 있으며, 중간에는 제스처 모드를 열거나 닫을 수 있다.
자습서
하면 되지만 이번에는 사각형과 문자의 표시만 있기 때문에 복사하여 붙이면 간단하게 완성할 수 있습니다.

버튼 이벤트


소스 코드
Single Clicks가 사용된 곳입니다.Up, Select, Down 세 가지 활동에 대해 각각 필요합니다.

가속도 센서



이 응용 프로그램의 가장 관건적인 것은 바로 이 가속도 센서다.
내가 하고 싶은 것은 Pebble을 좌우로 흔들어 슬라이드가 흔들리는 방향으로 바꾸는 것이다.
따라서 좌우 진동 시 가속도를 측정할 필요가 있다.물리적·사고에 소질이 없기 때문에 코드는 실제 페블에서 여러 차례 실험해 얻은 값에 따라 만들어진다(웃음).더 좋은 알고리즘이 있을지도 몰라요.
가속도 센서 값을 실제 처리하는 부분acceldata_handler ()만 소개합니다.
main.c
.
.

static void accel_data_handler(AccelData *data, uint32_t num_samples) {
  if(!gesture_mode)return;

  // Read sample 0's x, y, and z values
  //   int16_t x = data[0].x;
  //   int16_t y = data[0].y;
  int16_t z = data[0].y;


  // Determine if the sample occured during vibration, and when it occured
  bool did_vibrate = data[0].did_vibrate;
  uint64_t timestamp = data[0].timestamp;

  if(!did_vibrate) {
    // Print it out
    //     APP_LOG(APP_LOG_LEVEL_INFO, "x: %d, y: %d, z: %d", x, y, z);
    APP_LOG(APP_LOG_LEVEL_INFO, "z: %d preZ: %d (z-preZ): %d", z, preZ, (z-preZ));
    if(delay > 0){
      preZ = z;
       delay--;
    }else if((z-preZ) > 400){
      APP_LOG(APP_LOG_LEVEL_DEBUG, "Next: %d", (z-preZ));
      send_data(1);
      delay = 5;
    }else if((z-preZ) < -400){
      APP_LOG(APP_LOG_LEVEL_DEBUG, "Back %d", (z-preZ));
       send_data(2);
      delay = 5;
    }else{
      preZ = z;
    }
  } else {
    // Discard with a warning
    APP_LOG(APP_LOG_LEVEL_WARNING, "Vibration occured during collection");
  }

}


내용은 다음과 같습니다.
매번 가속도의 z값만 읽고 이전의 z값(preZ)과 현재의 z값의 차이가 크면 (-400delay에 대해 시작과 끝 모두 큰 변화가 발생하기 때문에 진동만 측정하기 위해 좀 늦출까요?이런 사람은 조금 건너뛴다.

커뮤니케이션


DRAWING PRIMITIVES, IMAGES AND TEXT
안드로이드와 Pebble 사이의 통신은 int형의 1(다음 슬라이드)이나 2(전 슬라이드)의 값을 간단하게 검출하면 안드로이드에게만 발송됩니다.
코드에 관해서 우리는 각양각색의 호출 서비스를 준비했다.Inbox가 성공적으로 수신되어 콜백이 실패했습니다.Outbox가 성공적으로 전송되어 콜백에 실패했습니다.
발송에 관해서는 발송 값의 유형에 따라 방법이 달라지지만 기본 절차는
Outbox 버퍼 준비 → 보내려는 데이터를 사전에 쓰기 → 보내기
.
이상은 이번 Pebble 측의 개발입니다.

실기 확인


클라우드 Pebble에서는 Andorid 기기의 Pebble 공식 앱 설정에서'Enable Developer Mode'가 열리고'Developer Connection'이'Enable'로 바뀌며 클라우드 Pebble의 Build 버튼으로 직접 Pebble 실기에 설치해 앱의 동작과 로그를 확인할 수 있다.

Android 애플리케이션 개발


주요했어GiitHub에 공개 중입니다.

설정


안드로이드 측의 수신은
BUTTONS
먼저 안드로이드에서 PebbleKit를 사용해야 한다는 것을 알 수 있을 것이다.
Android Studio 프로젝트 Module: app에서의buildgradle에 도달
app/build.gradle
dependencies {
    compile 'com.getpebble:pebblekit:3.1.0@aar'
}
추가합니다.
또 dependencies 아래쪽에 Sonatype OSS 창고도 추가됐다.
app/buid.gradle
repositories {
    mavenCentral()
    maven { url "https://oss.sonatype.org/content/groups/public/" }
}
이렇게 하면 PebbleKit를 사용할 수 있습니다.

편지를 받다


스마트 로봇 측의 정보 수신은 간단하다, PebbleKit.PebbleData Receiver의 실례를 정의하고 ReceiverData () 덮어쓰기 방법의 내용에서 받은 데이터에 대해 무엇을 하면 됩니다.
코드는 PebbleData Receiver와 관련된 부분만 설명합니다.
MainActivity.java
public class MainActivity ... {
 final UUID APP_UUID = UUID.fromString("自分のアプリUUID");
 PebbleKit.PebbleDataReceiver dataReceiver;
 .
 .
 .


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        .        
        .
        .


        // Create a receiver to collect logged data
        dataReceiver = new PebbleKit.PebbleDataReceiver(APP_UUID) {

            @Override
            public void receiveData(Context context, int transaction_id,
                                    PebbleDictionary dict) {
                // A new AppMessage was received, tell Pebble
                PebbleKit.sendAckToPebble(context, transaction_id);

                // If the tuple is present...
                Long value = dict.getInteger(0);
                if(value != null) {
                    // Read the integer value
                    int data = value.intValue();

                    Log.d(TAG, "Data: " + data);


                }else{
                    Log.d(TAG, "Data is null");
                }
            }

        };
    }

    @Override
    public void onResume() {
        super.onResume();

        // Register the receiver
        PebbleKit.registerReceivedDataHandler(getApplicationContext(), dataReceiver);
    }
}
Cloud Pebble IDE 자체 프로젝트 페이지의'Setting''앱 UID'에서'자신의 앱 UUID'를 알 수 있다.

슬라이드 만들기


ViewPage를 사용하여 여러 이미지를 슬라이드로 표시합니다.
ACCELEROMETER
이 공식 강좌와 대체적으로 같은 일을 하면서 코드를 분리하고 있기 때문이다.슬라이드 내용만 텍스트에서 이미지로 변환합니다.
단계
슬라이드 내용으로 View → ViewPager 만들기 Fragment 제작 → 주 Activity 및 레이아웃 추가 ViewParger 기술
.

슬라이드 전환


마지막으로 Pebble 측에서 받은 값에 따라 슬라이드를 전환합니다.
ReceiverData()에서 방금 받은 값 데이터를 사용하여 ViewPager mPager를 조작합니다.
 if(data == 1){
   int currentPage = mPager.getCurrentItem();
   mPager.setCurrentItem(currentPage - 1);
 }else if(data == 2){
   int currentPage = mPager.getCurrentItem();
   mPager.setCurrentItem(currentPage + 1);
 }

이렇게 하면 1을 받으면 이전 슬라이드, 2를 받으면 다음 슬라이드로 넘어갑니다.

총결산


이렇게 되면 안드로이드와 Pebble 프로젝트 둘 다 만들고 시작할 수 있으며, Pebble의 버튼이나 제스처로 블루투스로 안드로이드의 이미지 슬라이드를 원격으로 조작할 수 있다.
주제 밖의 말을 좀 해라, 나는 지금도 1세대 Pebble을 쓰고 있다.
어느새 새로운 Pebble은 색깔이 되고 동그랗게 변하며 헬스에 대응해 여러 가지가 있는데 일본에서도 확대됐으면 좋겠습니다.

좋은 웹페이지 즐겨찾기