Unity3D, USB 連接筆記

Unity3D, USB 連接筆記

[準備部份]

這陣子需要用到於 Unity3D 中連接上 USB 的版子相關的文件不太清晰自己摸索著的心得筆記一下.

由於 USB Device 需要用到 Vid(VendorID), Pid(ProductID) 等的參數用作 search index.
所以第一步是清楚自己所用的 device 上的廠商寫入參數
name, type….etc

於網上下載 USB Device viewer, 目前推薦 

執行後會列出電腦上有記錄過的 USB device 清單.

Unity3d USB

然後 Find 到自己需要的 USB Device. 取得詳細的 Info. (注: demo 軟件輸出為 HTML report).

Unity3d USB002

找裡頭的 Vid, Pid 等參數抄錄一下, 等一下程序上需要以 Vid, Pid 作為 search index 的指標.

 

[程序部份]

回到 Unity3D 的 editor 上, 由於目前沒有手段可以直接由 Unity3D 直接連線到其他 USB device, 我們可以利用外部程序達成, 於 Window 的平台上可以利用到坊間編譯好的 3Party 的外部檔.

這一次我選用這個 

(估計使用率還頗高的)

注 : 其實廠家若有提供 command line 的執行方式也可以用 System.Diagnostics 中的 Process 來執行外部 “.exe, .bat….etc” 的執行喇.

於 Unity3D 的 project\asset 中把 USBHIDDRIVER.dll 放進 /Plugins 中.

using USBHIDDRIVER;
using USBHIDDRIVER.USB;
using USBHIDDRIVER.List;

public class TestUSB : MonoBehaviour
{
	Awake()
	{
		// USBInterface _usbi = new USBInterface("0"); // all device ?
		USBInterface _usbi = new USBInterface(0201,0050); // when your device's vid = 0201, pid = 0050
		string[] _list=new string[0];
		if( ReferenceEquals(null,_usbi) )
		{
			Debug.LogWarning("UNIS Device can not found.");
		}
		else
		{
			_list = _usbi.getDeviceList();
			Debug.Log("UNIS Device found.\n >> "+ string.Join(",",_list) );
		}
	}
}

以上為 Unity3d 初步的 USB 建立方式.


在試了坊間能找到的 4,5 個 library 之後, 還是決定自己寫好了…..

主要總結的有以下幾點注意事項.

  1. usb 靠 vid, pid 與硬體通訊
  2. 由 pc 發出 usb 數據時(write), byte[] 的第一個是字節是 report ID, 即使硬體不支援,
    第一個字節也需付加 空的 byte 意思是如果需要發出 byte[64] 你需要於 array 開端增加一個 0x00
    使之變成 byte[65] 使後送出, 否則於 window 平台的情況下本次通訊不能成功.你的硬體只會收到 byte[63] 字節
    ReportID 的定義 : USB Reference ReportID
  3. 留意 treading 的 abort

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料