IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Applets Java Discussion :

Lire des RFID


Sujet :

Applets Java

  1. #1
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut Lire des RFID
    Bonjour à tous,

    Je dois développer pour un client une application web qui doit permettre au client de lire des RFID. Le lecteur RFID est connecté au pc CLIENT en USB mais est reconnu comme un port COM.
    J'ai pensé développer un applet java mais voila je n'arrive pas à lire les données du lecteur. J'ai fouillé un peu partout sur le net à la recherche de librairie mais à chaque fois ça ne fonctionne pas. Pour tant je peux remarquer que le lecteur est bien reconnu dans l'application.
    J'ai essayé un tuto qui permet d'accéder à un périphérique via le port serie:
    http://christophej.developpez.com/tu...java/javacomm/
    J'ai donc adapté à mon besoin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
     
     
    package es.deusto.smartlab.src;
     
    import javax.comm.*;
    import com.sun.comm.Win32Driver;
    import java.io.*;
    import java.util.*;
     
    public class ModeEvenement extends Thread implements SerialPortEventListener {
     
        private CommPortIdentifier portId;
        private SerialPort serialPort;
        private BufferedReader fluxLecture;
        private boolean running;
     
        /**
         * Constructeur qui récupère l'identifiant du port et lance l'ouverture.
         */
        public ModeEvenement(String port) {
            //initialisation du driver
            Win32Driver w32Driver = new Win32Driver();
            w32Driver.initialize();
            //récupération de l'identifiant du port
            try {
                portId = CommPortIdentifier.getPortIdentifier(port);
            } catch (NoSuchPortException e) {
                System.out.println(e.getMessage());
            }
     
            //ouverture du port
            try {
                serialPort = (SerialPort) portId.open("ModeEvenement", 2000);
            } catch (PortInUseException e) {
                System.out.println(e.getMessage());
            }
            //récupération du flux
            try {
                fluxLecture =
                        new BufferedReader(
                                new InputStreamReader(serialPort.getInputStream()));
            } catch (IOException e) {
                System.out.println(e.getMessage());
            }
            //ajout du listener
            try {
                serialPort.addEventListener(this);
            } catch (TooManyListenersException e) {
                System.out.println(e.getMessage());
            }
            //paramétrage du port
            serialPort.notifyOnDataAvailable(true);
            try {
                serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
                serialPort.setSerialPortParams(
                        9600,
                        SerialPort.DATABITS_8,
                        SerialPort.STOPBITS_1,
                        SerialPort.PARITY_NONE);
            } catch (UnsupportedCommOperationException e) {
                System.out.println(e.getMessage());
            }
            System.out.println("port ouvert, attente de lecture");
        }
        public void run() {
            running = true;
            while (running) {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    System.out.println(e.getMessage());
                }
            }
            //fermeture du flux et port
            try {
                fluxLecture.close();
            } catch (IOException e) {
                System.out.println(e.getMessage());
            }
            serialPort.close();
        }
        /**
         * Méthode de gestion des événements.
         */
        public void serialEvent(SerialPortEvent event) {
            //gestion des événements sur le port :
            //on ne fait rien sauf quand les données sont disponibles
            switch (event.getEventType()) {
                case SerialPortEvent.BI :
                case SerialPortEvent.OE :
                case SerialPortEvent.FE :
                case SerialPortEvent.PE :
                case SerialPortEvent.CD :
                case SerialPortEvent.CTS :
                case SerialPortEvent.DSR :
                case SerialPortEvent.RI :
                case SerialPortEvent.OUTPUT_BUFFER_EMPTY :
                    break;
                case SerialPortEvent.DATA_AVAILABLE :
                    String codeBarre = new String();
                    try {
                        //lecture du buffer et affichage
                        codeBarre = (String) fluxLecture.readLine();
                        System.out.println(codeBarre);
                    } catch (IOException e) {
                        System.out.println(e.getMessage());
                    }
                    break;
            }
        }
        /**
         * Permet l'arrêt du thread
         */
        public void stopThread() {
            running = false;
        }
     
        /**
         * Méthode principale de l'exemple.
         */
        public static void main(String[] args) {
            //Récuperation du port en argument
    //        String port = args[0];
            //lancement de l'appli
    //        ModeEvenement modeEve=new ModeEvenement(port);
            ModeEvenement modeEve=new ModeEvenement("COM4");
            modeEve.start();
            //"interface utilisateur"
            System.out.println("taper q pour quitter");
            //construction flux lecture
            BufferedReader clavier =
                    new BufferedReader(new InputStreamReader(System.in));
            //lecture sur le flux entrée.
            try {
                String lu = clavier.readLine();
                while (!lu.equals("q")) {
                }
            } catch (IOException e) {
            }
            modeEve.stopThread();
        }
    }
    Le problème c'est que aucun événement n'est détecté...

    J'ai également essayé cette lib:
    http://www.smartlab.deusto.es/java-rfid/
    mais incompatible avec la puce de mon lecteur qui est une puce microchip PIC16F877A

    Merci pour votre aide. Et si jamais une autre solution que l'applet java est possible n'hésitez pas à me la proposer
    Les idiots sont ceux qui ne posent jamais de question!

  2. #2
    Débutant
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Points : 324
    Points
    324
    Par défaut
    Citation Envoyé par manuscle Voir le message
    Bonjour à tous,

    Je dois développer pour un client une application web qui doit permettre au client de lire des RFID. Le lecteur RFID est connecté au pc CLIENT en USB mais est reconnu comme un port COM.
    J'ai pensé développer un applet java mais voila je n'arrive pas à lire les données du lecteur. J'ai fouillé un peu partout sur le net à la recherche de librairie mais à chaque fois ça ne fonctionne pas. Pour tant je peux remarquer que le lecteur est bien reconnu dans l'application.
    J'ai essayé un tuto qui permet d'accéder à un périphérique via le port serie:
    http://christophej.developpez.com/tu...java/javacomm/
    J'ai donc adapté à mon besoin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
     
     
    package es.deusto.smartlab.src;
     
    import javax.comm.*;
    import com.sun.comm.Win32Driver;
    import java.io.*;
    import java.util.*;
     
    public class ModeEvenement extends Thread implements SerialPortEventListener {
     
        private CommPortIdentifier portId;
        private SerialPort serialPort;
        private BufferedReader fluxLecture;
        private boolean running;
     
        /**
         * Constructeur qui récupère l'identifiant du port et lance l'ouverture.
         */
        public ModeEvenement(String port) {
            //initialisation du driver
            Win32Driver w32Driver = new Win32Driver();
            w32Driver.initialize();
            //récupération de l'identifiant du port
            try {
                portId = CommPortIdentifier.getPortIdentifier(port);
            } catch (NoSuchPortException e) {
                System.out.println(e.getMessage());
            }
     
            //ouverture du port
            try {
                serialPort = (SerialPort) portId.open("ModeEvenement", 2000);
            } catch (PortInUseException e) {
                System.out.println(e.getMessage());
            }
            //récupération du flux
            try {
                fluxLecture =
                        new BufferedReader(
                                new InputStreamReader(serialPort.getInputStream()));
            } catch (IOException e) {
                System.out.println(e.getMessage());
            }
            //ajout du listener
            try {
                serialPort.addEventListener(this);
            } catch (TooManyListenersException e) {
                System.out.println(e.getMessage());
            }
            //paramétrage du port
            serialPort.notifyOnDataAvailable(true);
            try {
                serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
                serialPort.setSerialPortParams(
                        9600,
                        SerialPort.DATABITS_8,
                        SerialPort.STOPBITS_1,
                        SerialPort.PARITY_NONE);
            } catch (UnsupportedCommOperationException e) {
                System.out.println(e.getMessage());
            }
            System.out.println("port ouvert, attente de lecture");
        }
        public void run() {
            running = true;
            while (running) {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    System.out.println(e.getMessage());
                }
            }
            //fermeture du flux et port
            try {
                fluxLecture.close();
            } catch (IOException e) {
                System.out.println(e.getMessage());
            }
            serialPort.close();
        }
        /**
         * Méthode de gestion des événements.
         */
        public void serialEvent(SerialPortEvent event) {
            //gestion des événements sur le port :
            //on ne fait rien sauf quand les données sont disponibles
            switch (event.getEventType()) {
                case SerialPortEvent.BI :
                case SerialPortEvent.OE :
                case SerialPortEvent.FE :
                case SerialPortEvent.PE :
                case SerialPortEvent.CD :
                case SerialPortEvent.CTS :
                case SerialPortEvent.DSR :
                case SerialPortEvent.RI :
                case SerialPortEvent.OUTPUT_BUFFER_EMPTY :
                    break;
                case SerialPortEvent.DATA_AVAILABLE :
                    String codeBarre = new String();
                    try {
                        //lecture du buffer et affichage
                        codeBarre = (String) fluxLecture.readLine();
                        System.out.println(codeBarre);
                    } catch (IOException e) {
                        System.out.println(e.getMessage());
                    }
                    break;
            }
        }
        /**
         * Permet l'arrêt du thread
         */
        public void stopThread() {
            running = false;
        }
     
        /**
         * Méthode principale de l'exemple.
         */
        public static void main(String[] args) {
            //Récuperation du port en argument
    //        String port = args[0];
            //lancement de l'appli
    //        ModeEvenement modeEve=new ModeEvenement(port);
            ModeEvenement modeEve=new ModeEvenement("COM4");
            modeEve.start();
            //"interface utilisateur"
            System.out.println("taper q pour quitter");
            //construction flux lecture
            BufferedReader clavier =
                    new BufferedReader(new InputStreamReader(System.in));
            //lecture sur le flux entrée.
            try {
                String lu = clavier.readLine();
                while (!lu.equals("q")) {
                }
            } catch (IOException e) {
            }
            modeEve.stopThread();
        }
    }
    Le problème c'est que aucun événement n'est détecté...

    J'ai également essayé cette lib:
    http://www.smartlab.deusto.es/java-rfid/
    mais incompatible avec la puce de mon lecteur qui est une puce microchip PIC16F877A

    Merci pour votre aide. Et si jamais une autre solution que l'applet java est possible n'hésitez pas à me la proposer

    Bonjour manuscle,

    Quel est la marque de ton lecteur ?
    Selon le fabriquant, ils proposent tres souvent des samples de tests à partir desquels tu pourrais coder ton application.
    Le faites que tu ne puisses pas acceder à ton lecteur proviens probablement des restrictions java ( signature de l'applet necessaire pour pouvoir acceder au couches basses de ta machine sur laquelle est connecté ton lecteur ).
    Le plus simple pour toi serait d'utiliser un lecteur USB PC/SC et d'utiliser les librairie "smartcard.io" java.
    Autre chose, regarde si ton lecteur ne dispose pas d'un driver USB CCID et non pas d'un driver "USB virtual COM Port"

    En esperant que cela puisses t'aider.

    Cordialement,

    Moulefrite

  3. #3
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut
    Bonjour et merci de ta réponse

    Finalement nous avons décidé avec le client de changer de lecteur RFID et d'en acheter un qui est fourni avec un applet de communication dans la plupart des langages.
    C'est plus simple que de se faire des nœuds au cerveau ^^

    Merci encore
    Les idiots sont ceux qui ne posent jamais de question!

  4. #4
    Débutant
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Points : 324
    Points
    324
    Par défaut
    Citation Envoyé par manuscle Voir le message
    Bonjour et merci de ta réponse

    Finalement nous avons décidé avec le client de changer de lecteur RFID et d'en acheter un qui est fourni avec un applet de communication dans la plupart des langages.
    C'est plus simple que de se faire des nœuds au cerveau ^^

    Merci encore

    Bonjour Manuscle,

    Il n'y a pas de quoi, tu a opté pour la bonne solution

Discussions similaires

  1. lire des cartes RFID via un lecteur branché en usb
    Par raoul2000 dans le forum Général Java
    Réponses: 1
    Dernier message: 10/03/2014, 23h59
  2. Ecrire & Lire des énumérés dans un fichier Texte
    Par WebPac dans le forum Langage
    Réponses: 8
    Dernier message: 18/06/2008, 10h04
  3. [SAX] Lire des objets
    Par sylvain_2020 dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 01/12/2004, 16h10
  4. CFile : comment lire des données
    Par romeo9423 dans le forum MFC
    Réponses: 3
    Dernier message: 25/10/2004, 19h10
  5. [ZIP]besoin de lire des fichiers avec l'extension tar.gz
    Par mathieublanc13 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 24/05/2004, 13h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo