Ich entwickle eine C# Windows Forms-Anwendung, um über eine Bluetooth-Verbindung mit einem Raspberry Pi Model 3 zu kommunizieren. Diese Verbindung wird über eine virtuelle serielle Schnittstelle auf dem Clientcomputer simuliert. Ich bin in der Lage, eine Bluetooth Verbindung innerhalb des C# Programms zu beginnen, aber ich kann keine Daten vom Programm empfangen. Wenn ich das Programm Putty benutze, kann ich sehen, dass die Daten auf dem COM Port so übertragen werden, wie ich es möchte.C# -Anwendung empfängt keine seriellen Datenströme
Ich entdeckte auch eine seltsame Art von Glitch mit dem C# -Programm. Wenn ich den COM-Port auf Putty öffnen und dann das C# -Programm starten, wird mit dem Befehl port.open() ein Fehler auftreten, da der Port reserviert ist. Wenn ich also Putty schließe und die C# -Anwendung fortsetze, strömen die Daten perfekt zum Programm. Ist jemand schon einmal auf dieses Problem gestoßen? Ich habe jetzt ein paar Tage verloren. Der Kodex in meinem Programm ist unten dargestellt:
using System;
using System.IO.Ports;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Forms;
using InTheHand.Net;
using InTheHand.Net.Sockets;
using InTheHand.Net.Bluetooth;
using System.Threading;
namespace GUIfromPI
{
static class Program
{
//PC BT USB adapter
private static BluetoothEndPoint EP = new BluetoothEndPoint(BluetoothAddress.Parse("##:##:##:##:##:##"), BluetoothService.BluetoothBase); //addressing the usb adapter used on the PC (endpoint)
private static BluetoothClient BC = new BluetoothClient(EP);
//Pi BT Adapter
private static BluetoothDeviceInfo BTDevice = new BluetoothDeviceInfo(BluetoothAddress.Parse("##:##:##:##:##:##")); //addressing the BT adapter on the Rasperry Pi
// private static NetworkStream stream = null;
public static SerialPort mySerialPort = new SerialPort(); //Bluetooth module mimics serial protocol by streaming data through the COM5 port in the host80 computer
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
public static void Main(string[] args)
{
Console.WriteLine("Executing Program...");
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (BluetoothSecurity.PairRequest(BTDevice.DeviceAddress, "1234"))//MY_PAIRING_CODE))
{
Console.WriteLine("PairRequest: OK");
if (BTDevice.Authenticated)
{
Console.WriteLine("Authenticated: OK");
BC.SetPin("1234");//pairing code
//BC.BeginConnect(BTDevice.DeviceAddress, BluetoothService.SerialPort, new AsyncCallback(Connect), BTDevice);
}
else
{
Console.WriteLine("Authenticated:No");
}
}
else
{
Console.WriteLine("PairRequest: No");
}
//mySerialPort = new SerialPort("COM5");
SerialThreadFunction();
}
public static void SerialThreadFunction()
{
mySerialPort.PortName = "COM10";
mySerialPort.BaudRate = 9600;
mySerialPort.Parity = Parity.None;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.None;
mySerialPort.DtrEnable = true;
mySerialPort.RtsEnable = true;
mySerialPort.ReadTimeout = 100000;
mySerialPort.Open();
//mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
string mydata = "hello";
while (true)
{
Console.WriteLine(mySerialPort.ReadLine());
mydata = mySerialPort.ReadLine();
}
mySerialPort.Close();
}
private static void DataReceivedHandler(
object sender,
SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.WriteLine("Data Received: ");
Console.Write(indata);
}
}
}
UPDATE: ich, dass gerade entdeckt, erklärt mein Bluetooth Endpoint, Client und Gerät stört mit dem Lesen von meiner seriellen Schnittstelle. Da die Bluetooth-Verbindung bereits zuvor initialisiert wurde, konnte ich die Daten auf dem Port sehen. Nun, warum tut es das?
Wenn jemand nicht dazu kommt, halten Sie sich für eine Antwort von mir später heute fest. – Snoopy
Das wäre erstaunlich. Vielen Dank! – Frankn