Autore Topic: Come partire?  (Letto 497 volte)

Offline ste.cape

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy SIII
  • Sistema operativo:
    Windows 8
Come partire?
« il: 22 Settembre 2013, 10:42:29 CEST »
0
Salve a tutti! Sono Stefano. In questo momento ho un Arduino con una Ethernet Shield montata su, al quale invio i comandi da browser, puntando in ordine:

  • Il mio PI Pubblico
  • Una porta interna che viene inoltrata al mio Arduino dal mio router
  • E a seguire una stringa di comando formattata, che intercetto con una richiesta HTML.

Chiaramente da Web Browser la cosa risulta molto semplice, basta far aprire un link simile a quello qui sotto alla pressione di un pulsante puntando un iframe nascosto all'interno della pagina:

http://123.45.6.78:1234/QWERTY1234

Vorrei mandare lo stesso comando HTML con una applicazione android, senza pero' passare attraverso il browser ma rimanendo all'interno della mia applicazione.

Non saprei proprio da dove cominciare, non so cosa cercare. Potreste darmi una mano, indicandomi una direzione dalla quale partire?
Grazie a tutti!

Offline gabric

  • Utente senior
  • ****
  • Post: 613
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Come partire?
« Risposta #1 il: 22 Settembre 2013, 11:20:29 CEST »
0
uh parlo per ignoranza, ma se l'ip è pubblico, non basta effettuare una chiamata http?
codice adattato da un json reader
(devi necessariamente chiamarlo dentro un task asinrono


Codice (Java): [Seleziona]
 public class CallArduino extends AsyncTask<Integer, Void, Long>{
               
         
                    @Override  
                         protected Long doInBackground(Integer... indici)
                                {
                       
                         String stato = readStato();
                                //qui hai la risposta, puoi farci quel che vuoi
                                                return null;
                                               
                                }
               
                   
                    @Override
                        protected void onPostExecute(Long bb) {
                // Se devi aggiornare la grafica, devi farlo in questo step, altrimenti hai un errore, tecnicamente sei fuori dal metodo asincrono
                     }
                       
                 
                    }
                   
                 
                    public String readStato() {
                       
                        StringBuilder builder = new StringBuilder();
                        HttpClient client = new DefaultHttpClient();
                   
                        HttpGet httpGet = new HttpGet("http://123.45.6.78:1234/QWERTY1234");  //Naturalmente funziona anche con un indirizzo da dns, tipo [url=http://www.google.com]Google[/url]
                        try {
                          HttpResponse response = client.execute(httpGet);
                          StatusLine statusLine = response.getStatusLine();
                          int statusCode = statusLine.getStatusCode();
                         
                          if (statusCode == 200) { //Se tutto è andato a buon fine
                            HttpEntity entity = response.getEntity();
                            InputStream content = entity.getContent();
                            BufferedReader reader = new BufferedReader(new InputStreamReader(content));
                            String line;
                            while ((line = reader.readLine()) != null) {
                              builder.append(line);
                            }
                          } else {
                            Log.e("Error", "Failed to comunicate with arduino");
                           }
                        } catch (ClientProtocolException e) {
                          e.printStackTrace();
                        } catch (IOException e) {
                          e.printStackTrace();
                        }
                       //Qui ci sarà il codice html che ti restituisce arduino, naturalmente poi devi formattarlo tu
                     System.out.println(builder.toString());
                        return builder.toString();
                      }


Spero non ci siano errori nel codice


Ah, dall'actvity principale, per richiamalo scrivi
Codice (Java): [Seleziona]
new CallArduino().execute();

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Come partire?
« Risposta #2 il: 22 Settembre 2013, 11:23:31 CEST »
0
in aggiunta al post di gabric, se non ti pesa usare una libreria esterna per la chiamata asincrona:
[facile] utilizzo della libreria android-async-http - Android Developers Italia
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline ste.cape

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy SIII
  • Sistema operativo:
    Windows 8
Re:Come partire?
« Risposta #3 il: 23 Settembre 2013, 11:02:50 CEST »
0
E' esattamente il tipo di consiglio di cui avevo bisogno. Vi ringrazio, appena concludo qualcosa vi do notizie!