Lo que pretendo es tener una aplicación que cada cierto tiempo (Pongamos cada 10 minutos) realice una medida de los sensores y envíe los resultados al servidor, y también pregunte al servidor qué estado quiere que tengan los actuadores para decírselo a Arduino.
Como aún no tengo el arduino voy a jugar con la cámara a intentar enviar una foto desde el móvil al servidor cada cierto tiempo y poder consultarla en el servidor. (Vamos , una especie de WebCam). Así prácticaré con temporizadores y con mantener el movil vivo, etc...
En Internet hay varios artículos interesantes sobre como hacer tareas periódicamente en el movil:
http://android.stackexchange.com/questions/79532/how-to-watch-a-periodically-shot-image-on-other-pc-smartphone-via-internet-no-l
http://stackoverflow.com/questions/2775628/android-how-to-periodically-send-location-to-a-server
Por otra parte, de paso ha aparecido una aplicación que hace de IP WebCam muy interesante: https://play.google.com/store/apps/details?id=com.pas.webcam&hl=es. Es un enfoque diferente ya que esta aplicación crea un servidor web en el movil que realiza la foto a petición de un cliente Web. Este enfoque estaría muy bien pero tiene dos pegas:
- No es fácil saber la IP del móvil ya que puede cambiar y tener cortafuegos que impidan alcanzarla. Quizás tendría que hacer otro servicio que periódicamente informe a un servidor de la URL.
- No me permite guardar estadísticas de los datos tomados de los sensores ya que solamente se tomaría bajo petición.
Este es el código fuente de la primera prueba, que se limita a sacar una foto periódicamente pero que aún no hace nada con ella.
public class Main extends Activity implements OnClickListener, SurfaceHolder.Callback {
Button sacarFoto;
Camera camara;
SurfaceHolder holder;
SurfaceView visor;
private Handler tomaFotoCallback = new Handler() {
public void handleMessage(android.os.Message msg) {
Main.this.doSacarFoto();
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sacarFoto=initButton(R.id.sacarFoto);
visor=(SurfaceView)findViewById(R.id.visor);
holder=visor.getHolder();
initCamera();
Thread thread=new Thread() {
public void run() {
for(;;) {
try { Thread.sleep(10 * 1000); } catch(InterruptedException e) {};
tomaFotoCallback.sendEmptyMessage(0);
}
}
};
thread.start();
}
@Override
public void onDestroy() {
stopCamera();
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
startCamera(holder, width, height);
}
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
camara = Camera.open();
try {
camara.setPreviewDisplay(holder);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
private void initCamera() {
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
private void startCamera(SurfaceHolder sh, int width, int height) {
// Camera.Parameters p = camara.getParameters();
// // Camera.Size s = p.getSupportedPreviewSizes().get(0);
// p.setPreviewSize(width, height);
//
// camara.setParameters(p);
try {
camara.setPreviewDisplay(sh);
} catch (Exception e) {
}
camara.startPreview();
}
private void stopCamera() {
holder.removeCallback(this);
camara.stopPreview();
camara.release();
}
public Button initButton(int id) {
Button boton=(Button)findViewById(id);
boton.setOnClickListener(this);
return boton;
}
@Override
public void onClick(View v) {
if(v==sacarFoto) {
doSacarFoto();
}
}
public void doSacarFoto() {
camara.takePicture(null, null, null, new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Toast.makeText(Main.this, "FOTO SACADA!!!", Toast.LENGTH_LONG).show();
}
});
}
}
Ahora vamos a crear una tabla en nuestro servidor php:
create table imagen ( id integer, imagen blob, hora timestamp);
Para enviar la imagen desde la parte Android voy a intentar seguir los consejos de esta página: http://stackoverflow.com/questions/2935946/sending-images-using-http-post.
No hay comentarios:
Publicar un comentario