Da die Methode der seriellen Kommunikation unter Android nicht so häufig eingeführt wird, werde ich sie beschreiben.
Android REX-USB60MB (USB-serielle Konvertierung)
Android6.0 AndroidStudio Kotlin
Klicken Sie auf der FTDI-Website ** hier ** im Abschnitt ** Java D2XX-Update einschließlich FT4222H-Unterstützung **, um die Bibliothek herunterzuladen. FTDI-Homepage
Entpacken Sie die heruntergeladene komprimierte Datei
Verwenden Sie nur die Datei ** d2xx.jar ** im Ordner ** root **. ** device_filter.xml ** im Ordner ** res / xml / ** ist alt, erstellen Sie es also, ohne es zu verwenden.
Klicken Sie oben im Projektbaum auf das ▼ rechts mit der Aufschrift ** Android ** und wählen Sie ** Projekt ** aus der angezeigten Liste aus. Dann unterscheidet sich die Baumanzeige von der vorherigen.
Fügen Sie d2xx.jar per Drag & Drop zu ** app / libs ** hinzu. Klicken Sie mit der rechten Maustaste auf die hinzugefügte Datei d2xx.jar und führen Sie ** Zur Bibliothek hinzufügen ** aus. Die zusätzliche Operation fügt nur ** Implementierungsdateien ('libs / j2xx.jar') ** zu build.grade (app) hinzu. Wenn die Bibliothek nicht mehr benötigt wird, löschen Sie diese Zeile und löschen Sie libs / j2xx.jar, um sie wiederherzustellen.
Wenn Sie d2xx.jar zur Bibliothek hinzugefügt haben, klicken Sie rechts auf ▼, um zu ** Android ** zurückzukehren, dem obersten ** Projekt ** im Projektbaum.
In Androidmanifest.xml
manifest.xml
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<meta-data
android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
</activity>
Richten Sie das USB-Gerät auf diese Weise ein. Ich benutze nicht ** @ xml / device_filter **, sondern nur für den Fall.
sample.kt
var mFTDIManager = D2xxManager.getInstance(this.context)
var deviceCount = mFTDIManager?.createDeviceInfoList(this.context) ?: 0
Überprüfen Sie, ob diese beiden Zeilen erkannt werden können. Da ** deviceCount ** die Anzahl der erkannten Geräte ist, ist es erfolgreich, wenn 1 oder mehr eingegeben werden.
Wie Sie sehen können, wer das Beispiel zum Laufen gebracht hat, erkennt das Beispiel REX-USB60MB nicht. Der Grund für die Nichterkennung liegt in der Datei ** device_filter.xml **, die ich abgebrochen habe, weil sie alt war.
device-filter.xml
<usb-device vendor-id="1412" product-id="45088" /> <!-- REX-USB60F -->
Wie kommentiert, ist ** REX-USB60F ** registriert, ** REX-USB60MB ** jedoch nicht. Warum also nicht REX-USB60MB hier definieren? Ich dachte, aber das würde es unpraktisch machen, das High-End-Modell ** RS-USB60FC ** und ** REX-USB60MI ** für Tablets zu verwenden, da es erneut geändert werden müsste.
Also werde ich versuchen, das angeschlossene serielle Kommunikationsgerät zu erkennen und zu verwenden.
comm.kt
var usbDevice = mutableMapOf<String,Any>()
var usbDeviceList : MutableList<MutableMap<String,Any>> = mutableListOf()
val manager = getSystemService<UsbManager>(context, UsbManager::class.java)
usbDeviceList.clear()
if (manager == null) return
for(item in manager.deviceList) {
val device: UsbDevice = item.value
val str : String = device.manufacturerName ?: ""
val vid = device.vendorId
val pid = device.productId
usbDevice = mutableMapOf("vid" to vid,"pid" to pid ,"key" to item.key,"name" to str)
usbDeviceList.add(usbDevice)
mFTDIManager?.setVIDPID(vid,pid)
}
USB-Geräte scheinen zu funktionieren, wenn Sie ** Vendor ID ** und ** Product ID ** kennen. Es ist also in Ordnung, wenn Sie sie erhalten können, aber ich mache mir Sorgen, wenn ich nicht weiß, was das Gerät ist, also erhalte ich auch ** ManufacturerName ** Ich versuche es zu tun.
Das Gerät, das Sie verwenden möchten, wird nicht erkannt. Registrieren Sie es daher manuell.
sample.kt
var mFTDIManager = D2xxManager.getInstance(this.context)
mFTDIManager?.setVIDPID(1412,45115)
var deviceCount = mFTDIManager?.createDeviceInfoList(this.context) ?: 0
Sie können die Erkennung erzwingen, indem Sie ** VendorID ** und ** ProductID ** im Argument von ** setVIDPID ** übergeben. Wenn der Wert von ** deviceCount ** 1 oder mehr ist, ist dies erfolgreich.
Recommended Posts