none
虛擬com port 收發藍芽訊號 RRS feed

  • 問題

  • 超級終端機可以用虛擬com port來傳輸藍芽訊號

    請問要怎麼寫這個程式?

    請大家給些建議

    謝謝

    2010年4月13日 上午 09:37

解答

所有回覆

  • 藍芽在電腦上本就是一個 virtual Com

    利用Serial Port 就可以做到通訊了

    2010年4月15日 上午 02:15
  • 所以

    在PC上寫法跟有線傳輸(UART)一樣即可?

    手機(WM6+VB)也可用一樣的方法嗎?

    謝謝

     

    2010年4月15日 上午 02:32
  • Bluetooth Programming with Windows Sockets

    http://msdn.microsoft.com/en-us/library/aa362928(VS.85).aspx

    Make Bluetooth Work for You: Build a Sample Chat Application

    http://www.devx.com/wireless/Article/11511/1954

    2010年4月15日 上午 02:38
  • WM6我不清楚沒用過

    VB 上就當成線傳輸(UART)就可以了

    不過

    因為藍牙有封包的問題

    所以

    有可能一個命令過去後

    會來會是好幾個封包

    所以要加上封包的解析在組合在一起

    不過我這裡指的試利用(SPP)的部份(不過看你可以利用終端機來使用,因該也是SPP 或是 SSPP吧)

    藍牙其他 服務我沒利用過所以就不請楚了

    2010年4月15日 上午 02:50
  • 感謝大家幫忙

    下面程式碼是我目前使用Chat Application做的測試程式碼

    想先做手機可以接收訊號

    不過..在updateMessageLog會出現錯誤

    請大家給些建議

    謝謝

     

    -----------------------------------------------------------------------

    Imports System.Runtime.InteropServices

    PublicClass Form1

       Dim infileHandler As Long

       Dim outfileHandler As Long

       Dim numReadWrite As Integer

       Dim t1 As System.Threading.Thread

       Dim stopThread AsBoolean = False

       Private Sub MenuItem3_Click(ByVal senderAs System.Object, ByVal eAs System.EventArgs) Handles MenuItem3.Click

           connect()              '第一步驟

       End Sub

       Public Sub connect()

           '---port number for Bluetooth connection

           Dim inPort AsShort = 6

           '---Opens the port for Bluetooth--INVALID_HANDLE_VALUE= -1

           infileHandler = CreateFile("COM" & inPort &":", _

                                       &H80000000, 0, 0, 3, 0, 0)

           Application.DoEvents()

     

           '---invoke the thread to receive incoming messages

           stopThread = False

           t1 = New Threading.Thread(AddressOf receiveLoop)

           t1.Start()

       End Sub

     

       Public Sub receiveLoop()

           '---receive the message through the serial port

           Dim inbuff(300) AsByte

           Dim retCode AsInteger = ReadFile(infileHandler, _

                                             inbuff, _

                                             inbuff.Length, _

                                             numReadWrite, _

                                             0)

           Application.DoEvents()

           While True

               If retCode = 0 Or stopThreadThen

                   '---either error or stop is requested

                   Exit While

               Else

                   Dim updateDelegate As New  _

                       myDelegate(AddressOf updateMessageLog)

     

                   updateDelegate.Invoke(byteArrayToString(inbuff))

                   ReDim inbuff(300)

                   retCode = ReadFile(infileHandler, _

                                      inbuff, _

                                      inbuff.Length, _

                                      numReadWrite, _

                                      0)

                   Application.DoEvents()

               End If

           End While

       End Sub

       Public DelegateSub myDelegate(ByVal strAs String)

       Public Sub updateMessageLog(ByVal strAs String)

           If str.Length > 0 Then

               TextBox2.Text += "-->" & str           'error

           End If

       End Sub

       Function byteArrayToString(ByVal b()As Byte) As String

           '---e.g. {a,b,c,d,e,f,g} to "abcdefg"

           Dim str AsString

           Dim enc As System.Text.ASCIIEncoding

           enc = New System.Text.ASCIIEncoding

           str = enc.GetString(b, 0, b.Length())

           Return str

       End Function

     

    2010年4月15日 上午 03:32
  • 網址範例裡讀和寫的COM port是兩個,您Mobile裝置的藍芽是同一個嗎...
    2010年4月15日 上午 04:32
  • 我是想先分開測試

    所以只留下讀取

    我把範例的改了...範例是7

    在我寫error那行在執行時會發生下面的錯誤訊息

    Control.Invoke 必須用來與不同執行緒所建立的控制項進行互動。

    不知道有沒有人試過?

    2010年4月15日 上午 05:48
  • 在updateMessageLog中

    原本我使用TextBox2看讀到的內容時,就會發生上述問題

    可是

    如果我用MsgBox先只看1個Byte

    就可以正常運作

    不知道這是啥原因?

    謝謝

    2010年4月19日 下午 11:10