oracle iot kids workshop
DESCRIPTION
Internet of Things workshop for kids. Shows how you can use Java on Raspberry Pi and Lego Mindstorms with some fun projects that are easy to program.TRANSCRIPT
Oracle IoT Kids WorkshopStephen ChinJava Technology AmbassadorJavaOne Content Chair
@steveonjava
What Runs Java?
What Runs Java?
Java and 3G in a Tiny Package
> Cinterion EHS5
Really Tiny…
27.6mm
18.8
mm
http://upload.wikimedia.org/wikipedia/commons/3/3d/Cloud_forest_Ecuador.jpg
=
Have Java With Your DessertRaspberry Pi
Pis are Affordable
$35
Pis are Affordable
$35 1 Box of Diapers
Bicycle(but just 1 wheel)
A Cake
Chalkboard Electronics Touchscreen
10" or 7" Form Factor
Connects via HDMI/USB
Tested with JavaFX 8
10% Exclusive Discount:
G1F0U796Z083
How to Setup Your Pi
> Step 1: Install Linux
> Step 2: Download/Copy Java 8 for ARM
> Step 3: Deploy and Run JVM Language Apps
http://steveonjava.com/javafx-on-raspberry-pi-3-easy-steps/
Electronic Safety!
> Unplug from wall before wiring
> Get rid of static by touching a metal surface
> Don't touch exposed wires/metal
> Never remove/insert SD Card while power is on
12
What Comes in Your Lab Kit
1. Touch Screen2. SD Card3. Keyboard4. Yellow Box:
Power Adapter LVDS Cable/Board Raspberry Pi Model B Mini-USB Cable (power)
Please Save All the Packaging for Later
Hooking Up the Pi (Part A)
1. Insert the SD Card in to the Pi Will appear upside down when looking at the top
of your Pi
2. Insert the HDMI board into the Pi's HDMI jack
3. Connect the Pi power to the HDMI board Use the Micro USB Cable (short one)
14
Important: Connect everything before plugging into the wall
Hooking Up the Pi (Part B)
4. Slide the LCD cable into the back of the display Side with gold connectors goes up Be careful, the connector is fragile!
5. Hook up the USB keyboard6. Connect the USB end to one of the Pi's USB host ports
This provides touch input
15
Verify connections and plug into power now
Is it Working?
> Should get a bunch of flashing LEDs to indicate booting Boot takes approx 30 seconds
> The LCD screen should light up Might be dim if the light sensor is obstructed
> And you will should see a Linux boot screen with lots of text
Logging In
At the login prompt type your username:> piAnd enter the password:> raspberry
Running the JavaFX Sample Application
Change directory to the project folder> cd MaryHadALittleLambdaRun the build script> ant
19
Hacking the Code
Run the nano text editor:> nano src/sample/MapObject.javaSave your changes:> Control-O EnterExit Nano:> Control-XCompile/Run:> ant
Mary Had a Little Lambda
Mary had a little lambdaWhose fleece was white as snowAnd everywhere that Mary wentLambda was sure to go!
https://github.com/steveonjava/MaryHadALittleLambda
Generating Streams
From a collection:> anyCollection.stream();Known set of objects:> Stream.of("bananas", "oranges", "apples");Numeric range:> IntStream.range(0, 50)Iteratively:> Stream.iterate(Color.RED, > c -> Color.hsb(c.getHue() + .1, c.getSaturation(), > c.getBrightness())); 22
Let's Create Some Barn Animals!
SpriteView tail = s.getAnimals().isEmpty() ? s : s.getAnimals().get(s.getAnimals().size() - 1);
Stream.iterate(tail, SpriteView.Lamb::new) .skip(1).limit(7) .forEach(s.getAnimals()::add);
23
24
Filtering Streams
Predicate Expression> public interface Predicate<T> {> public boolean test(T t);> }
Filter out minors> adults = attendees.filter(a -> a.getAge() >= 1.8)
25
Rainbow-colored Lambs!
s.getAnimals().stream() .filter(a -> a.getNumber() % 4 == 2) .forEach(a -> a.setColor(Color.YELLOW));s.getAnimals().stream() .filter(a -> a.getNumber() % 4 == 3) .forEach(a -> a.setColor(Color.CYAN));s.getAnimals().stream() .filter(a -> a.getNumber() % 4 == 0) .forEach(a -> a.setColor(Color.GREEN));
26
27
Filtering Collections
Collection.removeIf> Removes all elements that match the predicateList.replaceAll> In-place filtering and replacement using an unary operator
ObservableCollection.filtered> Returns a list filtered by a predicate this is also Observable
28
Picky Eaters…
Predicate<SpriteView> pure = a -> a.getColor() == null;
mealsServed.set(mealsServed.get() + s.getAnimals().filtered(pure).size());
s.getAnimals().removeIf(pure);
29
30
Mapping Streams
Applies a Map Function to each element:> Function<? super T, ? extends R>
Result: List is the same size, but may be a different type.
31
Single Map
s.getAnimals().setAll(s.getAnimals() .stream() .map(sv -> new Eggs(sv.getFollowing()) .collect(Collectors.toList()));
32
Or a Double Map!
s.getAnimals().setAll(s.getAnimals() .stream() .map(SpriteView::getFollowing) .map(Eggs::new) .collect(Collectors.toList()));
33
34
Flat Map
Applies a One-to-Many Map Function to each element:> Function<? super T, ? extends Stream<? extends R>>And then flattens the result into a single stream.
Result: The list may get longer and the type may be different.
35
Hatching Eggs
s.getAnimals().setAll(s.getAnimals() .stream() .flatMap(SpriteView.Eggs::hatch) .collect(Collectors.toList()));
36
37
Reduce
Reduces a list to a single element given:> Identity: T> Accumulator: BinaryOperator<T>
Result: List of the same type, but only 1 element left.
38
And the (formerly little) Fox ate them all!
Double mealSize = shepherd.getAnimals() .stream() .map(SpriteView::getScaleX) .reduce(0.0, Double::sum);
setScaleX(getScaleX() + mealSize * .2);setScaleY(getScaleY() + mealSize * .2);shepherd.getAnimals().clear();
39
40
Mary Had a Little Lambda Project
> Open-source project to demonstrate lambda features> Visual representation of streams, filters, and maps
41
https://github.com/steveonjava/MaryHadALittleLambda
Stuff to do…
> Changes to MaryHadALittleLambda: Change the number of sheep Make the rainbow have different colors Change the fox size to be fatter/skinnier Add new graphics (additional image files under images/extra)
42
camel.png lion.png greendragon.png cow.png Brownbear.png
Stephen Chintweet: @steveonjavablog: http://steveonjava.com
nighthacking.com
Real GeeksLive Hacking
NightHacking Tour
Hacking Time!
GPIO access
Wiring LEDs
> Wire the elements in series: Connect the long end
of the LED to GPIO Connect the short end
of the LED to the resistor
Connect the resistor to Ground
45
To GPIO To Ground
Using a Breadboard
> Pins are connected horizontally in the center
> The edges are connect vertically
> No current passes the center line
46
Pi Cobbler
> Connects your Pi to the Breadboard
> The white line is Pin 1
> Connect it in the center top of your Breadboard
47
Pi4J
> The samples are located in/opt/pi4j/examples
> Compile the samples by typing "./build"> Instructions for running the samples are
printed out at the end of the build> Pi4j needs root access to use GPIO (use
"sudo")
48
ControlGpioExample
49
> Demonstrates Controlling Pins: pin.low() pin.toggle() pin.pulse(duration, blocking)
> Try creating your own pattern!
sudo java -classpath .:classes:/opt/pi4j/lib/'*' BlinkGpioExample
Wiring Buttons
> Connect a circuit across two legs
> While the button is pressed… The legs numbered 1
and 2 are connected The legs numbered 3
and 4 are connected
50
ListenGpioExample
51
> Demonstrates Listening to a pin: addListener(pinListener)
> Change the message/action whena button is pressed!
sudo java -classpath .:classes:/opt/pi4j/lib/'*' ListenGpioExample
BlinkGpioExample
52
> Use LEDs and Buttons together!
sudo java -classpath .:classes:/opt/pi4j/lib/'*' BlinkGpioExample
Stephen Chintweet: @steveonjavablog: http://steveonjava.com
nighthacking.com
Real GeeksLive Hacking
NightHacking Tour
Hacking Time!
LeJOSHow it works on the EV3
The Heart of the EV3
> TI Sitara AM1808 ARM9, 300Mhz
> 64MB RAM / 16MB Flash> Analog to Digital Converter> 4 Motor Ports> 4 Sensor Ports> Bluetooth / USB> MicroSD
EV3 Motors
EV3 Sensors
Color and Light Sensor
High frequency sound waves
Measuring mode Vs Presence Mode
Ultrasonic Sensor
Infrared Sensor
Remote Control
Getting Started with LeJOS
> Micro SD Card (> 2GB)> Compatible WIFI adapter
NetGear WNA1100 EDIMAX EW-7811Un
> Linux (or a Linux VM)
> Details here:
Creating Your SD Card
http://sourceforge.net/p/lejos/wiki/Home/
Lego Duke Segway
Bluetooth Pairing
> Make sure your Lego is turned on> Open "Devices and Printers" from the
Start menu> Click "Add a device"> Select the Lego brick> After pairing, right click on the new
device and choose "Connect using" > "Access point"
Eclipse Setup
> Open Eclipse> Go to "Preferences"> Click on leJOS EV3> Change the brick name to
"10.0.1.1"
65
Creating a New LeJOS Project
> Go to "File" > "New" > "Project…"> Choose a LeJOS EV3 Project
66
Create a Class File
> Create a new class ("File" > "New" > "Class")
> Give it a package (e.g. sample)> Give it a name (e.g. LCDTest)
67
Simple LeJOS Application
import lejos.nxt.Button;import lejos.nxt.LCD;public class EV3FirstProgram { public static void main(String[] args) { LCD.clear(); LCD.drawString("First EV3 Program", 0, 5); Button.waitForAnyPress(); LCD.clear(); LCD.refresh(); }}
Stephen Chintweet: @steveonjavablog: http://steveonjava.com
nighthacking.com
Real GeeksLive Hacking
NightHacking Tour
Hacking Time!
Parts you will need Step 1
Assemble Brace
Step 2 Completed Brace
Assemble Brace
Parts you will need Step 1
Build Base
Step 2 Completed Base
Build Base
Motor parts Snap them on partially
Assemble Motor
Take motor and base And connect them like this
Assemble Motor
Foot parts Step 1
Add a Foot
Step 2 Add the Foot to the Base
Add a Foot
Assembled Foot and Base
Add a Foot
Lock parts Partially insert the red attachers
Add a Lock
Attach the lock Push down the red attachers to secure
Add a Lock
Tower parts Step 1 – push the rod all the way through
Construct the Tower
Step 2 Attach the Tower to the Base
Construct the Tower
Completed Tower
Construct the Tower
Fan Motor parts Step 1
Build the Fan Motor
Completed Fan Motor
Build the Fan Motor
Light Sensor parts Step 1
Construct the Light Sensor
Completed Light Sensor
Construct the Light Sensor
Fan Blade parts Step 1
Assemble the Fan Blades
Fan Blade, Light Sensor, and Fan Motor Completed Fan
Assemble the Fan
Assembled Wind Turbine
90
Wind Turbine Wiring
> Port A – Medium Moto Power Fan
> Port B – Large Motor Rotate Wind Turbine
> Port 1 – Light Sensor Track Ambient Light
91
Gear Box parts Step 1
EC: Gear Box Construction
Completed Fan with Gear Box
EC: Gear Box Construction
Making the Wind turbine turn
public class WindTurbine { public static void main(String[] args) { EV3MediumRegulatedMotor fan = new EV3MediumRegulatedMotor(MotorPort.A); fan.setSpeed(1500); fan.setAcceleration(150); fan.backward(); Delay.msDelay(10000); }}
Making the Tower spin
public class WindTurbine { public static void main(String[] args) { EV3LargeRegulatedMotor base = new EV3LargeRegulatedMotor(MotorPort.B); base.setSpeed(80); base.rotateTo(-90); base.rotateTo(90); }}
Checking the Ambient Light
public class WindTurbine { public static void main(String[] args) { EV3ColorSensor light = new EV3ColorSensor(SensorPort.S1); float[] sample = new float[1]; SensorMode mode = light.getAmbientMode(); mode.fetchSample(sample, 0); LCD.drawString("Light = " + sample[0], 0, 4); Delay.msDelay(5000); }}
Putting it all together…
> Can you write a program that will:1. Rotate the fan in a circle2. Check the ambient light while rotating3. Move back to the brightest angle4. Spin the fan
http://commons.wikimedia.org/wiki/Wind_generator#mediaviewer/File:Eolienne_et_centrale_thermique_Nuon_Sloterdijk.jpg
Stephen Chintweet: @steveonjavablog: http://steveonjava.com
nighthacking.com
Real GeeksLive Hacking
NightHacking Tour
Safe Harbor Statement
The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.