Hallo liebe Leute,
ich versuche mittels eines ESP32 Daten per Bluetooth zu meinem Win10
Laptop auf ein Python Programm zu senden.
(Nur damit sich niemand angegriffen fühlt, ich habe das Thema im Arduino
Forum bei einer anderen Frage auch schon gestellt, leider aber keine
Antwort erhalten- also sorry für den "crosspost"- bin aber ziemlich
verzweifelt)
Am ESP32 läuft einfach ein Testscatch:
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
5
#endif
6
7
BluetoothSerial SerialBT;
8
9
void setup() {
10
Serial.begin(115200);
11
SerialBT.begin("ESP32test"); //Bluetooth device name
12
Serial.println("The device started, now you can pair it with bluetooth!");
13
}
14
15
void loop() {
16
if (Serial.available()) {
17
SerialBT.write(Serial.read());
18
}
19
if (SerialBT.available()) {
20
Serial.write(SerialBT.read());
21
}
22
delay(20);
23
}
Ich bekomme auch eine Verbindung zu Stande und sehe die com ports.
Wenn ich einen Bluetooth Terminal am Laptop oder das Handy verwende kann
ich auch ganz normal kommunizieren.
Ich würde gerne aber per Python mit dem ESP32 kommunizieren.
Dort funktioniert zwar das senden an den ESP32 aber leider kann ich
keine Daten empfangen.
Hier der Python code (Verwende Pycharm):
1
import serial
2
3
ser1 = serial.Serial('COM4') # open serial port
4
print(ser1.name) # check which port was really used
5
ser1.write(b'hello') # write a string
6
ser2 = serial.Serial('COM3') # open serial port
7
if (ser2.isOpen()):
8
try:
9
while(1):
10
print(ser2.read())
11
except Exception:
12
print("error")
13
14
ser1.close()
15
ser2.close()
auch sehe ich, dass unter den BT Einstellungen am Laptop, nur beim
COM4SPP dabei steht und beim COM4 nicht- kann das was damit zu tun haben
oder ist das normal?
Danke schon mal an alle die so nett sind mir zu Helfen!
Schönen Tag euch...
mfg
Du sendest in deinem python Programm zuerst 'hello', dann öffnest du den
anderen Port zum Empfang und wartest auf Antwort.
Vielleicht hast du die Antwort bis dahin schon verpasst.
Ich würde zuerst beide Ports öffnen und erst dann kommunizieren.
Verwendet Python eigentlich einen Empfangspuffer? Wenn nicht, musst du
zwei Threads parallel laufen lassen, damit dein Programm während des
Sendens auch empfangen kann.
Steve van de Grens schrieb:> Du sendest in deinem python Programm zuerst 'hello', dann öffnest du den> anderen Port zum Empfang und wartest auf Antwort.>> Vielleicht hast du die Antwort bis dahin schon verpasst.
Ich muss die Antwort am ESP32 erst im Seriel Monitor eingeben und auf
senden drücken, also glaub ich nicht, dass ich was versäumen kann.
>> Ich würde zuerst beide Ports öffnen und erst dann kommunizieren.> Verwendet Python eigentlich einen Empfangspuffer? Wenn nicht, musst du> zwei Threads parallel laufen lassen, damit dein Programm während des> Sendens auch empfangen kann.
Was meinst du mit Empfangsbuffer?
Hättest du eine Erklärung?
Danke
mfg
Hqwer schrieb:> Ich muss die Antwort am ESP32 erst im Seriel Monitor eingeben
Dein Quelltext zeigt, dass dein python Programm auf einem seriellen port
sendet, und auf dem anderen empfängt.
Ist dein serieller Monitor an einen dritten seriellen Port
angeschlossen? Irgendwie passt das nicht zu deinem Sketch, denn der
benutzt nur zwei Port (UART und Bluetooth). Kannst du mal skizzieren,
wie du das alles miteinander verbunden hast (bitte auch die BT
Verbindung einzeichnen)?
> Was meinst du mit Empfangsbuffer?> Hättest du eine Erklärung?
In einem Empfangspuffer werden Daten abgelegt, die ein Gerät empfängt.
Sie können dann später vom Programm verarbeitet werden. Allerdings
werden diese Puffer beim öffnen des Portes normalerweise geleert, damit
man keine Alten Daten verarbeitet die sich dort vor dem Programmstart
angesammelt haben.
Hm vlt hohle ich mal aus:
Der ESP32 ist mit der Arduino IDE Programmiert
Dort gibt es ja den Seriellen Monitor, wo ich mir ausgeben lasse (wie im
Sketch oben) was ankommt
was raus geht, gebe ich dort in dem Seriellen Monitor ein und sende es
Dieser ist die Verbindung von Arduino IDE am PC zum ESP32 per USB-C.
Wie schon gesagt, kann ich mit dem PC eine BT Verbindung zum ESP32
aufbauen, also die Geräte sind gekoppelt.
Wenn ich am Win10 in den "Weiteren Bluetooth Optionen" nachsehe, dann
werden mir dort 2 Com Ports angezeigt (Anhang).
Hab ein einfaches Bild gezeichnet, weiß aber nicht ob das hilft (sehr
rudimentär, da ich nicht wusste was du genau haben willst)
Komisch ist, dass wenn ich für die kommunikation sowas wie "tera term"
(Programm aus Internet) nutze, kann ich senden und empfangen, jedoch
läuft das dort alles über einen Com Port.
Ok wusste nicht das der Puffer immer geleert wird beim öffnen der
verbidnung.
Aber wie gesagt, in der arduino IDE welche einen Seriellen Monitor zum
Anzeigen der Sachen vom ESP32 hat, muss ich einen Button betätigen zum
senden der Nachricht.
Danke für deine Antworten und Hilfe!
Die einzigen Infos hinsichtlich Python-ESP32 BT im Internet sind mit der
"Pybluez" Lib von Python verbunden, welche ich aber nicht installiert
bekomme.
Weder Pycharm noch mit pip.
Mfg
Da "tera term" nur über einen Poart senden, ahbe ich in meine Python
Programm jetzt zwei mal den Ausgehenden Port verwendet, zum senden und
lesen und es funktioniert.
Warum öffnet BT einen Port für Ausgehen und einen für Eingehend wenn
dann alles nur über den Ausgehenden Port läuft?
mfg
Hallo nochmals,
Könnte das jemand mit einem es32 und der board manager version 1.0.4
testen?
Bei mir is (SerialBT.connected()) immer true auch wenn ich nichts
verbunden habe.
Jemand eine idee was da los sein könnte?
1
#include "BluetoothSerial.h"
2
3
BluetoothSerial SerialBT;
4
5
void setup() {
6
Serial.begin(115200);
7
SerialBT.begin("ESP32test"); //Name des ESP32
8
Serial.println("Der ESP32 ist bereit. Verbinde dich nun über Bluetooth.");
Hqwer schrieb:> version 1.0.4
Bist du sicher, dass du die Version 1.0.4 verwendest? Die wäre von
Oktober 2019. Die relevante Codestelle wurde zuletzt vor 9 Monaten
geändert.
In 1.0.4:
Hqwer schrieb:> Warum öffnet BT einen Port für Ausgehen und einen für Eingehend wenn> dann alles nur über den Ausgehenden Port läuft?
Woher hast du das mit Ausgehend und Eingehend? Mir scheint der eine
serielle Port der SPP-Port zu sein, und der andere ist evtl. ein
RAW-Port oder so ...
LG, Sebastian