Hallo zusammen,
unten steht der Code, den ich verwende. Ich will ganz basic jede Sekunde eine 1 von dem HC-05 Modul an mein PC senden. Mein Ziel wäre, dass ich das Programm Arduino IDE öffne, den zugewiesen COM-Port des HC-05 auswähle und im Seriellen Monitor eine 1 pro Sekunde empfange.
Mit meiner Handy App (Android) "Serial Bluetooth Terminal" geht das bereits, dass ich das HC-05 verbinde und 1er empfange, jedoch nicht mit meinem PC.
Das Problem:
Ich habe das HC-05 Modul bereits mit meinem PC verbunden, jedoch steht jetzt immer nur gekoppelt dran und nicht verbunden, evtl. ist das das Problem. Ich finde jedoch keine Lösung, wie ich das HC05 Modul verbinden und nicht nur koppeln kann.
Wenn ich das HC-05 anklicke, passiert nichts, als wäre es nicht möglich eine Verbindung aufzubauen.
Ein kleiner Zusatz:
Das Ganze, also HC-05 und Arduino Nano wird später ein Tool, welches ein Teil meiner Bachelorarbeit ist und später einer Firma übergeben wird. Dort soll es dann für andere zugänglich sein, wobei die Idee ist, dass jeder das Tool mit seinem eigenen PC benutzen kann.
Ich hätte es am Ende also gerne so, dass jeder den Arduino inklusive HC05 anschalten, wie ein Bluetooth Lautsprecher einfach mit seinem PC verbinden und Daten empfangen kann. Ist das realistisch oder kommt es oft zu Komplikationen zwischen PCs und HC05, sodass ich nach einer zuverlässigeren Möglichkeit suchen sollte?
Hier noch der Verbindungsstatus des HC-05, wie auch die zugewiesene COM-Schnittstelle:
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(10, 11); // RX, TX
void setup() {
// Initialisiere die serielle Verbindung zum PC (für Debugging)
Serial.begin(9600);
// Initialisiere die serielle Verbindung zum Bluetooth-Modul
BTSerial.begin(9600);
}
void loop() {
// Sende jede Sekunde eine 1 über das Bluetooth-Modul
BTSerial.println("1");
// Debug-Ausgabe zum seriellen Monitor des PCs
Serial.println("1 gesendet über Bluetooth");
delay(1000);
}
"Verbunden" steht da erst, nachdem die serielle Schnittstelle (COM...) auch wirklich geöffnet wurde. In deinem Fall wird das wohl COM12 sein.
Du kannst das etwa mit dem Seriellen Monitor der Arduino-IDE machen. Vorher musst du den entsprechenden COM-Port einstellen.
Super, Danke. Hat geklappt.
Habe davor nur den falschen com-port ausgewählt
Was denkst du darüber @uxomm, ist die Verbindung zwischen HC-05 und Windows so einfach bzw zuverlässig auch bei verschiedenen PCs?
"Ich hätte es am Ende also gerne so, dass jeder den Arduino inklusive HC05 anschalten, wie ein Bluetooth Lautsprecher einfach mit seinem PC verbinden und Daten empfangen kann. Ist das realistisch oder kommt es oft zu Komplikationen zwischen PCs und HC05, sodass ich nach einer zuverlässigeren Möglichkeit suchen sollte?"
Fragen:
Ist das HC-05-Modul ist mit seiner **seriellen** Schnittstelle mit dem Arduino verbunden?
höchstwahrscheinlich ja. Trotzdem bitte mal
**ausdrücklich** bestätigen oder korrigieren.
Ist der PC per bluetooth mit dem HC-05-Modul verbunden?
höchstwahrscheinlich ja. Trotzdem bitte mal ausdrücklich bestätigen oder korrigieren.
So angenommen es ist so verbunden
Arduino-----Rx/Tx-HC-05 - - - - - bluetooth- - - - PC
Warum muss man dann am PC den COM-port öffnen??
Sind da zwei HC-05 beteiligt?
Antwort ergoogelt. Das HC-05-Modul agiert als bluetooth-comport.
Für die weiteren Überlegungen ob das die einfachste und zuverlässigste Methode ist:
Grundfunktion: von einem Microcontroller Daten auf einen PC übertragen.
Muss es unbedingt Funk sein?
Was für Daten werden da übertragen?
wie lange werden diese Daten pro Anwendung übertragen?
wie werden die übertragenen Daten weiterverarbeitet?
weitere Möglichkeiten wie man das machen kann:
Per ESP32 über WLAN UDP-Telegramme versenden die von einem Empfänger-Progrämmchen das auf dem PC läuft in eine Textdatei geschrieben werden.
Per ESP32 und bluetooth
Daten als Textdatei auf einer Micro-SD-Karte speichern und später die Text-Datei auf den PC kopieren
Gar nicht per Funk sondern per USB-Kabel und serieller Schnittstelle
Wegen der Anforderung mit beliebigem PC verbinden und schon werden Daten empfangen spricht schon viel für Bluetooth.
Da der HC-05 als bluetooth COM-Port agiert benötigt man eine Serial-terminal Software die die Daten am besten gleich noch in eine Textdatei speichern kann.
Jetzt kommt es darauf an wie viel Daten denn da in jeder Sekunde übertragen werden sollen.
Unter Umständen könnte man das auch mit einem ESP32 der als BLE-Keyboard agiert machen. Dann werden die Daten einfach ein dem Programm "eingetippt" das gerade den Focus hat.
hm wohl doch nicht so klasse weil der PC damit blockiert ist.
Edit:
So habe jetzt einen Demo-Code für Bluetooth-Serial auf dem ESP32 modifiziert
Ein ESP32 braucht wahrscheinlich mehr Strom als ein Arduino Nano o.ä.
Wenn das Ding also nicht tagelang auf Batterie laufen muss dann könnte man auch so einen ESP32 nehmen
Demo-Code
#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;
unsigned long MyTestTimer = 0; // Timer-variables MUST be of type unsigned long
const byte OnBoard_LED = 2; // onboard-LEDESP32 / ESP8266
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("Setup-Start");
PrintFileNameDateTime();
//This example code is in the Public Domain (or CC0 licensed, at your option.)
//By Evandro Copercini - 2018
//
//This example creates a bridge between Serial and Classical Bluetooth (SPP)
//and also demonstrate that SerialBT have the same functionalities of a normal Serial
SerialBT.begin("ESP32BT-COMPORT"); //Bluetooth device name
Serial.println("The device started. Name of device is ESP32BT-COMPORT"); //Bluetooth device name
Serial.println("Now you can pair it with bluetooth!");
}
void loop() {
BlinkHeartBeatLED(OnBoard_LED,250);
if ( TimePeriodIsOver(MyTestTimer,2000) ) {
SerialBT.println("Hello from the ESP32-serial bluetoth connection");
}
}
// helper-functions
void PrintFileNameDateTime() {
Serial.println( F("Code running comes from file ") );
Serial.println( F(__FILE__) );
Serial.print( F(" compiled ") );
Serial.print( F(__DATE__) );
Serial.print( F(" ") );
Serial.println( F(__TIME__) );
}
// easy to use helper-function for non-blocking timing
// explanation see here
// https://forum.arduino.cc/t/example-code-for-timing-based-on-millis-easier-to-understand-through-the-use-of-example-numbers-avoiding-delay/974017
boolean TimePeriodIsOver (unsigned long &startOfPeriod, unsigned long TimePeriod) {
unsigned long currentMillis = millis();
if ( currentMillis - startOfPeriod >= TimePeriod ) {
// more time than TimePeriod has elapsed since last time if-condition was true
startOfPeriod = currentMillis; // a new period starts right here so set new starttime
return true;
}
else return false; // actual TimePeriod is NOT yet over
}
void BlinkHeartBeatLED(int IO_Pin, int BlinkPeriod) {
static unsigned long MyBlinkTimer;
pinMode(IO_Pin, OUTPUT);
if ( TimePeriodIsOver(MyBlinkTimer,BlinkPeriod) ) {
digitalWrite(IO_Pin,!digitalRead(IO_Pin) );
}
}
Ich kann von einem Projekt berichten, wo ich Daten mit einem HC05-Modul zu einem PC übertrage.
Zur Steuerung einer Art Flugsimulator (für Paraglider) werden mit einem HC05-Modul "Datensätze" mit 3 Werten übertragen. Das passiert 25 mal pro Sekunde (alle 40 Millisekunden). Die 3 Werte sind durch Komma getrennt, das Zeilenende ist durch Zeilenumbruch (CR) gekennzeichnet. Beispielsweise könnte das so aussehen:
1238,2054,-298
1220,2056,-301
1221,2058,-300
Das sind Werte von 2 Wägezellen und der Wert "Rollen" eines Lagesensors.
Ich habe folgendes im Einsatz:
2 Wägezellen ("20 kg") mit HX711
Lagesensors MPU6050
Nano (Classic)
Bluetooth-Modul HC05
Stromversorgung: 3 Mignon (NiMH) + Spannungswandler (Boost-Converter auf 5 Volt)
Am PC (Windows-Laptop) stellt ein Python-Script eine serielle Verbindung her und wertet die empfangenen Daten aus.
Luftlinie HC05 zum Laptop ca. 3 Meter.
Zuvor gab es da eine Kabelverbindung (USB), diese war etwa 7 Meter lang und es war kompliziert das Kabel zu verlegen. Weil das "Ding" bei Messen eingesetzt wird und viele Menschen in unmittelbarer Nähe sind, wollten wir die Kabelverbindung durch Funk ersetzen.
Das Setup funktioniert seit einiger Zeit zuverlässig.
Der "Datendurchsatz" ist bei dieser Anwendung nicht soooo groß. Ob das für deine Anwendung reicht, musst du selbst herausfinden. Mein Setup würde auch noch bei doppeltem Datendurchsatz (also ein Datensatz alle 20 Millisekunden) zuverlässig funktionieren, das habe ich ausprobiert, das ist aber bei uns nicht nötig.
Die Stromversorgung hält zumindest 9 Stunden durch.
Ist die Verbindung so einfach, wie die Verbindung mit einem Bluetooth-Lautsprecher?
Eher nicht (aber soooo viel schwieriger ist es auch wieder nicht):
Ich muss den "richtigen" COM-Port wissen, um mich mit dem HC05 zu verbinden.
Ich brauche Software (am PC), die die empfangenen Daten auswertet und so weiter. Ich kann verfügbare Software verwenden, oder ich kann sie selbst schreiben (alle gängigen Programmier/Scriptsprachen können eine serielle Schnittstelle auslesen).
Die Verbindung zu einem Bluetooth-Lautsprecher hingegen ist um einiges einfacher herzustellen: Mit richtigem Modul verbinden und schon kann ich Musik abspielen.
Falls sich mein PC aber schon einmal erfolgreich mit einem HC05-Modul verbunden hat, geht es beim nächsten Mal höchstwahrscheinlich einfacher.
Zusätzliche Überlegungen:
Eine kabelgebundene Verbindung ist immer zuverlässiger als eine Funkverbindung. Aber manchmal ist das Verlegen von Kabeln schwierig bis unmöglich.
Gewünschte "Datenmenge" und Entfernung zwischen Sender und Empfänger sind wichtige Faktoren.
Ein ESP32 hätte bei meinem Projekt wohl auch funktioniert, aber beim Vorgängerprojekt war ein Nano im Einsatz und so war es einfacher den Nano um ein Bluetooth-Modul zu ergänzen und den Rest gleich zu lassen ("never change a running system")
Wow, vielen Dank für die ausführliche Antwort! Also das Produkt ist nun abgeschlossen und ich habe es bei dem HC-05 Modul belassen. Trotzdem Danke für deinen Vorschlag mit dem ESP32 und den Code.
Also falls dich der Kontext interessiert: Ich habe eine Lichtschranke an den Arduino angeschlossen.
Die Lichtschranke steht an einer Maschine und detektiert Werkstücke. Der Zweck des ganzen ist es die Taktzeiten der Maschine aufzunehmen.
Die Schaltsignale von der Maschine werden von dem Arduino verarbeitet und als Taktzeiten über das HC-05 an einen PC gesendet. Auf dem PC werden sie in Excel gestreamt und in mehr oder weniger Echtzeit in eine Tabelle automatisch geschrieben.
Super. Vielen Dank für deine ausführliche Antwort.
Klingt nach einem spannenden Projekt.
Ich habe jetzt in einer Anleitung ausführlich beschrieben, wie man das HC-05 Modul mit Windows 11 verbindet und die Datenverbindung herstellt. Also des müsste jetzt passen.
Bei mir müssen nur alle paar Sekunden eine Zahl übertragen werden, also da ist der Aufbau wie ich ihn jetzt habe denke ich ausreichend.
Hast du Erfahrungen, wie gut sich das HC-05 mit Windows 10 verbinden lässt. Muss ich bei dem Betriebssystem auch die Bluetooth-Einstellungen auf erweitert umstellen, um das HC-05 zu finden?