Friday Oct 25, 2013

Halloween: Season for Java Embedded Internet of Spooky Things (IoST) (Part 4)

And now here's the Java code that you'll need to read your ghost sensor on your Raspberry Pi

The general idea is that you are using Java code to access the GPIO pin on your Raspberry Pi where the ghost sensor (JFET trasistor) detects minute changes in the electromagnetic field near the Raspberry Pi and will change the GPIO pin to high (+3 volts) when something is detected, otherwise there is no value (ground).

Here's that Java code:

try {
            
    /*** Init GPIO port(s) for input ***/
    
    // Open file handles to GPIO port unexport and export controls
    FileWriter unexportFile = 
            new FileWriter("/sys/class/gpio/unexport");
    FileWriter exportFile = 
            new FileWriter("/sys/class/gpio/export");
    for (String gpioChannel : GpioChannels) {
        System.out.println(gpioChannel);
             // Reset the port
        File exportFileCheck = new 
	    File("/sys/class/gpio/gpio"+gpioChannel);
        if (exportFileCheck.exists()) {
            unexportFile.write(gpioChannel);
            unexportFile.flush();
        }
    
        // Set the port for use
        exportFile.write(gpioChannel);   
        exportFile.flush();
         // Open file handle to input/output direction control of port
        FileWriter directionFile =
            new FileWriter("/sys/class/gpio/gpio" + gpioChannel + 
                "/direction");
    
        // Set port for input
        directionFile.write(GPIO_IN);
    }
    
    /*** Read data from each GPIO port ***/
    RandomAccessFile[] raf = new RandomAccessFile[GpioChannels.length];
    
    int sleepPeriod = 10;
    final int MAXBUF = 256;
    
    byte[] inBytes = new byte[MAXBUF]; 
    String inLine;
    
    int zeroCounter = 0;
    
    // Get current timestamp with Calendar()
    Calendar cal;
    DateFormat dateFormat = 
            new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
    String dateStr;
    
    // Open RandomAccessFile handle to each GPIO port
    for (int channum=0; channum < raf.length; channum++) {
        raf[channum] = new RandomAccessFile("/sys/class/gpio/gpio"
                + GpioChannels[channum] + "/value", "r");
    }
    
    // Loop forever
    while (true) {
        
        // Get current timestamp for latest event
        cal = Calendar.getInstance();
        dateStr = dateFormat.format(cal.getTime());

        // Use RandomAccessFile handle to read in GPIO port value
        for (int channum=0; channum < raf.length; channum++) {
            
            // Reset file seek pointer to read latest value of GPIO port
            raf[channum].seek(0);
            raf[channum].read(inBytes);
            inLine = new String(inBytes);
            
            // Check if any value was read
            if (inLine != null) {
                
                // Compress 0 values so we don't see too many 
                //   unimportant lines
                if (inLine.startsWith("0")) {
                    if (zeroCounter < 1000) {
                        zeroCounter++;
                    } else {
                        System.out.print(dateStr + ": " + inLine);
                        zeroCounter = 0;
                    }
                } else {
                    // Else, specially mark value non-zero value
                    System.out.print("***" + dateStr + ": " + inLine);
                    zeroCounter = 0;
                }
            }
             // Wait for a while
            java.lang.Thread.sleep(sleepPeriod);

        }
    }
} catch (Exception exception) {
   exception.printStackTrace();
}


And, then we just load up our Java SE Embedded app, place each Raspberry Pi with a ghost sensor attached in strategic locations around our Santa Clara office (which apparently is very haunted by ghosts from the Agnews Insane Asylum 1906 earthquake), and watch our analytics for any ghosts.

Easy peazy.

See the posts for the full series on the steps to this cool demo:
Halloween: Season for Java Embedded Internet of Spooky Things (IoST) (Part 1)
Halloween: Season for Java Embedded Internet of Spooky Things (IoST) (Part 2)
Halloween: Season for Java Embedded Internet of Spooky Things (IoST) (Part 3)
Halloween: Season for Java Embedded Internet of Spooky Things (IoST) (Part 4)
Halloween: Season for Java Embedded Internet of Spooky Things (IoST) (Part 5)

About

Hinkmond Wong's blog on making Machine to Machine (M2M) and the Incredible Internet of Things (IoT) smarter with Java Embedded Technologies

Search

Archives
« October 2013 »
SunMonTueWedThuFriSat
  
2
3
4
6
7
8
9
10
12
13
14
15
17
18
19
20
23
24
26
27
29
31
  
       
Today