Avalados por :
Ahora vamos a realizar:
Esta parte es la más desafiante para alguien nuevo en Raspberry Pi, así que hemos decidido crear toda la configuración de la manera más simple en 5 subpasos:
Paso 1: Instalar Java en Raspberry Pi.
Por lo general, Raspbian viene con Java instalado, pero aún puedes verificarlo con el siguiente comando:
java -version
Cuando actualices tu Raspbian, también se actualizará la biblioteca de Java, si es necesario.
sudo apt-get update
Paso 2: La comunicación es en modo serie, entre Arduino y Raspberry Pi, por lo que necesitamos una forma de hacer que nuestro programa Java lo entienda. Así que descarga los siguientes archivos:
y ve a la carpeta de descarga de los archivos y escribe los siguientes comandos:
sudo cp libjawt.so /usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt/lib/arm
sudo cp RXTXcomm.jar /usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt/jre/lib
sudo cp librxtxSerial.so /usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt/lib/arm
sudo cp librxtxSerial.so /usr/lib/jni/
Ahora, asumimos que tiene su jdk-8-oracle-arm-vfp-hflt dentro de su /usr/lib/jvm. Si no lo hace, entonces su Java no se actualizará a jdk-8 y tendrá que actualizar JDK y JRE .sudo apt-get install oracle-java8-installerPaso 3: ahora puede copiar el siguiente código Java.
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; import gnu.io.SerialPortEventListener; import java.util.Enumeration; import java.net.HttpURLConnection; import java.net.URL; public class SerialTestGET implements SerialPortEventListener { SerialPort serialPort; static int sensorValue = 0; /** The port we're normally going to use. */ private static final String PORT_NAMES[] = { "/dev/tty.usbserial-A9007UX1", // Mac OS X "/dev/ttyACM0", // Raspberry Pi "/dev/ttyUSB0", // Linux "COM3", // Windows }; /** * A BufferedReader which will be fed by a InputStreamReader * converting the bytes into characters * making the displayed results codepage independent */ private BufferedReader input; /** The output stream to the port */ private OutputStream output; /** Milliseconds to block while waiting for port open */ private static final int TIME_OUT = 2000; /** Default bits per second for COM port. */ private static final int DATA_RATE = 9600; public void initialize() { // the next line is for Raspberry Pi and // gets us into the while loop and was suggested here was suggested http://www.raspberrypi.org/phpBB3/viewtopic.php?f=81&t=32186 System.setProperty("gnu.io.rxtx.SerialPorts", "/dev/ttyACM0"); CommPortIdentifier portId = null; Enumeration portEnum = CommPortIdentifier.getPortIdentifiers(); //First, Find an instance of serial port as set in PORT_NAMES. while (portEnum.hasMoreElements()) { CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement(); for (String portName : PORT_NAMES) { if (currPortId.getName().equals(portName)) { portId = currPortId; break; } } } if (portId == null) { System.out.println("Could not find COM port."); return; } try { // open serial port, and use class name for the appName. serialPort = (SerialPort) portId.open(this.getClass().getName(), TIME_OUT); // set port parameters serialPort.setSerialPortParams(DATA_RATE, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); // open the streams input = new BufferedReader(new InputStreamReader(serialPort.getInputStream())); output = serialPort.getOutputStream(); // add event listeners serialPort.addEventListener(this); serialPort.notifyOnDataAvailable(true); } catch (Exception e) { System.err.println(e.toString()); } } /** * This should be called when you stop using the port. * This will prevent port locking on platforms like Linux. */ public synchronized void close() { if (serialPort != null) { serialPort.removeEventListener(); serialPort.close(); } } /** * Handle an event on the serial port. Read the data and print it. */ public synchronized void serialEvent(SerialPortEvent oEvent) { if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) { try { String inputLine=input.readLine(); //System.out.println(inputLine); sendGet(inputLine); } catch (Exception e) { System.err.println(e.toString()); serialPort.removeEventListener(); serialPort.close(); } } // Ignore all the other eventTypes, but you should consider the other ones. } // HTTP GET request public void sendGet(String inputLine) throws Exception { try{ //if difference is more than 3 then send data to SAP HANA if(inputLine != null && inputLine .length() > 0 && Math.abs(sensorValue - Integer.parseInt(inputLine)) > 3 ){ sensorValue = Integer.parseInt(inputLine); //Considering that A001 sensor is connection with this raspberry pie for now //we can even pass this with command line but for simplicityhardcoding it //Replace with your HANA server URL and port number String url = "http:///demoApp/demo01/app01/services/putSensorReading.xsjs?id=A001&value="; url = url + inputLine; URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); // optional default is GET con.setRequestMethod("GET"); //add request header //con.setRequestProperty("User-Agent", USER_AGENT); int responseCode = con.getResponseCode(); if(responseCode == 200){ System.out.println("OK value:"+inputLine); }else{ System.out.println("Error: Response code "+responseCode); } } System.out.println("OK value: Less than 3"); }catch (Exception e) { System.err.println(e.toString()); serialPort.removeEventListener(); serialPort.close(); } } public static void main(String[] args) throws Exception { SerialTestGET main = new SerialTestGET(); main.initialize(); Thread t=new Thread() { public void run() { //the following line will keep this app alive for 1000 seconds, //waiting for events to occur and responding to them (printing incoming messages to console). try {Thread.sleep(1000000);} catch (InterruptedException ie) {} } }; t.start(); System.out.println("Started"); } }
Paso 4: compílelo usando el siguiente comando:
javac -source 1.6 -target 1.6 -cp /usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt/jre/lib/RXTXcomm.jar SerialTestGET.java
Paso 5: Si no hay ningún error (pueden aparecer advertencias), entonces su configuración es correcta y ahora puede leer los datos de Arduino en su puerto serie de Raspberry Pi, con el código compilado de Java del paso 4.
Puede cambiar el código Java del Paso 3 y recompilarlo para que también se ajuste a sus requisitos.
En la parte 5, veremos cómo configurar el sistema SAP HANA y la aplicación SAPUI5.
contacto@primeinstitute.com
(+51) 1641 9379
(+57) 1489 6964
© 2024 Copyright. Todos los derechos reservados.
Desarrollado por Prime Institute