Forum: Mikrocontroller und Digitale Elektronik uC parameter mittels Android App steuern


von KingJulian (Gast)


Lesenswert?

Ich würde gerne Parameter meines uC Programms über eine Android App 
steuern. Welche Verbinung bietet sich da an?
WLAN sehe ich momentan nicht so weil, ich nicht will, dass man das 
Programm jeweils auf das gegebene Netzwerk anpassen muss (Logindaten), 
oder gibt es da zB mit dem ESP8266 die Möglichkeit, dass das Device sein 
eigenes WLAN erstellt? Ist für eine "einfache" End-zu-End Kommunikation 
Bluetooth besser geeignet?

Hat schonmal jemand so etwas implementiert?

von Chase (Gast)


Lesenswert?

Ich denke wenn du direkt und über kurze Distanz mit dem µC kommunizieren 
willst ist Bluetooth das beste. Es geht hier ja letzendlich um eine 
einfache Peer2Peer Verbindung zwischen 2 Geräten. Daher würde ich von 
komplizierten WLAN Lösungen absehen.

von Cyblord -. (cyblord)


Lesenswert?

HC-06 Modul. Arbeitet ganz hervorragend mit Android zusammen.

Hab ich schon einige Anwendungen mit gemacht.

Nur, hast du schon Erfahrung mit App Erstellung? So einfach mal schnell 
ist das auch nicht gemacht.

von Stefan F. (Gast)


Lesenswert?

Nur ist Bluetooth auch nicht gerade komfortabler zu bedienen, weil man 
da die Geräte pairen muss. Das nervt vor allem, wenn du mehrere Android 
Geräte wechselweise benutzt.

von Cyblord -. (cyblord)


Lesenswert?

Stefan U. schrieb:
> Nur ist Bluetooth auch nicht gerade komfortabler zu bedienen, weil man
> da die Geräte pairen muss. Das nervt vor allem, wenn du mehrere Android
> Geräte wechselweise benutzt.

Aber einmal pairen reicht. Das Gerät verbindet sich ab dann automatisch 
sobald es Strom hat und das Handys in der Nähe ist.

von KingJulian (Gast)


Lesenswert?

Cyblord -. schrieb:
> HC-06 Modul. Arbeitet ganz hervorragend mit Android zusammen.
>
> Hab ich schon einige Anwendungen mit gemacht.
>
> Nur, hast du schon Erfahrung mit App Erstellung? So einfach mal schnell
> ist das auch nicht gemacht.

Das Modul schau ich mir mal an, danke!

Erfahrung mit Apps selbst nicht, hab mich mal etwas mit dem Android 
Studio befasst und ich sag mal solide Java Kenntnisse - das sollte 
meiner Meinung nach einer überwindebare Hürde sein. Zudem wollte ich 
schon immer mal eine App schreiben.

Zur WLAN Lösung, um Platform unabhängig zu sein könnte man theoretisch 
mit dem ESP8266 eine Website einrichten und das Ganze dann über den 
Browser steuern? Oder funktioniert das Modul nur als AP in einem bereits 
bestehenden WLAN?

von Cyblord -. (cyblord)


Lesenswert?

KingJulian schrieb:
> Cyblord -. schrieb:
>> HC-06 Modul. Arbeitet ganz hervorragend mit Android zusammen.
>>
>> Hab ich schon einige Anwendungen mit gemacht.
>>
>> Nur, hast du schon Erfahrung mit App Erstellung? So einfach mal schnell
>> ist das auch nicht gemacht.
>
> Das Modul schau ich mir mal an, danke!
>
> Erfahrung mit Apps selbst nicht, hab mich mal etwas mit dem Android
> Studio befasst und ich sag mal solide Java Kenntnisse - das sollte
> meiner Meinung nach einer überwindebare Hürde sein. Zudem wollte ich
> schon immer mal eine App schreiben.

Ja dann sollte das kein Problem sein.

Hier gibt's den Einstieg zum Android und Bluetooth: 
https://developer.android.com/guide/topics/connectivity/bluetooth.html

Auf der HW-Seite muss man so gut wie nichts machen. Das HC-06 ist ein 
Slave-Only Modul.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

> Aber einmal pairen reicht.

Nur, wenn du dich auf EIN Android Gerät beschränkst. Ansonsten musst du 
bei jedem Wechsel neu pairen.

> Zur WLAN Lösung, um Platform unabhängig zu sein könnte man theoretisch
> ... eine Website einrichten und das Ganze dann über den Browser steuern?

Ja, kann man machen. Hier kannst du Dir Anregungen holen:

Mit Webserver: http://stefanfrings.de/net_io/index.html
Nur Bluetooth: http://stefanfrings.de/serial_io/index.html
Mit ESP8266: http://stefanfrings.de/wlan_io/index.html

von KingJulian (Gast)


Lesenswert?

Super, vielen Dank für die Links... lese mich da mal durch!

von C. H. (haaz)


Lesenswert?

NFC kommt nicht in Frage?

von Olaf (Gast)


Lesenswert?

> Nur ist Bluetooth auch nicht gerade komfortabler zu bedienen, weil man
> da die Geräte pairen muss.

Nur bei altem Bluetooth. Bei BLE geht es auch so. Das ist ja gerade fuer 
so Steuerungssachen erfunden worden.

Olaf

von KingJulian (Gast)


Lesenswert?

Ich habe nun hier so ein HC-06 Modul bestellt und das mal angeschlossen. 
Nun habe ich aber das Problem, dass ich per UART nur 1 Zeichen(das Erste 
das ich sende) empfangen kann - steh aber grad auf dem Schlauch warum 
das so sein sollte.

Meine Idee wäre, jeweils zu prüfen ob das RXNE Flag gesetzt ist und wenn 
ja zu lesen.
1
extern int uart2_read(void){
2
  uint8_t ch;
3
   
4
  /* Check if receive data register is empty */
5
  if(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == SET){
6
    ch = (uint8_t) USART_ReceiveData(USART2);    
7
    return ch;
8
  }
9
  return -1;
10
}

Hat das Ganze irgendwo einen Haken den ich übersehen habe?
Am BT Modul liegt es nicht, wenn ich es direkt(via USB - serial Adapter) 
auslese kommt alles an.

von Stefan F. (Gast)


Lesenswert?

Ich weiss nicht, was du da für einen µC verwendest. Aber bei einigen 
muss man das received-Flag "zu Fuß" löschen, wenn man ohne 
receive-Interrupt arbeitet.

von esp8266 (Gast)


Lesenswert?

KingJulian schrieb:
> gibt es da zB mit dem ESP8266 die Möglichkeit, dass das Device sein
> eigenes WLAN erstellt?

...ja, geht: der Modus nennt sich z.B. in nodemcu wifi.softap bzw. in 
Kombination (Station/AP) wifi.stationap.

von KingJulian (Gast)


Lesenswert?

Stefan U. schrieb:
> Ich weiss nicht, was du da für einen µC verwendest. Aber bei
> einigen
> muss man das received-Flag "zu Fuß" löschen, wenn man ohne
> receive-Interrupt arbeitet.

Es ist ein STM32F051, im Reference Manual steht "In single buffer mode, 
clearing the RXNE bit is performed by a software read to the USART_RDR 
register" - das wäre nach meinem Verständnis das was
1
USART_ReceiveData(USART2)
 macht.
Aber sonst versuch ich es mal mit manuellem clearen.

von KingJulian (Gast)


Lesenswert?

Oder wär es besser einen UART interrupt zu benutzten anstatt das Flag 
periodisch zu überprüfen?
Zur Ergänzung, dies ist die Config des USART2:
1
USART_InitStructure.USART_BaudRate = 9600;
2
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
3
USART_InitStructure.USART_StopBits = USART_StopBits_1;
4
USART_InitStructure.USART_Parity = USART_Parity_No;
5
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
6
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
7
USART_Init(USART2, &USART_InitStructure);

von Stefan F. (Gast)


Lesenswert?

> das wäre nach meinem Verständnis das was USART_ReceiveData(USART2) macht.

Ja, so verstehe ich den Satz auch.

von KingJulian (Gast)


Lesenswert?

Stefan U. schrieb:
>> das wäre nach meinem Verständnis das was
> USART_ReceiveData(USART2) macht.
>
> Ja, so verstehe ich den Satz auch.

Ich denke aber auch, dass er das macht - das Problem ist eher, dass es 
nicht mehr gesetzt wird. Nach dem ersten empfangen Zeichen gibt
1
extern int uart2_read(void){
2
  uint8_t ch;
3
   
4
  /* Check if receive data register is empty */
5
  if(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == SET){
6
    ch = (uint8_t) USART_ReceiveData(USART2);    
7
    return ch;
8
  }
9
  return -1;
10
}

nämlich nur noch -1 als Rückgabewert.

von KingJulian (Gast)


Lesenswert?

Scheint, dass es mit UART Interrupt klappt, verstehe zwar noch nicht 
warum das andere Konzept nicht funktioniert aber okay :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.