Forum: PC-Programmierung Mit C# Applikation Daten per Bluetooth an Mikrocontroller schicken


von Bluetooth (Gast)


Lesenswert?

Hallo Leute.

Ich habe ein kleines oder auch großes Problem.

Ich möchte über einen Laptop mit Hilfe einer mit VS2013 erstellten 
Applikation Daten über das Bluetoothmodul im Laptop an ein 
Bluetoothmodul am Mikrocontroller schicken.

Diese Verbindung funktioniert super über "Hterm" und bei Richtigen 
übertragenen Zeichen macht der Mikrocontroller auch das was er soll. 
Also soweit ist alles super.
Nun kommt meine Applikation ins Spiel:
Es soll möglich sein Durch drücken bestimmter Button:
1. Den serialPort zuöffnen
2. Daten zusenden, welche fest hinterlegt sind (Button X --> 
Mirkocontroller macht X)
3. serialPort schließen

Ich habe mir den serialPort aus dem Werkzeugkasten in mein Fenster 
gezogen und Konfiguriert mit den Angabe, welche auch bei "Hterm" 
funktionieren (Baudrate und COM7)
1
private void Init_Button_Click(object sender, EventArgs e)
2
        {
3
            if(!serialPort1.IsOpen)
4
            {
5
                serialPort1.Open();
6
            }
7
         }
mit dieser Funktion öffne ich den serialPort richtig? Dazu muss mein 
Laptop aber mit dem Bluetoohtmodul des Controllers gekoppelt sein oder?
Hier liegt denke ich mein größtes Probelm da immer wieder die Meldung 
kommt das auf den Port nicht zugegriffen werden kann. Wenn ich das Gerät 
vorher nicht koppel kommt die Meldung das der Port nicht verfügbar ist 
was ja auch Korrekt ist.
1
private void Close_Button_Click(object sender, EventArgs e)
2
        {
3
            if(serialPort1.IsOpen)
4
            {
5
                serialPort1.Close();
6
            }
7
         }
Zum schließen vom serialPort.
1
private void Send_Button_Click(object sender, EventArgs e)
2
        {
3
            if(serialPort1.IsOpen)
4
            {
5
               string text = "5";
6
               serialPort1.Write(text);
7
            }
8
         }
Zum Senden von Werten.

Danke im vorraus für die Hilfe!!

MFG.

von Ralf (Gast)


Lesenswert?

Hi,

im Prinzip soll dein Programm das machen, was du vorher manuell gemacht 
hast. Wie du erkannt hast, gehört dazu dann wohl eben auch das Koppeln. 
Wie das unter C# geht, sollte dir Gockel verraten können. Vielleicht 
wäre das schon hilfreich:
http://stackoverflow.com/questions/11191332/is-there-any-way-to-pair-bluetooth-device-in-windows-programmatically
https://msdn.microsoft.com/en-us/library/windows/desktop/aa362927%28v=vs.85%29.aspx

Was den seriellen Port betrifft, es bietet sich an, nach dem Herstellen 
der BT-Verbindung herauszufinden, auf welchem COM-Port das Device 
tatsächlich liegt, eine feste Vergabe der Portnummer sollte vermieden 
werden (das kannst du aber auch später im Rahmen von Feintuning 
implementieren).

Und zu guter Letzt, ich sehe keinen Sinn darin den Port zu öffnen, die 
Daten abzufeuern und den Port danach wieder zu schließen - üblicherweise 
bleiben serielle Verbindungen so lange offen, bis das Programm beendet 
wird (oder sich beispielsweise das BT-Gerät abmeldet).

Ralf

von Bluetooth (Gast)


Lesenswert?

Danke Ralf;) genau das ist es;) naja das war jez nur ein kleiner 
ausschnitt das close wird auch später das schließen der applikation 
beinhalten.. Danke für deime tipps den ansatz hatte ich nicht so richtig 
aufm schirm;)
Vill meldet sich Gockel ja noch dadrauf ansonsten werde ich morgen 
erstmal deine tipps befolgen;)

von Bluetooth (Gast)


Lesenswert?

Kann mir hier niemand weiter helfen?

von Arc N. (arc)


Lesenswert?

Bluetooth schrieb:
> Kann mir hier niemand weiter helfen?

Was sind denn im Moment die Probleme?

Eins könnte sein, dass die Voreinstellung des SerialPorts für das 
Encoding von Strings per default 7 Bit-ASCII ist. Abhilfe:
serialPort1.Encoding = Encoding.GetEncoding(28591);

Ein anderes könnte das Pairing sein:
http://stackoverflow.com/questions/16802791/pair-bluetooth-devices-to-a-computer-with-32feet-net-bluetooth-library

Ohne Library wäre in den meisten Fällen ein Abstieg in die 
Win32-Niederungen fällig:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa362932%28v=vs.85%29.aspx

Ab Windows 8.1 (?) gäbe es auch entsprechende Funktionen des 
Betriebssystems bzw. der Windows Runtime.
https://msdn.microsoft.com/en-us/library/windows/apps/xaml/dn264587.aspx
Allerdings sind diese Funktionen, so weit ich das sehen kann 1), nur 
Windows Store-Anwendung zugänglich...

1) 
https://msdn.microsoft.com/en-us/library/windows/desktop/hh920511%28v=vs.85%29.aspx#windows_runtime_classes

von K. Lauer (Gast)


Lesenswert?

Arc Net schrieb:
> Ab Windows 8.1 (?) gäbe es auch entsprechende Funktionen des
> Betriebssystems bzw. der Windows Runtime.
> https://msdn.microsoft.com/en-us/library/windows/a...
> Allerdings sind diese Funktionen, so weit ich das sehen kann 1), nur
> Windows Store-Anwendung zugänglich...

Man kann das alles auch in Desktopanwendungen benutzen (sowohl per .NET 
als auch "nativ" über die ABI-Namespaces oder C++/CX). Habe ich auch 
schon in einer simplen Konsolenanwendung so gemacht.
Allerdings würde ich - außer in wenigen speziellen Fällen und Store-Apps 
- nicht alles < Windows 8 von der Verwendung der Software ausschließen 
wollen ...

von Horst S. (Gast)


Lesenswert?

Wann genau kommt die Fehlermeldung, dass auf den Port nicht gegriffen 
werden kann? Beim Schreiben oder beim Öffnen?

Hast Du Dein Terminalprogramm vorher geschlossen (gleicher SerialPort 
lässt sich nicht mit verschiedenen Prozessen öffnen) und alle 
abgeschmierten Instanzen Deiner Applikation aus dem Taskmanager entfernt 
(manchmal hilft nur ein Reboot)?

von Bluetooth (Gast)


Lesenswert?

Vielen Dank für eure hilfe;) da ich nicht wirklich weiter kam habe ich 
eben den tipp von horst befolgt.. und es einfach noch mal probiert.. und 
siehe da alle Probleme lösen sich in wohl gefallen auf;) Aber trotzdem 
ein riesen dank an diese Community. hab das Problem auch in anderen 
foren erörtert dort habe ich noch nicht mal eine antwort bekommen;)

von Arc N. (arc)


Lesenswert?

K. Lauer schrieb:
> Man kann das alles auch in Desktopanwendungen benutzen (sowohl per .NET
> als auch "nativ" über die ABI-Namespaces oder C++/CX). Habe ich auch
> schon in einer simplen Konsolenanwendung so gemacht.
> Allerdings würde ich - außer in wenigen speziellen Fällen und Store-Apps
> - nicht alles < Windows 8 von der Verwendung der Software ausschließen
> wollen ...

Etwas OT: Gut zu wissen. Werde ich bezeiten mal ausprobieren.
Auf der verlinkten Seite liest sich das so als ob nur dieser API-Teil 
von "klassischen"-Desktop-Anwendungen aus nutzbar wäre und der restliche 
Teil nicht:
"These are the API elements for use in desktop apps that are new for 
Windows 8 and Windows 8.1:"
und "For info about the APIs that can be used in Windows Store apps, see 
APIs for Windows Store apps"

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.