만약 안드로이드의 프로그램 설계가 완성된다면 랩베리 피도 시작할 수 있습니다!
15191 단어 AndroidThings
Life is Tech!#1 Advent Calendar의 첫날을 맡았습니다. 저는 안드로이드 멘토 아미입니다!잘 부탁드립니다!
첫날 내용이지만 제작 프로그램부터 실제 기계로 작동하는 안드로이드 씽스까지 내용을 적어보고 싶어요!
Android Things란
우선 안드로이드 씽스의 개요에 대해 대략적인 설명을 하고자 합니다.
안드로이드 씽스는 Google이 IoT 기기에 제공하는 플랫폼으로 이름처럼 안드로이드는 원래의 플랫폼입니다.
따라서 안드로이드의 프로그래밍 경험이 있다면 간단하게 개발할 수 있다.
그러나 2019년 2월에는 스마트 스피커와 스마트 디스플레이를 위한 목표 규모가 축소됐고, 하드웨어도 랩버리 Pi3B와 NXP Picoi.MX7D 등만 지원되는 등 그다지 성공하지 못한 형태로 막을 올렸다.
조금 폐기됐지만 안드로이드 GUI를 이용할 수 있고 GPIO 등 기기를 이용할 수 있어 개인이 놀 때 즐길 수 있다.
응용 프로그램 개발
Android Things에 대한 개요를 최대한 빨리 개발하고 싶습니다.
이번에는 GUI의 버튼을 클릭해 LED 불을 켜거나 끄는 간단한 앱을 만들었다.
일반적인 Android 애플리케이션과 마찬가지로 Android Studio를 사용합니다.
새 프로젝트를 만들 때 Android Things 태그를 선택하고 빈 활동을 선택한 다음 한 단계를 누릅니다.
minSDK는 27 이상입니다. 안드로이드 씽즈용 새 API를 사용할 수 있다고 합니다.
앞으로 특별히 변경할 필요 없이 이렇게 진행합시다.
일반적인 안드로이드 앱 제작 때와 같은 화면이 나올 것 같다.
배치
먼저 레이아웃을 하고 필요한 부품은 단추만 있기 때문에 설명을 생략하고 코드는 다음과 같다.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
또 여기 기사.처럼 ActivityTheme.AppCompat
를 사용하지 않으면 오류가 발생하기 때문에 theemes.xml도 편집합니다.<resources>
<style name="Theme.App" parent="Theme.AppCompat.Light.DarkActionBar" />
</resources>
절차.다음 기술절차.
우선 전체적으로는 다음과 같은 형식인 것 같다.
MainActivity.kt
package test.samplethings
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import com.google.android.things.pio.Gpio
import com.google.android.things.pio.PeripheralManager
/**
* Skeleton of an Android Things activity.
*
* Android Things peripheral APIs are accessible through the PeripheralManager
* For example, the snippet below will open a GPIO pin and set it to HIGH:
*
* val manager = PeripheralManager.getInstance()
* val gpio = manager.openGpio("BCM6").apply {
* setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW)
* }
* gpio.value = true
*
* You can find additional examples on GitHub: https://github.com/androidthings
*/
class MainActivity : AppCompatActivity() {
lateinit var gpio: Gpio
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val manager = PeripheralManager.getInstance()
gpio = manager.openGpio("BCM21").apply {
setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW)
setActiveType(Gpio.ACTIVE_HIGH)
}
findViewById<Button>(R.id.button).setOnClickListener {
gpio.value = !gpio.value
}
}
override fun onDestroy() {
gpio.close()
super.onDestroy()
}
}
다음은 각 코드의 해설을 진행한다.GPIO 준비
val manager = PeripheralManager.getInstance()
gpio = manager.openGpio("BCM21").apply {
setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW)
setActiveType(Gpio.ACTIVE_HIGH)
}
먼저 이 섹션에서 Peripheral Manager의 인스턴스를 생성한 다음 지정된 GPIO를 엽니다.이번에 BCM 21, 즉 물리적 판매를 40호로 설정했다.
다음은 setDirection입니다. 이 핀이 입력용인지 출력용인지, 출력용인지 초기에 Low(0V)인지 High(3.3V)인지 설정하는 방법입니다.
이번에는 LED를 깜박이기 위해 출력을 초기값 Low로 설정합니다.
setActiveType은 Boolean형으로 표시된 GPIO 출력의 진실로 Low(0V)인지 High(3.3V)인지 설정하는 방법입니다.
이번에는 하이를 진으로 설정해.
On/Off
findViewById<Button>(R.id.button).setOnClickListener {
gpio.value = !gpio.value
}
버튼을 눌렀을 때 출력 값을 반전합니다.걷어치우다
override fun onDestroy() {
gpio.close()
super.onDestroy()
}
종료 시 onCreate 내에서 열린 GPIO를 종료합니다.Manifest 설정
GPIO를 조작하려면 권한을 설정해야 합니다.
그래서 안드로이드 매니페스트는xml에 한 편
<uses-permission android:name="com.google.android.things.permission.USE_PERIPHERAL_IO" />
을 추가합니다.또 배치에 관련된 오류에 대응하기 위해
<application android:label="@string/app_name">
에 추가android:theme="@style/Theme.App"
했다.<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="test.samplethings">
<uses-permission android:name="com.google.android.things.permission.USE_PERIPHERAL_IO" />
<application android:label="@string/app_name"
android:theme="@style/Theme.App">
<uses-library android:name="com.google.android.things" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- Make this the first activity that is displayed when the device boots. -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
Things 응용 프로그램이 제작되었습니다.이후 안드로이드 앱을 만들 때와 마찬가지로 Buid에서 APK를 만들자.
드래그 네트에 설치
먼저 Android Things Console에 로그인하세요.
Google 계정이 있으면 규약에 동의하여 사용할 수 있습니다.
그런 다음 Create Product를 선택하여 항목을 매립합니다.
SOM Type Raspberry Pi3 을 선택합니다.
제작되면 다음 화면이 열립니다. Models의 항목을 선택하십시오(그림은 6h16o0).
다음 화면에서 CREATEA BUILD CONFIGURATION을 선택하여 항목을 채웁니다.
다음은 특별히 설정된 항목입니다.
다른 항목은 입력하거나 NEXT로 건너뛸 수 있습니다.
제작이 완료되면 다음과 같은 내용이 표시됩니다.
이 Download 항목을 선택하고 Development를 누르면 이미지 다운로드가 시작됩니다.
다운로드가 완료되면 balena Etcher 등으로 마이크로SD에 쓰세요.
설치가 완료되었습니다.
동작 확인
그리고 고무의 GND와 40호를 저항과 LED에 연결해 고무와 모니터를 연결한 상태에서 전원을 켜면 완성!사진은 좀 못생겼지만 LED를 잘 켤 수 있다.
이번에 업로드한 APK는 이미지를 사용했고 ADB 무선 연결 디버깅도 사용할 수 있다.
이 경우 Android Things 설정에서 IP 주소
adb connect [IP address]
를 확인하거나 adb connect Android.local
로 연결하십시오.끝말
"만약 안드로이드의 프로그래밍이 완성된다면, 랩베리 피도 시작할 수 있습니다!"그래서 Android Things를 사용하여 개발했습니다!
이번에 GPIO를 직접 사용했는데, PWM과 SPI 등도 사용할 수 있기 때문에 다른 센서도 사용할 수 있고, 반렌즈 필름이 붙은 모니터로 스마트 렌즈를 만드는 것도 재미있다.
지금까지 안드로이드는 스마트폰 앱만 만들었는데 고무호떡으로 이동하면 더 다양한 것을 만들 수 있어 재미있을 것 같으면 좋겠다!
Reference
이 문제에 관하여(만약 안드로이드의 프로그램 설계가 완성된다면 랩베리 피도 시작할 수 있습니다!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/AMiDa_38/items/246d064d167039861b56텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)