JCrete Embedded Java 
Hacking 
Stephen Chin 
Java Technology Ambassador 
JavaOne Content Chair 
@steveonjava
What Runs Java?
What Runs Java?
Java and 3G in a Tiny Package 
> Cinterion EHS5
Really Tiny… 
27.6mm 
18.8mm
http://upload.wikimedia.org/wikipedia/commons/3/3d/Cloud_forest_Ecuador.jpg
= 
Have Java With Your Dessert 
Raspberry 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 Screen 
2. SD Card 
3. Keyboard 
4. 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 keyboard 
6. 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: 
> pi 
And enter the password: 
> raspberry
Running the JavaFX Sample Application 
Change directory to the project folder 
> cd MaryHadALittleLambda 
Run the build script 
> ant
18
Hacking the Code 
Run the nano text editor: 
> nano src/sample/MapObject.java 
Save your changes: 
> Control-O Enter 
Exit Nano: 
> Control-X 
Compile/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 
To GPIO To Ground 
23
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 when 
a 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
LeJOS 
How 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 
Ultrasonic Sensor 
Measuring mode Vs Presence Mode
Infrared Sensor
Remote Control
Getting Started with LeJOS 
Creating Your SD Card 
> Micro SD Card (> 2GB) 
> Compatible WIFI adapter 
 NetGear WNA1100 
 EDIMAX EW-7811Un 
> Linux (or a Linux VM) 
> Details here: 
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(); 
} 
}
Assemble Brace 
Parts you will need Step 1
Assemble Brace 
Step 2 Completed Brace
Build Base 
Parts you will need Step 1
Build Base 
Step 2 Completed Base
Assemble Motor 
Motor parts Snap them on partially
Assemble Motor 
Take motor and base And connect them like this
Add a Foot 
Foot parts Step 1
Add a Foot 
Step 2 Add the Foot to the Base
Add a Foot 
Assembled Foot and Base
Add a Lock 
Lock parts Partially insert the red attachers
Add a Lock 
Attach the lock Push down the red attachers to secure
Construct the Tower 
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
Build the Fan Motor 
Fan Motor parts Step 1
Build the Fan Motor 
Completed Fan Motor
Construct the Light Sensor 
Light Sensor parts Step 1
Construct the Light Sensor 
Completed Light Sensor
Assemble the Fan Blades 
Fan Blade parts Step 1
Assemble the Fan 
Fan Blade, Light Sensor, and Fan Motor Completed 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
EC: Gear Box Construction 
Gear Box parts Step 1
EC: Gear Box Construction 
Completed Fan with Gear Box
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 circle 
2. Check the ambient light while rotating 
3. Move back to the brightest angle 
4. Spin the fan 
http://commons.wikimedia.org/wiki/Wind_generator#mediaviewer/File:Eolienne_et_centrale_thermique_Nuon_Sloterdijk.jpg
Stephen Chin 
tweet: @steveonjava 
blog: http://steveonjava.com 
NightHacking Tour 
Real Geeks 
Live Hacking 
nighthacking.com
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.

JCrete Embedded Java Workshop

  • 1.
    JCrete Embedded Java Hacking Stephen Chin Java Technology Ambassador JavaOne Content Chair @steveonjava
  • 2.
  • 3.
  • 4.
    Java and 3Gin a Tiny Package > Cinterion EHS5
  • 5.
  • 6.
  • 7.
    = Have JavaWith Your Dessert Raspberry Pi
  • 8.
  • 9.
    Chalkboard Electronics Touchscreen  10" or 7" Form Factor  Connects via HDMI/USB  Tested with JavaFX 8  10% Exclusive Discount: G1F0U796Z083
  • 10.
    How to SetupYour 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/
  • 11.
    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
  • 12.
    What Comes inYour Lab Kit 1. Touch Screen 2. SD Card 3. Keyboard 4. Yellow Box:  Power Adapter  LVDS Cable/Board  Raspberry Pi Model B  Mini-USB Cable (power) Please Save All the Packaging for Later
  • 13.
    Hooking Up thePi (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
  • 14.
    Hooking Up thePi (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 keyboard 6. 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
  • 15.
    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
  • 16.
    Logging In Atthe login prompt type your username: > pi And enter the password: > raspberry
  • 17.
    Running the JavaFXSample Application Change directory to the project folder > cd MaryHadALittleLambda Run the build script > ant
  • 18.
  • 19.
    Hacking the Code Run the nano text editor: > nano src/sample/MapObject.java Save your changes: > Control-O Enter Exit Nano: > Control-X Compile/Run: > ant
  • 20.
    Mary Had aLittle Lambda Project > Open-source project to demonstrate lambda features > Visual representation of streams, filters, and maps 20 https://github.com/steveonjava/MaryHadALittleLambda
  • 21.
    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
  • 22.
  • 23.
    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 To GPIO To Ground 23
  • 24.
    Using a Breadboard > Pins are connected horizontally in the center > The edges are connect vertically > No current passes the center line 24
  • 25.
    Pi Cobbler >Connects your Pi to the Breadboard > The white line is Pin 1 > Connect it in the center top of your Breadboard 25
  • 26.
    Pi4J > Thesamples 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
  • 27.
    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
  • 28.
    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
  • 29.
    ListenGpioExample 29 >Demonstrates Listening to a pin:  addListener(pinListener) > Change the message/action when a button is pressed! sudo java -classpath .:classes:/opt/pi4j/lib/'*' ListenGpioExample
  • 30.
    BlinkGpioExample 30 >Use LEDs and Buttons together! sudo java -classpath .:classes:/opt/pi4j/lib/'*' BlinkGpioExample
  • 31.
    LeJOS How itworks on the EV3
  • 32.
    The Heart ofthe EV3 > TI Sitara AM1808  ARM9, 300Mhz > 64MB RAM / 16MB Flash > Analog to Digital Converter > 4 Motor Ports > 4 Sensor Ports > Bluetooth / USB > MicroSD
  • 33.
  • 34.
  • 35.
  • 36.
    High frequency soundwaves Ultrasonic Sensor Measuring mode Vs Presence Mode
  • 37.
  • 38.
  • 39.
    Getting Started withLeJOS Creating Your SD Card > Micro SD Card (> 2GB) > Compatible WIFI adapter  NetGear WNA1100  EDIMAX EW-7811Un > Linux (or a Linux VM) > Details here: http://sourceforge.net/p/lejos/wiki/Home/
  • 40.
    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"
  • 41.
    Eclipse Setup >Open Eclipse > Go to "Preferences" > Click on leJOS EV3 > Change the brick name to "10.0.1.1" 41
  • 42.
    Creating a NewLeJOS Project > Go to "File" > "New" > "Project…" > Choose a LeJOS EV3 Project 42
  • 43.
    Create a ClassFile > Create a new class ("File" > "New" > "Class") > Give it a package (e.g. sample) > Give it a name (e.g. LCDTest) 43
  • 44.
    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(); } }
  • 45.
    Assemble Brace Partsyou will need Step 1
  • 46.
    Assemble Brace Step2 Completed Brace
  • 47.
    Build Base Partsyou will need Step 1
  • 48.
    Build Base Step2 Completed Base
  • 49.
    Assemble Motor Motorparts Snap them on partially
  • 50.
    Assemble Motor Takemotor and base And connect them like this
  • 51.
    Add a Foot Foot parts Step 1
  • 52.
    Add a Foot Step 2 Add the Foot to the Base
  • 53.
    Add a Foot Assembled Foot and Base
  • 54.
    Add a Lock Lock parts Partially insert the red attachers
  • 55.
    Add a Lock Attach the lock Push down the red attachers to secure
  • 56.
    Construct the Tower Tower parts Step 1 – push the rod all the way through
  • 57.
    Construct the Tower Step 2 Attach the Tower to the Base
  • 58.
    Construct the Tower Completed Tower
  • 59.
    Build the FanMotor Fan Motor parts Step 1
  • 60.
    Build the FanMotor Completed Fan Motor
  • 61.
    Construct the LightSensor Light Sensor parts Step 1
  • 62.
    Construct the LightSensor Completed Light Sensor
  • 63.
    Assemble the FanBlades Fan Blade parts Step 1
  • 64.
    Assemble the Fan Fan Blade, Light Sensor, and Fan Motor Completed Fan
  • 65.
  • 66.
    Wind Turbine Wiring > Port A – Medium Moto  Power Fan > Port B – Large Motor  Rotate Wind Turbine > Port 1 – Light Sensor  Track Ambient Light 66
  • 67.
    EC: Gear BoxConstruction Gear Box parts Step 1
  • 68.
    EC: Gear BoxConstruction Completed Fan with Gear Box
  • 69.
    Making the Windturbine 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); } }
  • 70.
    Making the Towerspin public class WindTurbine { public static void main(String[] args) { EV3LargeRegulatedMotor base = new EV3LargeRegulatedMotor(MotorPort.B); base.setSpeed(80); base.rotateTo(-90); base.rotateTo(90); } }
  • 71.
    Checking the AmbientLight 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); } }
  • 72.
    Putting it alltogether… > Can you write a program that will: 1. Rotate the fan in a circle 2. Check the ambient light while rotating 3. Move back to the brightest angle 4. Spin the fan http://commons.wikimedia.org/wiki/Wind_generator#mediaviewer/File:Eolienne_et_centrale_thermique_Nuon_Sloterdijk.jpg
  • 73.
    Stephen Chin tweet:@steveonjava blog: http://steveonjava.com NightHacking Tour Real Geeks Live Hacking nighthacking.com
  • 74.
    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.