그래들 설정
아래 쪽 dependencies에 다음 내용을 아래 그림과 같이 추가해줍니다. GPIO는 기존의 안드로이드에 포함되어 있는 내용이 아니기 때문에 Things Support Library를 추가해줘야 합니다. MPU6050은 기존에 제공되는 라이브러리가 없어, 메카솔루션에서 개발해서 배포 중입니다. 아래 링크로 가시면 배포 중인 라이브러리에 대한 정보를 얻을 수 있습니다.
dependencies {
...
provided 'com.google.android.things:androidthings:0.5.1-devpreview'
compile 'com.mechasolution:mpu6050:0.1'
}
매니페스트 설정
아래와 같이 <application .... >이 끝나는 부분에 아래 코드를 입력합니다.
<application>
<uses-library android:name="com.google.android.things"/>
...
</application>
주기적으로 MPU6050의 값을 읽어오기 위해 mpu6050과 쓰레드 클래스 객체를 선언해줍니다. While문 내부는 후에 채우도록 하겠습니다.
Private mpu6050 mMpu6050 = new mpu6050();
Thread mThread = new Thread() {
public void run() {
while (true) {
// put your main code here, to run repeatedly:
}
}
};
초기화를 하려면 먼저 생성된 mMpu객체의 함수 Open()을 하면 됩니다. Open 후에 주기적으로 값을 읽어올 수 있도록 Thread를 시작합니다.
try {
mMpu.open();
} catch (IOException e) {
e.printStackTrace(); }
mThread.start();
이제 쓰레드 함수 내에서 센서 값을 읽어보도록 하겠습니다. 센서 값은 mpu6050 클래스의 getAccelX(), getAccelY(), getAccelZ(), getGyroX(), getGyroY(), getGyroZ() 그리고 getTemp()를 통해 가져올 수 있습니다. 아래와 같이 쓰레드 함수 내부를 작성해 줍니다.
Thread mThread = new Thread() {
public void run() {
while (true) {
// put your main code here, to run repeatedly:
try {
Log.i("Acel", String.format(
"%f \t %f \t %f",
mMpu.getAccelX(), mMpu.getAccelY(), mMpu.getAccelZ()));
Log.i("Gyro", String.format(
"%f \t %f \t %f",
mMpu.getGyroX(), mMpu.getGyroY(), mMpu.getGyroZ()));
Log.i("Temp", String.format("%f", mMpu.getTemp()));
} catch (IOException e) {
e.printStackTrace();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};