[JAVA] Utiliser la communication série sur Android

introduction

Étant donné que la méthode de communication série avec Android n'est pas tellement introduite, je vais la décrire.

Dispositif cible

Android REX-USB60MB (conversion USB-série)

Environnement cible

Android6.0 AndroidStudio Kotlin

Télécharger

Depuis la page d'accueil FTDI, cliquez ** ici ** dans la section ** Mise à jour Java D2XX incluant le support FT4222H ** pour télécharger la bibliothèque. Page d'accueil FTDI

Décompressez le fichier compressé téléchargé

Utilisez uniquement le fichier ** d2xx.jar ** situé dans le dossier ** root **. ** device_filter.xml ** dans le dossier ** res / xml / ** est ancien, alors créez-le sans l'utiliser.

Ajouter d2xx.jar à la bibliothèque

Cliquez sur ▼ à droite qui dit ** Android ** en haut de l'arborescence du projet et sélectionnez ** Projet ** dans la liste qui apparaît. Ensuite, l'arborescence sera différente de la précédente.

Ajoutez d2xx.jar à ** app / libs ** par glisser-déposer. Cliquez avec le bouton droit sur le fichier d2xx.jar ajouté et exécutez ** Ajouter à la bibliothèque **. L'opération supplémentaire ajoute uniquement des ** fichiers d'implémentation ('libs / j2xx.jar') ** à build.grade (app). Si la bibliothèque n'est plus nécessaire, supprimez cette ligne et supprimez libs / j2xx.jar pour la récupérer.

Lorsque vous avez terminé d'ajouter d2xx.jar à la bibliothèque, cliquez sur ▼ à droite pour le renvoyer à ** Android **, qui est le ** projet ** le plus élevé dans l'arborescence du projet.

Prêt à utiliser un périphérique USB

Dans 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>

Configurez pour utiliser le périphérique USB de cette manière. Je n'utilise pas ** @ xml / device_filter **, mais juste au cas où.

Vérifiez s'il est reconnu

sample.kt


        var mFTDIManager = D2xxManager.getInstance(this.context)
        var deviceCount = mFTDIManager?.createDeviceInfoList(this.context) ?: 0

Vérifiez s'il peut être reconnu par ces deux lignes. Puisque ** deviceCount ** est le nombre d'appareils reconnus, il réussit si 1 ou plus est entré.

REX-USB60MB n'est pas reconnu

Comme vous pouvez voir qui a fait fonctionner l'exemple, l'exemple ne reconnaît pas réellement REX-USB60MB. La raison pour laquelle je ne l'ai pas reconnu est dans le fichier ** device_filter.xml ** que j'ai abandonné car il était ancien.

device-filter.xml


	<usb-device vendor-id="1412" product-id="45088" /> <!-- REX-USB60F -->

Comme commenté, ** REX-USB60F ** est enregistré, mais ** REX-USB60MB ** ne l'est pas. Alors pourquoi ne pas définir REX-USB60MB ici? J'ai pensé, mais cela ne rendrait pas pratique l'utilisation du modèle supérieur ** RS-USB60FC ** ou ** REX-USB60MI ** pour les tablettes, car il faudrait le changer à nouveau.

Je vais donc essayer de reconnaître le périphérique de communication série connecté et de l'utiliser.

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)
        }

Les périphériques USB semblent fonctionner si vous connaissez ** Vendor ID ** et ** Product ID **, donc ce n'est pas grave si vous pouvez les obtenir, mais je suis inquiet si je ne sais pas ce qu'est l'appareil, donc j'obtiens également ** ManufacturerName ** J'essaye de le faire.

Enregistrer l'appareil à utiliser

L'appareil que vous souhaitez utiliser n'est pas reconnu, donc enregistrez-le manuellement.

sample.kt


        var mFTDIManager = D2xxManager.getInstance(this.context)
        mFTDIManager?.setVIDPID(1412,45115)
        var deviceCount = mFTDIManager?.createDeviceInfoList(this.context) ?: 0

Vous pouvez le forcer à être reconnu en passant ** VendorID ** et ** ProductID ** dans l'argument de ** setVIDPID **. Si la valeur de ** deviceCount ** est égale ou supérieure à 1, l'opération réussit.

Site de référence

Site de référence

Recommended Posts

Utiliser la communication série sur Android
Utiliser le code natif sur Android
[Étude gratuite pour adultes] Communication acoustique avec Android
Essayez la communication en utilisant gRPC sur un serveur Android + Java
Utiliser perltidy sur CentOS 8
[Android] Notes sur xml
Utilisez mod_auth_cas sur CentOS 8
Utiliser Corretto 11 avec Heroku
Utiliser cpplapack avec ubuntu
[Android Studio] Je souhaite utiliser une bibliothèque Maven sur Android
Bibliothèque de transmission en plusieurs parties sur Android
Comment utiliser OpenCV 4 sur Android et afficher la vue en direct de la caméra
Développement d'applications ROS sur Android
Exemple de communication série à l'aide de jSerialComm
Exemple de communication série utilisant purejavacomm
Gestion des événements avec RxBus sur Android
Comment "évider" une vue sur Android
Commentaire ReactNative Android Bridge
[Android] Obtenez la date du lundi
Utiliser Docker Compose sur Windows 10 Famille
Obtenez la couverture du code JUnit sur Android.
Comment utiliser Ruby on Rails
Comment utiliser les bio-formats sur Ubuntu 20.04
Watson Assistant (anciennement Conversation) sur Android
Remarques sur l'appel du programme d'installation sur l'application Android
Facile à utiliser Cloud Firestore (Android)
Enregistrer ArrayList à l'aide de GSON sur Android
Utilisez la commande iostat sur CentOS 8
Utiliser la complétion dans Eclipse sur Mac
Remarques sur le traitement des threads Android (java)
[Android] Recevoir une intention avec le récepteur de diffusion
Utiliser Docker CE (officiel) avec CentOS 8
Implémenter la représentation ondulatoire dans les images sur Android
Accélérez l'acquisition d'informations de localisation sur Android
Qu'est-ce qui n'était pas une utilisation équitable du détournement d'API Java sur Android?