android things - the iot platform for everyone
TRANSCRIPT
Rebecca Franksriggaroo.co.za
@riggaroo
TheIoTplatformforeveryone
Hello
Rebecca Franks
Android Engineering Lead at Dynamic Visual Technologies
Google Developer Expert for Android
riggaroo.co.za
@riggaroo
Expectation vs Reality
What is Android Things?
Android Things is an extension of the Android platform for IoT and embedded devices.
CamerasGatewaysHVAC ControlSmart Meters
Point of SaleInventory ControlInteractive AdsVending Machines
Security SystemsSmart DoorbellsRoutersEnergy Monitors
Asset TrackingFleet ManagementDriver AssistPredictive Service
Ideal for powerful, intelligent devices that need to be secure.
How is Android Things different?
Android Studio
Android SDKs& Developer Tools
Firebase Libraries
Google Cloud Platform SDKs
Any other compatible Android/Java libraries...
IoT Developer Console
Automatic Security Updates
Signed Images Verified Boot
Easy and Secure Deployment
SoMArchitecture
Google Managed BSP
Scaling to Production
Android Things for Developers
Displays are Optional
Consider Alternate UI
Cons
● Only Dev Preview
● Weave not yet available for Android Things
● Very new - Not many examples online - mostly Python
● Some APIs not supported - ie hardwareAcceleration
● Closed Source
Electronics Basics
Components
Breadboard - Construction base for prototyping electronics
Jumper Wire - Used to interconnect the components of a breadboard
LEDs - Emits visible light when an electric current passes through it
Push Switches - Allows electricity to flow between its two contacts
Components
Resistor -Used to reduce current flow
Source: http://www.electronicshub.or g/resistor-color-code/
Components
and many more...
Ohm’s Law
The current through a conductor between two points is directly proportional to the voltage across the two points.
V = I * R V is Voltage (volts)I is Current (amps) R is Resistance (ohms)
I = 0.023AV = 5V
R = 5V / 0.023A R = ± 217 ohms
Building an Android Things app
Pinout Diagram
Fritzing Diagrams
Integrating with Hardware
GPIO
PWM
I2C
SPI
UART
Input
Sensors
GPS
Peripheral Driver
Library
Peripheral I/O
User Drivers
Let’s try live coding..
In case of emergency
● A Raspberry Pi 3 or alternative - Running Android Things
● Create standard project in Android Studio
● Add to app level build.gradle:
provided 'com.google.android.things:androidthings:...'
Getting Started
<application ...>
<uses-library android:name="com.google.android.things"/>
<activity ...>
...
<!-- Launch activity automatically on boot -->
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.IOT_LAUNCHER"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
</application>
AndroidManifest.xml
Button button = new Button("BCM6", Button.LogicState.PRESSED_WHEN_LOW);
button.setOnButtonEventListener(new Button.OnButtonEventListener() {
@Override
public void onButtonEvent(final Button button, final boolean pressed) {
//...
Log.i(TAG, "Button value changed:" + pressed);
ledGpio.setValue(pressed);
}
});
Button Press
compile 'com.google.android.things.contrib:driver-button:0.2'
//get access to the pin
PeripheralManagerService service = new PeripheralManagerService();
ledGpio = service.openGpio("BCM6");
ledGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
ledGpio.setValue(true);
//remember to close the peripheral
ledGpio.close();
Turn on an LED
Turn it on or off using Firebase Realtime DB
FirebaseDatabase.getInstance().getReference("ledKitchen")
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(final DataSnapshot dataSnapshot) {
Boolean value = (Boolean) dataSnapshot.getValue();
ledGpio.setValue(value);
//.. handle exceptions
}
//..
});
Demo
Other Examples
https://github.com/riggaroo/android-things-distributed-piano
Distributed Piano
https://github.com/riggaroo/android-things-electricity-monitor
Firebase Realtime Database
Electricity Monitor
final DatabaseReference onlineRef = firebaseDatabase.child(".info/connected");
final DatabaseReference isPowerOnRef = firebaseDatabase.child("/online");
onlineRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(final DataSnapshot dataSnapshot) {
if (dataSnapshot.getValue(Boolean.class)) {
isPowerOnRef.setValue(true);
isPowerOnRef.onDisconnect().setValue(false);
}
}
//..
});
Electricity Monitor - Firebase
https://github.com/androidthings/sample-tensorflow-imageclassifier
Image Classifier
Image Classifier
Rebecca Franksriggaroo.co.za@riggaroo
Google's IoT Developers Communityhttps://g.co/iotdev
Google's IoT Solutionshttps://iot.google.com
Android Things SDKhttps://developer.android.com/things
Rebecca Franksriggaroo.co.za@riggaroo
www.devconf.co.za/rate
● https://www.myelectronicslab.com/tutorial/raspberry-pi-3-gpio-model-b-block-pinout/
● https://developers.google.com/weave/● https://techcrunch.com/2015/10/24/why-iot-security-is-so-critical/● https://github.com/androidthings/sample-simplepio/● https://developer.android.com/things/index.html● https://github.com/riggaroo/android-things-electricity-monitor● https://github.com/riggaroo/android-things-distributed-piano● https://github.com/riggaroo/android-things-button-examples
Links & References