Wednesday Nov 27, 2013

Internet of Things (IoT) Thanksgiving Special: Turkey Tweeter (Part 3)

In the spirit of Thanksgiving this week being celebrated on Thursday in the USA

This post is shared from our Oracle Java Community. 
Hinkmond Wong's Weblog

By hinkmond on Nov 21, 2013

OK, sports fans. You've got your Vernier Go!Temp USB probe connected. It looks good with lsusb and you can see the /dev/ldusb0 device in your Raspberry Pi Linux shell.

So, how do you write a Java SE Embedded app to read in the turkey temp values. Well, as with most things, you search the Web and you can find how it was done previously in other non-Java inferior programming languages. <img src=" title=";-)" style="border: none;" /> Here's a great example in Python on the finninday.net site.

See: finniday.net Go!Teamp example in Python

It shows the reverse engineered byte format of the data coming over USB from the Vernier Go!Temp probe. Booyah! That's what we need to write a Java SE Embedded app. And, here it is...

/**
 *
 * @author hinkmond
 * Copyright © 2013 Oracle and/or its affiliates. All rights reserved.
 */
public class TurkeyTweeter {

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        Date date;
        FileInputStream fis = null;
        DataInputStream dis = null;
        byte   b[];
        
        double tempavg, c, f;
        int    samplecount=0, sequence=0, temp1=0, temp2=0, temp3=0;
        
        final double VERNIER_SCALING_FACTOR=126.74;
        final double VERNIER_CALIBRATION_OFFSET=5.4;

        b = new byte[8];

        // Loop to keep reading temperature
        while (true) {
            int available;

            try {
                fis = new FileInputStream("/dev/ldusb0");
                dis = new DataInputStream(fis);
            } catch (FileNotFoundException fnfe) {
                System.out.println("Cannot find temp sensor");
                fnfe.printStackTrace();
                System.exit(-1);
            }

            // Read 8 bytes from Vernier Go!Temp USB probe
            //   Format:
            //     Byte 0:   Sample Count
            //     Byte 1:   Sequence Index
            //     Byte 2-3: First temp sample
            //     Byte 4-5: Second temp sample
            //     Byte 6-7: Third temp sample
            try {
                if (dis != null) {
                    available = dis.read(b, 0, 8);
                    samplecount = b[0];
                    sequence = b[1];
                    temp1 = b[2] + b[3] * 256;
                    temp2 = b[4] + b[5] * 256;
                    temp3 = b[6] + b[7] * 256;
                }
            } catch (IOException ioe1) {
                System.out.println("Unable to get data from temp sensor");
                ioe1.printStackTrace();
            }
            
            tempavg = (temp1 + temp2 + temp3) / 3.0;
            c = tempavg / VERNIER_SCALING_FACTOR - VERNIER_CALIBRATION_OFFSET;
            
            // Convert from Fahrenheit to Celcius
            f = ((9.0/5.0) * c) + 32.0;
            
            double temperature = roundDouble(f);
            
            date = Calendar.getInstance().getTime();

            Format formatter = new SimpleDateFormat("E MMM d kk:mm:ss");
            String timedateString = formatter.format(date);

            System.out.println(timedateString+"  "+temperature);

            try {
                if (dis != null)
                    dis.close();
                if (fis != null)
                    fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ie) {
                ie.printStackTrace();
            }
        }
    }

   public static double roundDouble(double value) {
        double result = value * 100;
        result = Math.round(result);
        result = result / 100;
        return(result);
   }
}

Compile using javac, lather, rinse, repeat. And, here's the output running on the RPi (NOTE: Remember, you must run as root to access the /dev/ldusb0 device):

pi@raspberrypi ~ $ sudo java -jar TurkeyTweeter.jar
Thu Nov 21 16:42:59  71.59
Thu Nov 21 16:43:00  72.39
Thu Nov 21 16:43:01  72.39
Thu Nov 21 16:43:02  72.39
Thu Nov 21 16:43:03  72.39
Thu Nov 21 16:43:04  72.39
Thu Nov 21 16:43:05  72.39
Thu Nov 21 16:43:06  72.39
Thu Nov 21 16:43:07  72.39
Thu Nov 21 16:43:08  72.39
Thu Nov 21 16:43:09  72.39
...
As you can see, it's 72 degrees Fahrenheit in my office. The turkey won't be that temperature roasting in the oven on Thanksgiving, but we have now confirmed this part of the Turkey Tweeter works. Exciting, isn't it? <img src=" title=":-)" style="border: none;" /> Next up, we will write the Java code to tweet out the values of our poor turkey as it cooks... (Yeah, poor turkey until it's inside my tummy. Then, it's yummy turkey!)

See the full series on the steps to this cool demo:
Internet of Things (IoT) Thanksgiving Special: Turkey Tweeter (Part 1)
Internet of Things (IoT) Thanksgiving Special: Turkey Tweeter (Part 2)

Tuesday Nov 26, 2013

Internet of Things (IoT) Thanksgiving Special: Turkey Tweeter (Part 2)

In the spirit of Thanksgiving this week being celebrated on Thursday in the USA

This post is shared from our Oracle Java Community. 
Hinkmond Wong's Weblog

By now you should have received your Vernier Go!Temp USB Temperature Probe and it is getting really close now to Turkey Day, so you want kick your Internet of Things (IoT) Turkey Tweeter project into high gear now.

First, we need to test the temperature probe before sticking it into unknown places, namely our delicious IoT bird on Thanksgiving. So, take your Go!Temp USB temperature probe and plug it into your Raspberry Pi device, just like in this photo.

See:

Connect Go!Temp Probe

If all went well on your Raspberry Pi, you should be able to bring up a terminal shell connected to your RPi and type "lsusb" to verify that the Go!Temp probe is now connected.

pi@raspberrypi ~ $ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 005: ID 08f7:0002 Vernier EasyTemp/Go!Temp

If your output looks like above, especially the last line where it says the Vernier Go!Temp was recognized and is connected as Device 005, you are golden.

One last check before we start to program using a Java SE Embedded app to grab the temperature readings is to make sure the /dev/ldusb0 device is present. So, type this command and make sure your output matches:

pi@raspberrypi ~ $ ls -l /dev/ldusb0
crw------T 1 root root 180, 176 Nov 18 17:25 /dev/ldusb0

If all that looks good, you're ready for the next step which is to write a Java SE Embedded app to read the temperature values, and eventually write code with IoT intelligence to tweet out the status of your turkey while it's cooking so that it becomes an Internet of Things connected bird on Twitter. Look for that in the next part of this series... Mmmmm... I can almost smell that turkey roasting... <img src=" title=":-)" style="border: none;" />

See the full series on the steps to this cool demo:
Internet of Things (IoT) Thanksgiving Special: Turkey Tweeter (Part 1)


Monday Nov 25, 2013

Internet of Things (IoT) Thanksgiving Special: Turkey Tweeter (Part 1)

In the spirit of Thanksgiving this week being celebrated on Thursday in the USA

This post is shared from our Oracle Java Community. 
Hinkmond Wong's Weblog

By hinkmond on Nov 06, 2013

It's time for the Internet of Things (ioT) Thanksgiving Special. This time we are going to work on a special Do-It-Yourself project to create an Internet of Things temperature probe to connect your Turkey Day turkey to the Internet by writing a Thanksgiving Day Java Embedded app for your Raspberry Pi which will send out tweets as it cooks in your oven.

If you're vegetarian, don't worry, you can follow along and just run the simulation of the Turkey Tweeter, or better yet, try a tofu version of the Turkey Tweeter.

Here is the parts list:

 1 Vernier Go!Temp USB Temperature Probe
 1 Uncooked Turkey
 1 Raspberry Pi (not Pumpkin Pie)
 1 Roll thermal reflective tape
You can buy the Vernier Go!Temp USB Temperature Probe for $39 from here:http://www.vernier.com/products/sensors/temperature-sensors/go-temp/. And, you can get the thermal reflective tape from any auto parts store. (Don't tell them what you need it for. Say it's for rebuilding your V-8 engine in your Dodge Hemi. Avoids the need for a long explanation and sounds cooler...) <img src=" title=";-)" style="border: none;" />

The uncooked turkey can be found in your neighborhood grocery store. But, if you're making a vegetarian Tofurkey, you're on your own... The Java Embedded app will be the same, though (Java is vegan). <img src=" title=":-)" style="border: none;" />

So, grab all your parts and come back here for the next part of this project...


About

Oracle WebCenter is the center of engagement for business—powering exceptional experiences for customers, partners, and employees. It connects people, process, and information with the most complete portfolio of portal, Web experience management, content, imaging and collaboration technologies.

Search

Archives
« April 2014
SunMonTueWedThuFriSat
  
2
4
5
6
7
10
11
12
13
14
17
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today