Hilfe bei Bluetooth Programmierung

Hi

Hab sehr wenig Erfahrung und würde mich über Hilfe freuen.

Es geht um folgendes.

Habe hier ein ESP32 WROOM D1 Mini, Galaxy Tab A und eine Steuerung die ich bedienen möchte.
Wichtig ist jetzt das ich mit meinem Tablet per Bluetooth einen Text senden möchte und das dann als Kommando an dem ESP umgesetzt wird und 3 Pins gleichzeitig aktivieren soll für 500ms
Zweck ist Kombinationen zu erzeugen um mit wenigen Pins so viele verschiedene Steuerungen wie möglich zu nutzen und mit 8 Pins kann ich 56 Kombinationen, ohne Berücksichtigung der Reihenfolge, nutzen die ausreichend sind.

Hab bereits eine App bei MIT App Inventor 2 zusammen gebastelt und möchte später dann das ganze darauf aufbauen.

Hoffe es kann mir jemand ein wenig helfen.

edit:
Wie muss der Code aussehen damit der Microcontroller eingehenden Text erkennt und dann ein Kommando auslöst und 500ms 3 Pins aktiviert

Dein Projekt kann Wirklichkeit werden. Das ist schon so. Es bedarf aber deutlich mehr Kenntnisse als einen Bluetooth-Lautsprecher mit einem Tablet zu verbinden.

Stell dir vor du gehst in einen großen Supermarkt und fragst einen Verkäufer:
"Ich möchte es warm haben. Können Sie mir helfen"?

Ende der Frage. Wie gut wird dir der Verkäufer helfen können????

Also gut du hast etwas mehr Informationen gegeben: "Ich habe Schuhgröße 43, ich esse gerne Vanille-Eis und ich möchte es gerne biologisch warm haben"

Hilft aber immer noch nicht weiter.

Die Kernaussage: ESP32 WVROOM D1 Mini,
Galaxy Tab A und eine Steuerung die ich bedienen möchte ist einfach zu wenig.

Da bleiben jede Menge Fragen offen:

  • was für eine Steuerung?

  • Wie wird diese Steuerung bisher "angesteuert" Datenblatt zu der Steuerung

  • Ein Datenblatt des Moduls ESP32 WVROOM D1 Mini

  • Wie viel Erfahrung hast du im Programmieren?

  • Kann man diese Math-LAB-App mit einem anderen Bluetooth-Empfänger verbinden um zu sehen ob die App funktioniert?

Das heißt du musst schon deutlich mehr Information zur Verfügung stellen damit man dir helfen kann.
Die andere Alternative ist ganz direkt zu fragen "Wer kann mir diese Funktionen für wie viel Geld programmieren?" Die Alternative willst du vermutlich nicht.

vgs

Hallo,

mit 8 Pins kannst Du 256 varianten nutzen, inc der 0.
Irgendwo wirst Du ein Beispiel finden wie Du deinen ESP32 mit Blauzahn nutzen kannst. Mit Deiner Grafik kann ich nicht viel anfangen , da werden ein paar if... Abfragen zusammen gestellt , Aussage für mich NULL.

Wenn Du die ESP32 Erweiterung in der Adruino IDE hast findest Du die Beispiele dort. Aber dazu musst Du Dch schon etwas mit C beschäftigen.

Heinz

Was für eine Steuerung spielt in diesem Fall keine Rolle, wichtig ist nur das ich 3 Pins gleichzeitig für eine kurze Dauer aktiviere.
Alles was nach dem Microcontroller passiert ist schon Funktionsbereit und auch schon erprobt .

  • Wie viel Erfahrung hast du im Programmieren?

bin Anfänger und schau mir einiges an YT Videos an und Experimentiere ein wenig mit einem UNO.

  • Kann man diese Math-LAB-App mit einem anderen Bluetooth-Empfänger verbinden um zu sehen ob die App funktioniert?

Die App lässt sich mit dem ESP32 per BT verbinden und über den Seriellen Monitor sieht man das die Befehle in Textform ankommen. Das konnte ich mir halbwegs mit Hilfe von YT beibringen.

Die andere Alternative ist ganz direkt zu fragen "Wer kann mir diese Funktionen für wie viel Geld programmieren?" Die Alternative willst du vermutlich nicht.

Das Projekt möchte ich natürlich selber auf die Beine stemmen und grundsätzlich erwarte ich auch nicht das hier jemand kostenneutral eine Leistung erbringt für die er gerne entlohnt werden möchte.

Ein Datenblatt des Moduls ESP32 WROOM D1 Mini

Datenblatt siehe Link:

Stell dir vor du gehst in einen großen Supermarkt und fragst einen Verkäufer:
"Ich möchte es warm haben. Können Sie mir helfen"?

Ende der Frage. Wie gut wird dir der Verkäufer helfen können????

Jop verstehe ich.

zum Post von Rentner

mit 8 Pins kannst Du 256 varianten nutzen, inc der 0.

Wenn ich 8 Pins habe und 3er Kombinationen erzeuge und die Reihenfolge der Zeichen keine Rolle spielt dann sind es nur 56.
Siehe Link:
https://www.rechner.club/kombinatorik/anzahl-kombinationen-ungeordnet-ohne-wiederholung-berechnen?paramid=o4jaa5qei6

Natürlich möchte ich nicht unhöflich klingen und entschuldige mich falls ich mich nicht deutlich genug ausgedrückt habe.

Also wenn du dann mal eine wirklich konkrete Frage hast musste die Frage halt posten.
Ich habe immer noch nicht genug Übung im Glaskugel-Schauen um dadurch herauszufinden was die unaufgeschriebenen Fragen von anderen usern sind.

vgs

Wichtig ist jetzt das ich mit meinem Tablet per Bluetooth einen Text senden möchte und das dann als Kommando an dem ESP umgesetzt wird und 3 Pins gleichzeitig aktivieren soll für 500ms

Wie muss der Code aussehen damit der Microcontroller eingehenden Text erkennt und dann ein Kommando auslöst und 500ms 3 Pins aktiviert

(deleted)

atlan_dragnir:
Wie muss der Code aussehen damit der Microcontroller eingehenden Text erkennt und dann ein Kommando auslöst und 500ms 3 Pins aktiviert

Meine Antwort: "Schön formatiert sollte der Code aussehen und selbsterklärende Namen verwenden damit man sich
später wieder schnell zurecht findet wenn man etwas am code ändern möchte"

Mir ist klar das das nicht die Antwort ist die du haben möchtest.

Man kann ja in diesem Forum auf ganz verschiedene Art und Weise Fragen stellen und auch ganz unterschiedliche Antworten geben und insgesamt ein verschiedenartiges Verständnis von diesem Forum haben.
Mein Verständnis dieses Forums ist folgendes: Es hilft beim lernen. Das Forum ist nicht dazu da eine globale Frage zu stellen die eigentlich eine Aufforderung ist "Kann mir mal jemand folgende Funktionalität programmieren?"
Programmieren kann man lernen. Ziemlich schnell sogar. Es dauert aber schon ein bisschen länger als nur einen Cheatcode abschreiben und eingeben.
Es dauert nicht Jahre und auch nicht Monate. Aber 2 bis 3 Wochen mit 5-10 Stunden pro Woche gleich 60 bis 90 Minuten pro Tag schon.
Ohne dieses Grundwissen zu haben dauert es 3 bis 6 Monate bis sich immer jeweils nach ca 3-7 Tagen ein User erbarmt dir das nächste Stückchen Code auf dem Silbertablett zu servieren. Ich bin jetzt seit 11 Monaten in diesem Forum aktiv. In diesen 11 Monaten habe ich noch keinen einzigen Fall erlebt in dem auf so eine globale Anfrage wie

"Wie muss der Code aussehen damit der Microcontroller eingehenden Text erkennt und dann ein Kommando auslöst und 500ms 3 Pins aktiviert"

als Antwort der komplette funktionierende Code gepostet worden wäre. Darüber hinaus ist es aus dieser kurzen Formulierung auch nicht möglich einen komplett funktionerenden Code zu erstellen weil wichtige Detailinformationen fehlen.

Jetzt magst du fragen "jetzt hat er bestimmt schon 15 Minuten an dieser ausführlichen Antwort gesessen. WIeso schreibt er in der Zeit nicht einfach die ersten 30 Zeilen Code?!?!?"

Weil ich es mir zum Grundprinzip gemacht habe nur Hilfe zur Selbsthilfe zu geben. Und das auch nur an Leute bei denen ein Mindestmaß an eigenem Aufwand sichtbar wird, und zwar dadurch das sie mindestens einen eigenen Programmierversuch posten. Und dann dazu Fragen stellen.

In diesem Sinne: was vermutest du wie könnten die ersten fünf Programmierzeilen aussehen??

NOch eine Empfehlung zum Porgrammieren lernen
Es gibt einen englische Einführung ins Arduino-Programmieren die gut verständlich ist.

Wenn du nur wenig englisch kannst dann könntest du es von google-translate übersetzen lassen.
Der Browser Chrome hat das quasi eingebaut. Es geht indirekt auch mit anderen Browsern.
Das scheint es auf direktem Wege nicht mehr zu funktionieren. Es gibt aber entsprechende Online-Services

http://free-website-translation.com/?de

hier die erste Seite dieses Kurses in deutscher Übersetzung
http://translate.google.com/translate?sl=en&tl=de&u=https%3A%2F%2Fstartingelectronics.org%2Fsoftware%2Farduino%2Flearn-to-program-course%2F01-program-structure-flow%2F

vgs

danke StefanL38 für deine Antwort.
Ich erwarte nicht das hier jemand irgendwas auf dem Silber Tablet serviert und ich habe auch eine ganz andere Vorstellung von Hilfe als das was du da beschreibst.
Wenn du wirklich die Absicht hättest helfen zu wollen dann würdest du einfach mal einem Anfänger nachsehen wie er seine Hilfeanfrage formuliert und mal etwas weniger aggressiv auftreten.
Mir ist klar das ich nicht alles sofort Lerne und folglich auch Schwierigkeiten habe mein Anliegen so genau zu definieren das auch Menschen wie du genau verstehen worauf ich hinaus will ohne Angriffsfläche für Dumme Kommentare zu bieten.

Peter-CAD-HST Vielen Dank :slight_smile:
Ich werde mit dem Sketch einige Versuche machen.
Das bringt mich definitiv weiter und muss noch schauen das ich hinter die einzelnen Funktionen steige.

was ich schon einmal zu bluetooth ausprobiert habe stammt von dieser Website

Ich bin aber kein Bluetooth-Experte. Dieses tutorial benutzt eine library BluetoothSerial.h

Zu Bluetooth gibt es ja ganz unterschiedliche Anwendungen, Audio, Maus, Tastatur
und dann auch noch BLE (blue-tooth low-energy)
Die werden sich irgendwie unterscheiden.
Also musst du mal herausfinden was denn deine selbst erstellte App macht.

Zu BLE hat RNT auch ein Tutorial

vgs

Hey StefanL38

Danke für den Link
das war der entscheidende Hinweis.
habe hier mal was geschrieben und meine App funktioniert auf diese weise und mein ESP32 führt den Befehl aus

also wie gesagt geht es nur um den ESP32 der ankommenden Text umsetzt und dann 3 von 8 Pins auf HIGH schaltet.

Natürlich werden euch einige Dinge auffallen die ich noch nicht sehe und der Code ist jetzt nur erst mal ein Test um zu schauen ob die gewünschten Funktionen klappen.
Natürlich tüftle ich noch weiter daran herum und versuche das ganze weiter zu optimieren.

Konstruktive Kritik ist gern gesehen.

#include "BluetoothSerial.h"

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif

BluetoothSerial SerialBT;

const int up = 23;
const int down = 4;
const int left = 18;


String message = "";
char incomingChar;

void setup() {

  pinMode(23, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(18, OUTPUT);
  Serial.begin(115200);
  SerialBT.begin("EDXPanel"); 
  Serial.println("The device started, now you can pair it with bluetooth!");
}

void loop() {
  if (SerialBT.available()) {
    char incomingChar = SerialBT.read();
    if (incomingChar != '\n') {
      message += String(incomingChar);
    }
    else {
      message = "";
    }
    Serial.write(incomingChar);
  }

  if (message == "FSA") {
    digitalWrite(up, HIGH);
    digitalWrite(down, HIGH);
    digitalWrite(left, HIGH);
    delay(2000);
    digitalWrite(up, LOW);
    digitalWrite(down, LOW);
    digitalWrite(left, LOW);
  }
  delay(20);
}

Ja das ist doch prima wenn du vom tablet "FSA" senden kannst und das dann so im ESP32 ankommt.

Was heißt jetzt "3 von 8 Pins high schalten?

Hast du insgesamt 8 IO-pins von denen immer 3 aber eben unterschiedliche 3 zusammen high geschaltet werden?
Beispiele

12345678
00000111
11100000
11000001
00100110

global definierte Variablen vom Typ String verbrauchen bei jeder neuen Zuweisung neuen Speicherplatz und das führt dann im Laufe der Zeit unweigerlich zum Absturz oder komischem Verhalten des Programms.
Lieber Array of Char oder die library PString-benutzen.

PString-variablen haben ähnlichen "Komfort" wie String aber haben immer den gleichen Speicherplatzbedarf.
Wenn man zu viele Zeichen hineinspeichern will werden die "zuviel-"Zeichen einfach abgeschnitten aber sonst passiert nichts. Man muss sie von Anfnag an auf die maximal mögliche Länge definieren.

Wie du an der neuerlichen Nachfrage sehen kannst. Programmieren ist nicht wie "Siri bestell mir meine Lieblingspizza"
Man muss schon alles haarklein und präzise definieren.

vgs

Genau so ist es 3 von 8 und immer eine andere Kombination

Ja das mit dem Speicherplatz hab ich mir auch schon überlegt und noch nicht die passende Lösung aber cool das du dir da auch Gedanken gemacht hast
PString-variablen werde ich mir dann direkt mal anschauen.

PString ist eine library (= Programm-"Bibliothek" ) die man sich über den library-Manager der Arduino-IDE dazu
installieren kann. Der Speicherplatz eines ESP32 reicht für das Programm gut aus. Wenn auch sich das Bluetooth schon mal üppige 60% schnappt. Problematisch wird es mit String-Variablen wenn man tausende Schleifendurchläufe hat bei denen jedes mal in der Stringvariablen etwas neues gespeichert wird.

So wie sollen jetzt die Zeichen aussehen die du von der Bluetooth-App an den ESP32 sendest?

vgs

Die Zeichen sind kürzel der einzelnen Funktionen eines Spiels
z.B. FSA für Frame Shift Antrieb
Oder WM1 für Wingman1

Wollte gerne die kürzel nutzen um beim programmieren und ggf. bei Problemen die übersicht zu behalten.

atlan_dragnir:
Die Zeichen sind kürzel der einzelnen Funktionen eines Spiels
z.B. FSA für Frame Shift Antrieb
Oder WM1 für Wingman1

Wollte gerne die kürzel nutzen um beim programmieren und ggf. bei Problemen die übersicht zu behalten.

Das ist kein Problem. Es gibt Befehle zum Vergleichen von Zeichenketten. Gibt es in den Kürzeln einbestimmtes Muster
WM1, WM2, usw. oder sind die alle ganz unterschiedlich?
Was auf jeden Fall funktioniert sind PStrings deren Variablennamen das Kürzel enthält damit man als Programmierer die Übersicht behält.
Dann gibt es entsprechend viele if-bedingungen
pseudo-code
const int FSA_BitMuster = 0x71;
if (strcmp (received_PS, FSA_PS) == 0) {
BitMuster = FSA_BitMuster;
}
Dem Compiler ist es völlig wurscht wie die Variablen heißen. Man könnte sie auch BlaBlaQuatschi1, BlaBlaQuatschi2... bis BlaBlaQuatschi56 nennen.

Es macht aber natürlich viel mehr Sinn den Variablen selbsterklärende Namen zu geben

vgs

Nope es gibt kein bestimmtes Muster bei den Kürzel, es handelt sich um Kürzel die ich definiere

Hard Point = HP
Super Cruise = SC
usw…

Meist die ersten Buchstaben

Ja also dann einzelne If-Bedingungen für jedes empfangene Buchstabenkürzel.

Meine Empfehlung zum testen erst einmal für zwei Buchstabenkürzel programmieren
und das Bitmuster auf die serielle Schnittstelle ausgeben oder 8 Kontroll-LEDs mit passendem Vorwiderstand anschließen und dann die Prinzipielle Funktion testen.

korrekte Zeichenfolge senden
zu kurze Zeichenfolge senden
nur "Abschlusszeichen senden
zu lange Zeichenfolge senden
falsche Zeichenfolge senden
in schneller Folge mit Zeichenfolgen zuballern

und jeweils untersuchen was passiert und Fehler abfangen.

Das nimmt Extrazeit in Anspruch. Wohl wahr. Es wird aber weniger Zeit in Anspruch nehmen wie wenn man erst in einem voll ausgebauten Code anfängt auf Sondersituationen / Fehler zu testen.

vgs

(deleted)

ja ich denke so mach ich es

zuerst 2 Taster Programmieren und die Varianten austesten und senderseitig das ganze definieren.
werde mir dann einfach eine Excel Tabelle mit den zugehörigen Definitionen anlegen um den überblick zu halten.