JCrete Embedded Java Workshop

Post on 15-Jan-2015

694 views 2 download

Tags:

description

Slides from the embedded Java workshop on the last day of the JCrete unconference. Includes instructions for Lego Mindstorms EV3 and Raspberry Pi.

Transcript of JCrete Embedded Java Workshop

JCrete Embedded Java HackingStephen 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

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

11

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)

13

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

14

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

18

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 Project

> Open-source project to demonstrate lambda features> Visual representation of streams, filters, and maps

20

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)

21

camel.png lion.png greendragon.png cow.png Brownbear.png

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

23

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

24

Pi Cobbler

> Connects your Pi to the Breadboard

> The white line is Pin 1

> Connect it in the center top of your Breadboard

25

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")

26

ControlGpioExample

27

> 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

28

ListenGpioExample

29

> Demonstrates Listening to a pin: addListener(pinListener)

> Change the message/action whena button is pressed!

sudo java -classpath .:classes:/opt/pi4j/lib/'*' ListenGpioExample

BlinkGpioExample

30

> Use LEDs and Buttons together!

sudo java -classpath .:classes:/opt/pi4j/lib/'*' BlinkGpioExample

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/

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"

41

Creating a New LeJOS Project

> Go to "File" > "New" > "Project…"> Choose a LeJOS EV3 Project

42

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)

43

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(); }}

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

65

Wind Turbine Wiring

> Port A – Medium Moto Power Fan

> Port B – Large Motor Rotate Wind Turbine

> Port 1 – Light Sensor Track Ambient Light

66

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.