JNI en raspberry Pi

En este pequeño tutorial veremos como implementar JNI con C en raspberry pi.

Primero que nada empezaremos explicando un poco de que es JNI, después veremos los comandos para instalar java y WiringPi, por ultimo se explicara un código ejemplo básico para iniciar.

Instalación

Para trabajar sobre raspberry pi es necesario tener previamente montando una imagen de sistema en la raspberry, haber instalado una versión de java.

sudo apt-get update && sudo apt-get install oracle-java7-jdk

WiringPi es una biblioteca de acceso a los pines GPIO escrito en C, esta nos servirá para poder trabajar sobre lectura y escritura en los pines. Para su instalación les dejare esta guía y este vídeo de apoyo.

Ahora si estamos listos para comenzar.

¿Qué vamos a hacer?

En este ejemplo prenderemos uno de los dos leds seleccionado que tenemos. Para ello crearemos una interfaz de menú en java muy simple implementando buffereader para detecte la entrada del teclado que indicara cual led se prenderá, utilizaremos la tecla 1 y 2 para ello.

La parte de código nativo lo trabajaremos con C, en este proyecto generaremos una clase que se encargara del manejo de las instrucciones en este caso valorara el led que se selecciono para encenderse y ejecutara la instrucción de encendido.

 Para este ejemplo cree una carpeta de trabajo llamada ejemplo

 mkdir ejemplo

Dentro de ella cree mi proyecto, mi clase en java se llamara PrendeLed.java y en c se llamara Estado.c.

sudo nano PrendeLed.java

Nota: Es importante quitar los comentarios del código si no les marcara errores al compilarlo.

Código PrendeLed.java:

import java.io.*;  // importar
  public class PrendeLed{ // clase
   static int led; // variable led
public static native void  Estado(int led);
public static void main(String[] args){
PrendeLed prendeled= new PrendeLed();

BufferedReader entrada= new BufferedReader(new InputStreamReader(System.in)); // lectura

try{
System.out.println ("MENU: Elige Opcion"); // Menú 
System.out.println ("1) Prender Led Uno");
System.out.println ("2) Prender Led Dos"):

led=Integer.parseInt(entrada.readLine()); // leer entrada
 }catch(IOException e){}
 prendeled.Estado(led);
System.out.println ("Encendiste el led" + led);             
}
static{
 System.loadLibrary("PrendeLed");
  }
}

Código: Estado.c

#include <jni.h>
#include <stdio.h>
#include <wiringPi.h>
#include "PrendeLed.h"
JNIEXPORT void JNICALL
Java_PrendeLed_Estado(JNIEnv *env, jobject obj, jint led) {
wiringPiSetup ();
pinMode (0,OUTPUT); // GPIO17 , PIN 11 corresponde al pin 0 ver imagen 1.0 declaramos como pin salida
pinMode (2,OUTPUT); // GPIO27 , PIN 13 corresponde al pin 2 ver imagen 1.0 declaramos como pin salida
 if (led == 1) {
 digitalwrite(0,HIGH);
 digitalwrite(2,LOW);
 delay(4000);
 digitalwrite(0,LOW);
 }
 else if (led== 2) {
 digitalwrite(0,LOW);
 digitalwrite(2,HIGH);
 delay(4000);
 digitalwrite(2,LOW);
 }
 else {
 printf("Leds Apagados:");
}
 return;
}

Comandos para compilar y ejecutar:

javac PrendeLed.java // javac     NombreDelPrograma.java
javah -jni PrendeLed // genera el h java
cc -shared -I/usr/lib/jvm/jdk-7-oracle-armhf/include -I/usr/lib/jvm/jdk-7-oracle-armhf/include/linux -o libPrendeLed.so  Estado.c -lwiringPi

// Este codigo puede darles conflictos debido a que tienen que verificar la versión de instalación de su código java en este caso es open java 7. jdk -7-oracle-armhf // tu ruta de java

export LD_LIBRARY_PATH=.  // Pexara que agarre las librerias
java PrendeLed  //nombre de tu java para ejecutar si todo está bien

 

cod

Para la conexión:

Solo ocuparemos 2 leds, 2 resistencias de 220 o similares y cables.

cir

 

Agradecimientos especiales:

Diego Motafuka colaborador.

Como conectar bluetooth HC-05, Arduino y diadema MindWave NeuroSky

Primera parte “Conexión para configurar modulo HC-05”

En este primer post, como indica el titulo, vamos a aprender a configurar nuestro modulo HC-05 mediante la placa Arduino y más adelante conectarlo a la diadema  MindWave Móvil de NeuroSky.

Para comenzar con la configuración del modulo mediante el Arduino, (en este ejemplo utilizaremos la placa Arduino UNO),  es necesario conectar previamente el circuito mostrado a continuación:

Conexion HC-05 a Arduino*El modulo de bluetooth HC-05 soporta los voltajes de entrada de 3.3 y 5V.

Una vez armado el circuito hay que cargar el “Sketch” que nos permitirá entrar al modo de configuración del HC-05, conocido como modo AT, mediante el IDE de Arduino. El Sketch se  puedes descargar de Dropbox

Cuando se tenga cargado con éxito el Sketch y el circuito armado procedemos a meter el HC-05 en modo AT (sin apagar o desconectar el Arduino de la Pc-Usb), para esto solo es necesario desconectar  el cable de voltaje (VCC) de la placa Arduino un momento y volverlo a conectar, notaremos además que el led del bluetooth prenderá  y se apagara cada dos segundos aproximadamente. Si todo sale bien abriremos en el IDE de Arduino /herramientas/monitor serial, modificamos los valores de velocidad a “9600 baud” y a “Ambos Nl y CR”, en este momento observaremos en la pantalla que dice: “Enter AT commands:” , si nosotros mandamos el comando AT, nos debe responder OK. AT Segunda parte “Configuración del modulo HC-05”

Ahora si podemos comenzar con la configuración del dispositivo HC-05. Los siguientes son los comandos básicos que debemos saber para configurar nuestro dispositivo bluetooth:

Saber el nombre del modulo.                                                                                      AT+NAME?

Cambiar el nombre, en el ejemplo siguiente se cambia por “MINOMBRE”.          AT+NAME= MINOMBRE

Un dato muy importante el HC-05 funciona como esclavo y maestro.

  • Como esclavo: espera que desde otro dispositivo nos conectemos.
  • Como maestro: el HC-05 se conecta a otro dispositivo.

Saber cómo está configurado con el comando: AT+ROLE?

  • Si nos contesta “0” esta en modo esclavo.
  • Si nos contesta “1” esta en modo maestro.

Por defecto viene en modo esclavo.

  • Cambiarlo al modo esclavo: Comando:AT+ROLE=0
  • Cambiarlo al modo maestro: Comando:AT+ROLE=1

Saber la contraseña del HC-05 Comando: AT+PSWD?                                      Por defecto suele venir la “1234” o la “0000”.

Muestra la configuración con la placa Arduino, por defecto viene configurado a una velocidad de 9600. Comando: AT+UART?

Tercera parte “Configuración del modulo HC-05 para la conexión a la diadema MindWave”

Para conectar el modulo bluetooth a la diadema MindWave de Neurosky es necesario saber la dirección mac de nuestra diadema MindWave NeuroSky, por lo cual debemos conectarla a algún dispositivo el cual puede ser una computadora  o un celular.

Para revisar la dirección en windows 7 podemos irnos a inicio/dispositivos e impresoras, nos debe aparecer el dispositivo, este debió haber sido agregado anteriormente, en caso contrario es necesario irse a inicio/agregar dispositivo bluetooth y seleccionar la diadema. MAC MindWave Para la versión mindwave movile la dirección aparece en hexadecimal. En este ejemplo aparece como 20:68:9d:c2:24:46 la cual depurándola queda como “20689DC22446”. MAC MindWave1En este momento retomaremos comandos vistos en la segunda parte de este tutorial.  Lo primero es proceder a configurar el modulo Bluetooth como modo maestro, ya que en esta ocasión ocupamos que el HC-05 se conecta a otro dispositivo (en este caso ocupamos que se conecte a la diadema), entramos al IDE de Arduino con el Sketch, (proporcionado en la segunda parte de este documento), previamente cargado y a continuación introduciremos los siguientes comandos:

Comando: AT+UART=57600,0,0 // Cambiamos la velocidad a la que opera el modulo, originalmente lo teníamos a 9600 y lo cambiamos a 57600.

Para la conexión de nuestra diadema al HC-05, prestar atención a los siguientes pasos: Configuramos el modulo HC-05 como modo maestro Comando: AT+ROLE=1

Cambiamos la contraseña para que se puedan conectar, para este caso de la diadema Mindwave es necesario que la contraseña sea (0000). AT+PSWD=0000

Preparamos el modulo para que se conecte a una dirección especifica,

  • //0 = Dirección especifica de dispositivo.
  • //1 = A cualquier dispositivo que se encuentre dispobible.

Para este caso será a una dirección específica. Comando: AT+CMODE=0 Se conecta el bluetooth a la dirección Mac del esclavo, los ceros a la izquierda se omiten. La dirección MAC, como se menciono anteriormente, viene en un valor hexadecimal el cual se depuro quedando en este ejemplo como “20689DC22446” y se debe introducir en el formato ####,##,!!!!!!.Para este ejemplo queda de la siguiente manera: Comando: AT+BIND=2068,9D,C22446.

Ahora viene una parte en la que debemos prestar mucha atención vamos a ejecutar los siguientes comandos en el siguiente orden :

  • Comando: AT+INIT\R\N Initialize SPP(Can’t repeatedly initialize)
  • Comando: AT+IAC=9E8B33\R\N INQUIERE GENERAL INQUIERE ACCESS CODE
  • Comando: AT+CLASS=0\R\N INQUIERE ALL DEVICES TYPES
  • Comando: AT+INQM=1,9,48\R\N INQUIRE MODE: RSSI , MAX NUMBER 9, TIMEOUT 48
  • Comando:AT+INQ\R\N INQUIERE Todo debe marcarnos OK.
  • Después de esto podremos emparentar nuestros  dispositivos mediante el siguiente comando: AT+PAIR= 2068,9D,C22446
  • Por último introducimos el siguiente comando para terminar de conectar los dispositivos. Comando: AT+LINK=2068,9D,C22446

Si les marca algún error en estos comandos pueden consultar el siguiente manual en linea, (comandos pagina 25).

OK Ahora desconectamos el cable de key y reiniciamos el modulo.

Cuarta parte “Conexión HC-05 mediante a Arduino a diadema MindWave NeuroSky”

Una vez configurado el modulo de bluetooth hay que realizar la siguiente conexión. diagrama_bbPara este ejemplo es necesario cargar el Sketch proporcionado por la compañía de NeuroSky para este ejemplo disponible en la pagina oficial de NeuroSky o disponible en Dropbox.

Una vez conectado y cargado el Sketch solo queda prender la diadema MindWave y a probarla, el bluetooth se conectara automáticamente a la diadema, en caso contrario dejamos presionado hacia arriba por tres segundos.

Aquí les dejo el vídeo de la diadema funcionando.

Agradecimientos: Información base: BotScience

Código y conexión: Hazim Bitar (techbitar)

Comunicación: Jose Antonio Luceño Castilla

Material del apoyo: Data Sheet HC-05

Andrés Sabas por apoyo en conexiones y código. @Sabasacustico