Zugriff von Android/Java auf Arduino/EthernetShield

Moin.

Ich frage meinen Mega/EthernetShield mit einem ganz normalen Browser von Windows oder Android aus ab. Das klappt auch ganz gut. Jetzt möchte ich auf eine App für Android umsteigen, die ich selber schreiben möchte und bekomme hier lokal im Netz keinen Kontakt mit dem Arduino. Wie tot. Vom Browser klappt aber der Zugriff weiterhin gut. Was kann das sein? Von der App aus bekomme ich aber von Internetseiten, also ausserhalb von meinem LAN, Antwort.

#include <Ethernet.h>
byte mac[]   = ...
byte ip[]      = { 192, 168, 178, 123 };                  // IP-Adresse
byte gateway[] = { 192, 168, 178, 1 };                    // Gateway
byte subnet[]  = { 255, 255, 255, 0 };
EthernetClient client;
EthernetServer server(80);
...
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
...
client = server.available();         
  if (client) {

Hier geht die Android/Java nicht rüber, die Browser aber wohl.

Das Java Programm sieht so auf (nach einem Beispiel in Youtube)

        android:name="android.permission.INTERNET" />
...
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {

    private TextView mTextViewResult;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextViewResult = findViewById(R.id.text_view_result);
        OkHttpClient client = new OkHttpClient();
//        String url ="192.168.178.123";
        String url ="http://192.168.178.123";

        Request request = new Request.Builder()
                .url(url)
                .build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()) {
                    final String myResponse = response.body().string();
                    MainActivity.this.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            mTextViewResult.setText(myResponse);
                        }
                    });
                }
            }
        });
    }
}

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Das kannst Du auch noch nachträglich ändern.

Evtl. bist Du da in einem Android/JAVA-Forum besser aufgehoben.

Gru0 Tommy

@noiasca

Ich bin Anfänger in JAVA, wo soll ich ansetzen?

  1. Nein, mit dem Phone hatte ich noch keinen Zugriff aufs LAN, das Einzige ist eben, wenn ich im Handy-Browser die IP meines Arduino aufrufe, sendet der Arduino ganz normal die Antwort, die er soll.

  2. Wenn ich von meiner App irgendeine Internetseite requeste, bekommt die App eine Text-Antwort.

  3. Wenn ich aber von meiner App die IP des Arduino als URL losschicke, kommt keine Antwort. Der Server auf dem Arduino merkt nicht einmal, dass ein Client anklopft. Es gibt auch keine Fehlermeldung

  4. Erzwingt meine App HTTPS? Ich weiss nicht. Woran erkennt man das?

Meine Ideen waren

a lokale IP kann bei dem request nicht als URL genutzt werden, wie es im Browser möglich ist
b. Android benötigt eine andere permission als "INTERNET"
c. Latein am ende

Ist dein Handy überhaupt im gleichen Netz, sprich WLAN aktiv und kriegt eine IP?
Erkennt der Router das Handy und weist eine IP zu?
Keine IP-Konflikt, kriegt das Handy eventuell die 192.168.178.123 zugewiesen?
Kannst du die Fritzbox erreichen (192.168.178.1), über Browser und Ping?
Kannst du andere Geräte/PCs im Netzwerk anpingen?

Das Handy ist ganz normal im WLAN mit eigener IP. Das Handy kann auch alle anderen Geräte im Netz anpingen, auch den Arduino. Ich schätze, mein Problem liegt auf der Android Seite im JAVA Code.

Ein Android/JAVA Parogramm zur Abfage eines Arduino ist sicher nix Ungewöhnliches. Gibt es einen weiteren Beispielcode?