App programmieren, die über Website Daten an Microcontroller überträgt und empfängt

  • Antworten:12
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 5

15.08.2020, 21:01:46 via Website

Hallo liebes Forum,
Mein Name ist Vincent, ich bin 20 Jahre alt und studiere Elektrotechnik. Ich kenne mich schon sehr gut im Leiterplattendesign und der Microcontrollerprogrammierung (AVR) in C aus.

Nun möchte ich eine App programmieren, die Daten an einen ESP-32 Microcontroller übertragen und von diesem empfangen kann.
Die ESP-32 Seite ist nicht das Problem. Dieser baut einen Webserver auf, über den dann der Datenaustausch stattfinden soll.
Die App soll dann quasi folgendes können:

Endgerät mit App befindet sich dauerhaft im Netzwerk des ESP-32. Die App stellt Daten auf der Website bereit, der ESP liest sie aus und umgekehrt.
Leider habe ich gar keine Ahnung von App Programmierung.
Gerne würde ich die App auf Android UND iOS laufen lassen.
ich habe schon gelesen, dass es WebApps und native Apps gibt. Die App soll später in den Appstores zum herunterladen bereitstehen.

Was bietet sich für meinen Anwendungszweck an? WebApp oder native App? Wie setze ich das passende um? Kann jemand gute Literatur empfehlen?
Wichtig ist auch, dass das ganze sicher ist gegen äußere Einwirkung.

Ich hoffe jemand kann mir helfen und bedanke mich schon mal im voraus. :)

Diskutiere mit!
  • Forum-Beiträge: 11.026

16.08.2020, 13:49:12 via Website

Hallo Vincent,

herzlich wikommen hier im Forum :)



Zuerst mal musst du dir genau überlegen, welche Funktionen du haben willst.
Danach kommt die technische Entscheidung.

Was soll denn die ESP32 Seite machen? Soll diese nur Daten empfangen/Ausgeben oder auch eine sichtbare Webseite haben? Erläutere den Hintergrund deines Vorhabens etwas.

WebApp vs native App:

Eine WebApp ist keine "physische" App sondern einfach nur eine mobile Webseite, welche sich wie eine App in der Bedieung etc. verhält.
Da bist du komplett plattformunabhängig und musst nur den ESP32 programmieren.
Allerdings hast du dann auch keine App im Appstore, weil ja alles über die Webseite des ESP geht.
Solange du keine Ahnung von App programmierung hast und keinen Zugriff auf Live Sensordaten oder Systemfunktionen des Smartphones brauchst , wäre das vermutlich die beste Wahl.
Mit einem PC könnte man das dann auch nutzen.

Native App:
Du hast eine .apk/executable Datei mit allen Ressourcen und den App Quellcode in Java/Kotlin o.ä. vorliegen.
Diese kannst du dann im PlayStore veröffentlichen.
Plattformübergreifend zu programmieren ist sehr aufwändig, daher wären 2 Apps eine für Android und die andere für iOS besser. Bedenke allerdings auch, dass du für iOS Apps entsprechendes Apple Equipment brauchst und für die App Store jährliche Gebühren auf dich zu kommen. Bei Android ist die PlayStore Gebühr einmalig.

Sobald du diese Entscheidung getroffen hast, geht es dann an den technischen Hintergrund.
I.d.r baut man am Server (ESP32) eine Rest-API auf und spricht dann mit allen Clients diese API an.
Ein Client könnte auch wiederum ein Frontend einer Webseite sein. (Womit du dann eine WebApp hast, aber für erweiterungen mit einer Android App flexibel bist).

Solange dein ESP32 nur ein Ad-hoc Netzwerk aufbaust und du dein Smatphone in dieses Verbindest ist es i.d.r gegen außere Einflüsse geschützt. (Es sei denn es hat jemand zugang zur Hardware). Bedenke allerdings, dass dein Handy ggf. meckert, dass es über dieses ESP Wlan kein Internet hat und somit sich automatisch wieder trennt.
Wird der ESP in einem bestehenden Netzwerk betrieben, musst du mit den passenden Routereinstellungen für sicherheit sorgen.

— geändert am 16.08.2020, 13:51:44

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 5

16.08.2020, 14:13:47 via Website

Danke für die ausführliche Erklärung!

Die App soll wirklich nur die Daten empfangen und senden können (an und vom ESP32). Eine extra Website wird nicht benötigt.

Zum Anfang würde ich die App erstmal für Android programmieren um mir den Aufwand mit iOS zu sparen.
Hast du hier Literaturempfehlungen für mich? Auch in Bezug auf die Rest-API und co? Damit kenne ich mich wiegesagt leider noch gar nicht aus.

Eine allgemeine Frage noch,
Ich kenne einige Apps, bei denen es mir so vorkommt als würden sie nur auf eine Website zugreifen (eigentlich alle Onlineversandhäuser wie Amazon, Thomann...) wie machen die das? Im Endeffekt ist das doch nur eine WebApp oder? Warum lässt sich diese dann über den Appstore/Playstore laden?
Um sowas geht es mir nämlich, ich gebe etwas in die App ein, diese überträgt es wie gesagt an den Server und der Esp32 verarbeitet dann die Daten vom Server, ist doch eigentlich die gleiche Grundidee?

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 1.246

16.08.2020, 14:57:24 via Website

Hallo von mir auch erstmal willkommen in Forum.

Eine WebApp ist eigentlich fast das selbe wie ein Browser.
Eine WebApp zeigt dir nur eine vorhandene HTML Seite an.
Die müsste dann entweder ein Web Server im Netz oder vielleicht dein ESP zur Verfügung stellen . Bei dem Esp bin ich mir nicht sicher ob der überhaupt zu so etwas in der Lage ist. Habe mir jetzt nicht angesehen was das für eine Cpu ist.
Also der Esp müsste dann die Rest API zb in PHP machen und auf dem ESP müsste auch ein Webserver zb. Apache laufen.

Das Prinzip der Webapp würde ich verwerfen. Da scheint mir der ESP32 etwas zu schwach zu sein.
Welche ESP hast du genau?

Beachte das es kein Ras Pi ist.

— geändert am 16.08.2020, 15:18:09

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 11.026

16.08.2020, 16:11:52 via Website

@Jokel: Du darfst beim Microcontrollern nicht klassisch denken.
Ein Apache Webserver wäre overkill. I.d.r ist das bei sowas mit Libs direkt implementiert.

Webapp geht rein theoretisch auch, Files können im internen Flash oder auf SD gespeichert werden.
Solange du nur eine API hast und das Frontend via React.js oder Angular gebaut wird (und die Daten nur über die API kommen und keine LayoutEnginge mit datenverarbeitung dahinter steckt), würde ich behaupten das geht.

Ein ESP32 programmiert man i.d.r mit C++ und da kann man eben auch mit den entsprechenden Libs einen WebServer zur verfügung stellen, welcher Content ausliefert. (ganz rudimentär, mit kleiner HTTP Header auswertung, nichts sehr komplexes etc.)
Eine Rest API wäre damit also möglich.
Auch HTTP Post + Parameter etc. lassen sich auswerten.
Solange du auch einige wenige User und keine risige Datenmenge hast, könnte das auf der Hardware gehen.

Bevor du mit Android anfängst würde ich mich in Java/Kotlin einarbeiten (was dir besser gefällt).
Dazu am besten gängige Tutorials im Internet nachschauen und dich erstmal auf Consolenanwendungen beschränken.
Solltest du schon Java können, kannst du direkt mit Android einsteigen.

Für RestApis:
https://blog.milsystems.de/2014/03/rest-api-einfach-erklaert/

Du kanst vermutlich auch erst die RestApi am ESP implementieren und diese dann manuell aufrufen um an Daten zu kommen. Das wäre zum entwickln undDebuggen sowieso besser, dann ist die Serverseite fertig un du kannst dich auf die App konzentrieren.

— geändert am 16.08.2020, 16:15:57

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 1.246

16.08.2020, 16:37:25 via Website

@Pascal ja das weiß ich deshalb auch die Frage nach der genauen Cpu besser noch komplette Platine denn die Cpu gib es in verschieden Ausführungen mit intern sRam und extern sd-Ram … Extern wieviel ist es lohnt sich da ein Server. Die CPU gibt es auch mit sehr wenig Speicher deshalb erst mal die Frage nach der genauen CPU und auch nach den verbauten Komponenten.

Ja die ESP kann man mit den Libs der Arduino benutzen. Ja klar kann man auch selber einen mini Web Server schreiben. Oder eine Arduino Lib benutzen.

Eigentlich reicht eine einfache socket Verbindung um lokalen Lan aus .
Nur muss er dann sinnvoll und richtig auf Android SDK arbeiten WebApp ohne http geht nicht.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 11.026

16.08.2020, 17:47:34 via Website

Das ist klar.
HTTP Server etc. ist auf Arduino/ESP32 vorhanden und kann direkt genutzt werden. Daher kann auch eine WebApp implementiert werden. Dies habe ich selbst schon mit React.js und einer Rest API gemacht.

Allerdings wird für ihn Rest auf dem ESP und HTTP Client/RestClient auf Android seite das beste sein.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 5

16.08.2020, 19:22:46 via Website

Danke für die Antworten!
Wenn eine WebApp quasi nur eine andere Darstellung einer Website ist, wäre das dann nicht bei der Amazon App beispielsweise der Fall? Warum lässt diese sich dennoch im Playstore laden?

Das ESP32 ist soweit ich weiss schon die endgültige, korrekte Bezeichnung vom Hersteller espressif. Im genauen ist es der ESP-32-WROVER-B 16MB. Ich versuche mal das Datenblatt anzuhängen.

Genau, den ESP32 programmiere ich in C++.

Java habe ich mal gelernt, werde das aber nochmal auffrischen. ;)

Bei meiner weiteren Suche bin ich auf ein Video gestoßen, leider kann ich das nicht verlinken. Es heisst "How to add WiFi Control to any project, GreatScott"

Im Endeffekt wird hier die IP des ESP32 aufgerufen und dann eine Unterseite, die dem ESP32 sagt, was er zu tun hat.

Das ist eigentlich genau das was ich brauche, nur ist es mir zu hässlich und umständlich, ehrlich gesagt.

Auch habe ich schon MIT Appinventor gesehen, nur sind mir diese Apps auch nicht schön genug.

Erfolgt bei nativen Arduino Apps das Frontend und Backend in der selben Sprache oder werden da auch verschiedene benutzt?

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 1.246

16.08.2020, 20:03:00 via Website

Android wird in Java oder Kotlin Programmiert.

Habe mir das Video kurz angesehen. Die App in dem Video wurde so wie es aussah mi dem Appinventor gemacht, und mit einer einfachen Tcp HttpUrlConnection werden die daten an den ESP übertragen.

Das ist eigentlich genau das was ich brauche, nur ist es mir zu hässlich und umständlich, ehrlich gesagt.

wieso ist doch wirklich eine einfache Sache.
Er benutz eine Lib um eine HttpConnection über TCP zumachen. Der ESP ist so zusahen der Server der auf der Verbindung lauscht. Bekommt er den richtigen Befehl führt ihn aus also zb die LED einschalten eigentlich den Ausgang setzen.. Somit ist eigentlich Server und Ausführung alles in einen Programm im ESP.

Erfolgt bei nativen Arduino Apps das Frontend und Backend in der selben Sprache oder werden da auch verschiedene benutzt?

Android wie gesagt in Java oder Kotlin.
Der ESP In C++ oder auch Python, .... kommt auf die Lib an die du verwenden willst.

PS. wenn es der alte ESP8266 schaft wird es mit deinen ESP32 mit sicherheit gehn.

— geändert am 16.08.2020, 20:18:34

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 5

16.08.2020, 20:23:07 via Website

Okey, also kann ich dann die Oberfläche der App und auch die appseitige Kommunikation mit dem ESP beides in Java machen?

Kannst du mir schildern, wie solche Shop-Apps wie Amazon und Thomann funktionieren? Ganz grob nur um es mal zu verstehen?

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 1.246

16.08.2020, 20:33:33 via Website

Ja alles was auf dem Handy läuft in Java.

Die Amazon App wird keine richtige reine WebApp sein. Sondern eine richtige App die einige Sachen mit HTML macht. Die ist mit sicherheit ordentlich geschrieben.

— geändert am 16.08.2020, 20:34:18

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 1.246

16.08.2020, 20:54:43 via Website

Ps solange du in deinen Lan bleist ist das eine einfache Variante. Willst du auch von extern auf deinen Server zugreifen solltest du etwas in ein Sicherheit Konzepte stecken . Wie gut da die Lib ist die er da benutzt hat kann ich nicht sagen. Https (Post nicht Get) und eine User Autorisierung mit PW solltest du da schon machen. Wie sicher der benutzte Server ist keine Ahnung.

Dazu wäre auch interessant welchen Internet Anschluss du hast IPV6 oder IPv4 oder einen mit beiden IPs. Denn mobiles Daten Netz ist noch IPv4 und wenn du davon in dein eigenes IPv6 Netz willst wirst du einige Schwierigkeiten haben.

— geändert am 16.08.2020, 21:01:43

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 5

16.08.2020, 21:10:29 via Website

Vielen lieben Dank!
Ich versuche mich erstmal daran, bei Fragen melde ich mich! :)

Hilfreich?
Diskutiere mit!
Empfohlene Artikel bei NextPit