一、問題描述

因公司硬體需求,將產品改良後,由原先的藍芽連線方式,
加入了無線網路wifi 的方式接收訊息~

如何先透過藍芽自動與電腦建立好連線後,
再透過藍芽下指令給產品硬體端,
接續藍芽再與無線wifi 建立好連線,
最後再由無線AP端來接訊號~

 

二、新接觸到的網管軟體

 

因為我對於網路方面的知識非常的『弱~』,
所以一直想逃丫~
透過google大神搜尋了相關資訊,
有小小閱讀障礙的我仍是想投降~
想說:『我可否不要去接觸到網路嗎?』

但又因為和我一同奮鬥的伙伴最近休假,
只好我先硬著頭皮來了解此區塊,
以防到時來不及交差~


真的,是用拼湊的方式先了解與先把一個初步的架構弄出來~
因此,也學了一點東東啦~

先來介紹學到的軟體

1. Docklight (此軟體可直接透過藍芽的方式去做測試)

  docklight_介面1

  (此為試用版,缺點是所輸入的測試指令等重開機後,每次都得再重新輸入)
  (或您亦可先複製存在文字檔內,到時再用貼上的方式,可省一些重覆輸入之時間)

  docklight_介面1

  docklight_介面2

  設定藍芽所連結到的port,方便到時溝通使用。

  docklight_介面3  

  設定指令(※ 平時用的大多為十進制(Decimal)有英文字的部份需改用(ASCII)來編碼)
  依您個人的需求去選擇您指令要以什麼樣的編碼模式去執行
  (所以這部份亦需先了解硬體方面的設計模式喔~)

  docklight_介面4_新增指令

  輸入完成後的指令頁面,到時可按指令名稱前方的『-->』進行執行的動作。

   docklight_介面5_指令   

  執行後,右方空白處,會顯示您所傳入的指令/接收到的硬體回應訊息等資訊。

  docklight_執行後顯示畫面  

2. Wireshark (此軟體可用來監看網路封包的傳遞情形)

  wireshark_圖示

  啟動wireshark軟體,啟動前需先選擇您要監看的網路
  如:藍芽 或是 區域連線

 

  wireshark_初始畫面

  啟動後,在同一網域區段皆會顯示監聽結果,
  雙按有興趣的部份可再進一步的去看他傳送或接收到的封包。
  若
  顯示監看的連線太多時,
  可再透過filter 來篩選要看的條件,
  如:在此,我想看協定protocol為UDP的部份,
  且UDP的連接埠為8888
  則我會於filter  指令部份下『udp.port == 8888』,
  來進行篩選動作。

  wireshark_執行畫面  

三、方法

1. C# 藍芽連線

  //連接藍芽
  ports = SerialPort.GetPortNames();
  serialPort = new SerialPort();
  serialPort = new SerialPort("COM11", 115200, Parity.None, 8, StopBits.One);
  serialPort.Open();

2. C# 透過藍芽下指令給硬體

  byte[] bt_apinfoCmd = { 008, 049, 050, 051, 052, 053, 054, 055, 056, 0 };
  serialPort.Write(bt_apinfoCmd, 0, 10); //下指令RX     (PC傳送給BT藍芽)
  serialPort.Read(bt_rev, 0, 3);     //接收指令TX  (藍芽回送給PC訊息)

3. C# wifi無線部份

  網路上有許多大家已寫好的方式可參考,
  此部份需先建立好socket,
  與連上網路,
  最後才能獲得我要的資料。

  宣告
  using System.Net;
  using System.Net.Sockets;

  程式部份
  //Setting IPEndpoint
  IPEndPoint IPEnd = new IPEndPoint(IPAddress.Any, socket_port);
  //IPEndPoint IPEnd = new IPEndPoint(IPAddress.Parse("127.0.0.70"), socket_port);
  Socket Client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  需看您的傳輸模式是用TCP或UDP,在此設定會有點差異。

//Binding Endpoint
Client.Bind(IPEnd);
EndPoint IP = (EndPoint)IPEnd;
int m_RecieverBuffer = 1024; //若設定太小會有問題喔~
byte[] m_getdata = new byte[m_RecieverBuffer];
string input;

   while (true)
   {
    try
    {
      recv = Client.ReceiveFrom(m_getdata, ref IP);

      input = Encoding.UTF8.GetString(m_getdata, 0, recv); //把接收的byte資料轉回string型態

      。。。。。。
    }
           catch (Exception ex)
    {

      throw;
    }
   }

以上大概為我的解決方式囉~供自己記錄一下學習的狀況。
  

arrow
arrow

    HuangJung1216 發表在 痞客邦 留言(0) 人氣()