Laden...

AT Befehle via Bluetooth an Handy schicken

Erstellt von m0m0 vor 15 Jahren Letzter Beitrag vor 15 Jahren 6.364 Views
M
m0m0 Themenstarter:in
60 Beiträge seit 2005
vor 15 Jahren
AT Befehle via Bluetooth an Handy schicken

Hi!

Ich möchte mein Handy (Samsung G800) über den PC fernsteuern. Dazu verwende ich einen virtuellen Serial Bus via Bluetooth.

Code benutze ich dazu folgenden:

using System;
using System.Windows.Forms;
using System.IO.Ports;

namespace BTtest
{
    public partial class Form1 : Form
    {
        SerialPort sPort;

        public Form1()
        {
            InitializeComponent();

        }

        void sPort_ErrorReceived(object sender, SerialErrorReceivedEventArgs e)
        {
            Console.WriteLine("error");
        }

        void sPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            Console.WriteLine("data received");

        }

        private void button1_Click(object sender, EventArgs e)
        {
            sPort = new SerialPort("COM19");
            
            sPort.DataReceived += new SerialDataReceivedEventHandler(sPort_DataReceived);
            sPort.ErrorReceived += new SerialErrorReceivedEventHandler(sPort_ErrorReceived);
            sPort.Open();
        }

        private void SendATCommand(string command)
        {
            byte endChar = (byte)Convert.ToChar(13);

            byte[] data = new byte[command.Length + 1];
            for (int i = 0; i < command.Length; i++)
            {
                data[i] = (byte)command[i];
            }
            data[command.Length] = endChar; // Append 'end command' character to command

            sPort.Write(data, 0, command.Length + 1); // ...send command.
            
        }

        private void button2_Click(object sender, EventArgs e)
        {
            SendATCommand("ATD+" + textBox1.Text + ";");
            
        }

        private void button3_Click(object sender, EventArgs e)
        {
            SendATCommand("AT+CBC");

        }


    }
}

Wenn ich auf Button1 drücke, wird die Verbindung hergestellt, das Display des Handys blinkt kurz auf, die Verbindung steht also.
Wenn ich dann Button2 drücke, wird mit dem Handy die Nummer angerufen, die in textBox1 steht (durch den Befehl "ATD+xxxxxxxxx;").

Soweit, sogut. Befehle senden geht also. Nur leider funktioniert das Empfangen nicht. Wenn ich z.B. Button3 drücke, wird eben der Befehl "AT+CBC" ans Handy geschickt, und das Handy sollte mir nun den Akkustand zurückschicken.
Leider wird der Eventhandler aber nie ausgelöst, also es wird nie ein Text vom Handy zurück an mein Programm geliefert und dementsprechend nie "data received" ausgegeben.

Grundsätzlich funktionieren tut es aber, denn mit dem Windows HyperTerminal funktioniert es. Ich starte das Programm, verbinde mit COM19, lasse die Standardeinstellungen und es kann losgehen:
Ich gebe

AT+CBC

ein, und im Hyperterminal kommt

+CBC: 0,85

OK

zurück. Nur in meinem C# Programm kommt leider nie etwas an. Woran könnte das liegen?
Muss ich irgend einen Zusatzbefehl ausführen, damit C# die Serielle Schnittstelle auslesen kann?

Lg,
Christian

M
m0m0 Themenstarter:in
60 Beiträge seit 2005
vor 15 Jahren

Hat denn noch niemand solche Probleme mit der seriellen Schnittstelle gehabt?

Es kann doch nicht sein, dass das Hyperterminal die Nachrichten empfängt aber meine C# Anwendung nicht.

Bitte helft mir, bin am verzweifeln.

N
12 Beiträge seit 2008
vor 15 Jahren

Hallo,ist ja mal genial.ich wollte genau das gleiche machen,bzw mache genau das gleiche,und hab das selbe problem.
mit hyperterminal funktioniert alles super.mein code empfängt nix.Obwohl:der code stimmt.

Was hast du für ein system?ich hab nen vista 64bit rechner,mit Visual studio 2008,da ist eben dieses problem.

Aber:Gleicher code,auf meinem Xp rechner mit VS 2005 funktioniert super!

Echt komisch.wär cool wenn wer die lösung kennt

888 Beiträge seit 2007
vor 15 Jahren

Häng mal am Ende Deines Befehls ein "\r\n" oder Environment.NewLine an,
vielleicht hilft das.

106 Beiträge seit 2006
vor 15 Jahren
funktioniert es jetzt ??

Funktioniert es mit dem anhängen von \r\n jetzt ??

N
12 Beiträge seit 2008
vor 15 Jahren

nein das bringt nichts.ich habe ja das gleiche problem.wie in meinem vorigen post geschrieben,geht es unter Xp mit VS 2005 problemlos,und vista mit VS 2008 löst das data_received event einfach nicht aus.

479 Beiträge seit 2008
vor 15 Jahren

Cool, das Problem hab ich auch. Kann man das irgendwie lösen, hab auch Vista und VCS 2008. Wäre echt nett, wenn da jemand ne' Antwort hätte!

[Follow me on Twitter](http://twitter.com/blendingsky)
N
12 Beiträge seit 2008
vor 15 Jahren

Hi!
Ich hab schon sooo viel gesucht,gegoogelt,Professoren auf meiner Fachhochschule gefragt....Und ich bin immer noch nicht weiter.Ich hab echt keinen Plan,über Hyperterminal gehts ja perfekt.Also muss es an .Net oder VS2008 oder was weiß ich liegen....Keine Ahnung.Die lösung wär echt super!!!

888 Beiträge seit 2007
vor 15 Jahren

Hast du es hiermit mal probiert?

Template SerialPort

Und dann nicht als Byte [], sondern als Text, z.b. "At help", "At uart", usw...

479 Beiträge seit 2008
vor 15 Jahren

Hallöle,
bei mir gehts so:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace BTtest
{
    public partial class Form1 : Form
    {
        SerialPort sPort;

        public Form1()
        {
            InitializeComponent();

        }

        void sPort_ErrorReceived(object sender, SerialErrorReceivedEventArgs e)
        {
            Console.WriteLine("error");
        }

        void sPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            Console.WriteLine(sPort.ReadLine());

        }

        private void button1_Click(object sender, EventArgs e)
        {
            sPort = new SerialPort("COM5");

            sPort.DataReceived += new SerialDataReceivedEventHandler(sPort_DataReceived);
            sPort.ErrorReceived += new SerialErrorReceivedEventHandler(sPort_ErrorReceived);
            sPort.Open();
        }

        private void SendATCommand(string command)
        {
            byte endChar = (byte)Convert.ToChar(13);

            byte[] data = new byte[command.Length + 1];
            for (int i = 0; i < command.Length; i++)
            {
                data[i] = (byte)command[i];
            }
            data[command.Length] = endChar; // Append 'end command' character to command

            sPort.Write(data, 0, command.Length + 1); // ...send command.

        }

        private void button2_Click(object sender, EventArgs e)
        {
            SendATCommand("ATD+" + textBox1.Text + ";");

        }

        private void button3_Click(object sender, EventArgs e)
        {
            SendATCommand("AT+CBC");

        }


    }
}
[Follow me on Twitter](http://twitter.com/blendingsky)
N
12 Beiträge seit 2008
vor 15 Jahren

Danke für die Antworten.

Wie das ganze funktionieren soll,das weiß ich ja.Wie gesagt auf meinem alten rechner mit XP und VS2005 funktioniert der Code wunderbar,nur auf dem Vista x64 System mit VS2008 geht es nicht....Obwohl:Im Hyperterminal geht es dort auch.

Also muss es an VS2008 oder .NET Framework liegen....Keine Ahnung.