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

Embarqué Discussion :

Connecter une balance à une tablette ?


Sujet :

Embarqué

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Connecter une balance à une tablette ?
    Bonjour,

    Actuellement en stage, je dois connecter une tablette à une balance via USB et ainsi pouvoir collecter un poids automatiquement, par exemple en utilisant un bouton d'acquisition.

    Je n'ai pas encore beaucoup d'informations. L'entreprise où je suis développe en java une application stockée sur un serveur, et ouvert sur une tablette via un navigateur web.

    Je viens donc demander de l'aide sur ce forum. Ce projet vous paraît-il faisable ? Si oui, en quel langage ? En développant directement sur la tablette ou sur le logiciel principal ?

    Cordialement,
    laRob

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Petit up.

    Mes tuteurs m'ont indiqué d'utiliser Cordova pour developper un prototype d'application pouvant gérer une entrée de données sur le port USB.
    J'ai donc téléchargé le SDK android ainsi que Node.js et java.
    J'ai écrit une page très simple pour commencer (je découvre le langage javascript). La voici à titre d'information :

    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
    <!DOCTYPE html>
    <html>
    	<head>
    	
    		<meta charset="utf-8">
    		<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
    		<meta name="msapplication-tap-highlight" content="no">
    		<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
    		<link rel="stylesheet" type="text/css" href="css/style.css">
    		<title>AppTest</title>
    
    	</head>
    
    	<body>
    
    			<header>
    				AppTest 
    			</header>
    
    			<section id="view">
    				<div class="accueil">
    					<h1> Touchez pour continuer </h1>	 
    				</div>
    	
    				<div class="firstTest">
    					<p> Bravo </p>
    					<button class="reinitButton">Reinitialiser</button>
    				</div>
    			</section>	
    
    			<nav id="nav">
    			</nav>	
    
    			<script type="text/javascript" src="cordova.js"></script>
    			<script type="text/javascript" src="js/index.js"></script>
    	</body>
    </html>
    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
    body {
    	background-color: #E4E4E4;
    	font-family: 'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, sans-serif;	
    }
    
    header {
    	position: absolute;
    	top: 0; right : 0; left: 0;
    	margin: 0;
    	height: 60px; line-height: 60px;
    	text-align: center;
    	font-size: 25px;
    	background-color: #BD9A9A;
    }
    
    
    #view  {
    	position: absolute;
    	top: 60px; right: 0px; bottom: 0px; left: 0px;
    }
    
    .accueil h1 {
    	margin: 0;
    	text-align: center;
    }
    
    .firstTest p {
    	margin: 0;
    	text-align: center;
    }
    .reinitButton {
    	position: absolute;
    	bottom: 0; right : 0; left: 0;
    	margin: auto;
    	height: 60px; line-height: 60px;
    	text-align: center;
    	font-size: 25px;bottom: 0; left: 0; right: 0;
    	background-color: #BD9A9A;
    }
    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
    var app ={
    
    	mainView : document.getElementById('view') ,
    	
    	currentView : undefined,		
    
    	changeView : false,
    
    	initialize : function() {
    		document.addEventListener('deviceready', this.onDeviceReady(), false);
    	},
    
    	onDeviceReady : function() {
    
    		this.init();
    
    //		if (this.changeView === true) {
    //			this.writeScreen(this.currentView);	
    //			this.changeView = false;
    //		}
    	
    		
    
    		this.mainView.addEventListener('click', function(e){ 
    			app.writeScreen('.firstTest',app.currentView);
    		}, true);
    
    
    		var reinit = document.querySelector('.reinitButton');
    
    		reinit.addEventListener('click', function() {
    			app.writeScreen('.accueil',app.currentView);
    		}, false);
    	}, 
    
    
    	writeScreen : function(selector, currentView) {
    		this.eraseScreen();	
    		currentView = document.querySelector(selector);
    		if (currentView !== null) {
    			currentView.setAttribute('style', 'display: block;');
    		}
    	},
    
    	eraseScreen : function() {
    		var child = this.mainView.firstElementChild;
    		while (child) {
    			child.setAttribute('style','display:none;');
    			child = child.nextElementSibling;
    		}
    	},
    
    	init : function() {
    		this.eraseScreen();
    	
    		this.currentView = document.querySelector('.accueil');
    		this.currentView.setAttribute('style', 'display:block;');	
    			
    	}
    	
    };
    
    app.initialize();
    Je la test via le navigateur, et les évenements 'click' sont remplacé par des 'touch' pour l'emulation sous android ou lors du test directement sur tablette.

    A ce poit là, je ne sais pas vraiment comment gérer les ports USB de la tablette. Apparemment, il est impossible d'intéragir avec les ports via le navigateur, et je ne sais pas comment connecter une appareil sur une machine virtuelle android. Je dispose d'un lecteur de code barre pour effectuer des test sur la machine. Mais à partir de là, mystère.


    J'ai trouvé ces projets GIT :
    https://github.com/xseignard/cordovarduino
    https://github.com/EmergingTechnolog...ode-serialport

    Je ne sais pas comment utiliser ces projets, puisque je ne comprends pas trop le code.
    Le premier contiens une fonction 'read' qui m'est nécessaire. C'est un plugin cordova tandis que l'autre s'installe via npm, mais il a été créer pour fonctionner avec un arduino.

    Un avis serait le bienvenue.

    Cordialement,
    laRob

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Après avoir fait quelques test sur les fichiers et cordova, je dispose maintenant d'une balance Precia Molen BJ 2100D pour effectuer des tests.

    La lisaison est de type ethernet-usb (je ne connsaissais pas ce type de liaison avant de piquer le cable d'un scanner de code barre).

    J'ai testé le plugin cordovarduino, mais j'ai quelques problèmes pour la reconnaissance des appareils par la tablette, notemment clavier et souris.
    https://github.com/xseignard/cordovarduino/issues/58

    Mon problème a présent est de pouvoir connecter la balance à la tablette ou à l'ordinateur. En effet, lorsque je la connecte, une serie de traits horizontaux apparaissent, et la balance se bloque. Je suis obligé de l'eteindre grâce au boutton on/off, puis de la débrancher pour pouvoir la rallumer. Je n'ai pas trouvé de documentation sur internet.

    Lorsque je la connecte à mon system linux, la commande dmesg renvoie :

    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
    [ 1704.290124] usb 3-1: new full-speed USB device number 30 using xhci_hcd
    [ 1704.402303] usb 3-1: device descriptor read/64, error -71
    [ 1704.618552] usb 3-1: device descriptor read/64, error -71
    [ 1704.834791] usb 3-1: new full-speed USB device number 31 using xhci_hcd
    [ 1704.946954] usb 3-1: device descriptor read/64, error -71
    [ 1705.163196] usb 3-1: device descriptor read/64, error -71
    [ 1705.379373] usb 3-1: new full-speed USB device number 32 using xhci_hcd
    [ 1705.379523] usb 3-1: Device not responding to setup address.
    [ 1705.583764] usb 3-1: Device not responding to setup address.
    [ 1705.787838] usb 3-1: device not accepting address 32, error -71
    [ 1705.899956] usb 3-1: new full-speed USB device number 33 using xhci_hcd
    [ 1705.900078] usb 3-1: Device not responding to setup address.
    [ 1706.104318] usb 3-1: Device not responding to setup address.
    [ 1706.308425] usb 3-1: device not accepting address 33, error -71
    [ 1706.308538] usb usb3-port1: unable to enumerate USB device
    [ 1706.893109] usb 3-1: new full-speed USB device number 34 using xhci_hcd
    [ 1707.005295] usb 3-1: device descriptor read/64, error -71
    [ 1707.221513] usb 3-1: device descriptor read/64, error -71
    [ 1707.437720] usb 3-1: new full-speed USB device number 35 using xhci_hcd
    [ 1707.549884] usb 3-1: device descriptor read/64, error -71
    [ 1707.766132] usb 3-1: device descriptor read/64, error -71
    [ 1707.982345] usb 3-1: new full-speed USB device number 36 using xhci_hcd
    [ 1707.982498] usb 3-1: Device not responding to setup address.
    [ 1708.186633] usb 3-1: Device not responding to setup address.
    [ 1708.390807] usb 3-1: device not accepting address 36, error -71
    [ 1710.108772] usb 3-1: new full-speed USB device number 38 using xhci_hcd
    Un avis serait le bienvenue.

  4. #4
    Membre confirmé
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Points : 519
    Points
    519
    Par défaut
    Bonjour,

    Tu pourrais également regarder du côte de l'ADK (Android Development Kit) qui permet une communication par USB sur les appareils Android compatibles.

    Si ta balance se fige lorsque tu la branches à la tablette, c'est que quelque chose ne lui plait pas ... Attention au risque électrique (pour la balance).

    La question que j'aurai du te poser dès le début : quel est le type de tablette que tu utilises ?
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Je dispose de deux tablette : une assez commune je pense qui est une Memup SlidePadNG 9716DC sous l'API 15, et une tablette Getac z710 sous l'API 16.

    Il s'est avéré que le câble que j'utilisais n'était pas compatible, et nous en avons donc acheté un qui fonctionne avec la balance auprès de Precisa.

    Je me suis penché sur le le développement sous Android-Studio, et je me retrouve vite limité (Je ne connaissais pas le langage Java).

    Je peux encore vous montrer le bout de code que j'ai réalisé grâce à ce que j'ai pu trouvé sur internet.

    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
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    package fr.larob.testusb2;
    
    import android.app.PendingIntent;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.hardware.usb.UsbConstants;
    import android.hardware.usb.UsbDevice;
    import android.hardware.usb.UsbDeviceConnection;
    import android.hardware.usb.UsbEndpoint;
    import android.hardware.usb.UsbInterface;
    import android.hardware.usb.UsbManager;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    
    import java.util.HashMap;
    
    public class MainActivity extends AppCompatActivity implements Runnable{
    
        private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION";
    
        UsbManager manager;
        UsbDeviceConnection connection;
        UsbDevice usbDevice;
    
        private Byte[] bytes;
        private static int TIMEOUT = 0;
        private boolean forceClaim = true;
    
        UsbInterface usbInterface;
        private UsbEndpoint usbEndpointIn;
        private UsbEndpoint usbEndpointOut;
    
        private Thread readThread;
    
        private boolean mRunning;
    
        //private int result;
    
    
        private final BroadcastReceiver usbReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
    
                if(ACTION_USB_PERMISSION.equals(action)) {
                    synchronized (this) {
                        UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
    
                        if(intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                            if (device != null) {
                                console("permission granted ?");
                            }
                        }
                        else {
                            console("permission denied for device " + device);
                        }
                    }
                }
            }
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button detect = (Button) findViewById(R.id.detect);
    
            final PendingIntent permissionIntent;
            permissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
            IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
            registerReceiver(usbReceiver, filter);
    
            manager = (UsbManager) getSystemService(Context.USB_SERVICE);
            console(manager.toString());
    
            HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
    
            for (UsbDevice device : deviceList.values()) {
                console("while");
                console(device.toString());
                usbDevice = device;
                console(usbDevice.toString());
                manager.requestPermission(usbDevice, permissionIntent);
            }
    
    
    
            //final Context thisContext = this;
            assert detect != null;
    
            detect.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    console("click");
                    //usbDevice = manager.getDeviceList().values().iterator().next();
                    //console("correct assign usbDevice");
    
    
                    usbInterface = usbDevice.getInterface(0);
                    console("correct assign usbInterface");
                    console(usbInterface.toString());
    
                    connection = manager.openDevice(usbDevice);
                    console("correct manager.openDevice");
                    connection.claimInterface(usbInterface, forceClaim);
                    console("correct connection.claimInterface");
    
    
                    for(int i=0; i<usbInterface.getEndpointCount();i++) {
                        UsbEndpoint endpoint = usbInterface.getEndpoint(i);
                        if (endpoint.getDirection() == UsbConstants.USB_DIR_IN)
                            usbEndpointIn = endpoint;
                        else
                            usbEndpointOut = endpoint;
                    }
    
    
                    console("UsbEndpointIn = " + usbEndpointIn.toString());
    
                    readThread = new Thread(MainActivity.this);
                    readThread.start();
                }
            });
    
            Button stop = (Button) findViewById(R.id.stop);
            assert stop != null;
            stop.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mRunning = false;
                    connection.releaseInterface(usbInterface);
                    connection.close();
                }
            });
    
        }
    
        @Override
        public void run() {
            mRunning = true;
    
            while (mRunning) {
                byte[] bytes = new byte[usbEndpointIn.getMaxPacketSize()];
                int result = connection.bulkTransfer(usbEndpointIn, bytes, bytes.length, 1000);
                Log.d("SEND RESULT", result + "");
            }
        }
    
        public void console(String message) {
            LinearLayout mainLayout = (LinearLayout) findViewById(R.id.main_layout);
    
            TextView textView = new TextView(this);
            textView.setText(message);
    
            assert mainLayout != null;
            mainLayout.addView(textView);
        }
    }
    J'ai tenté de suivre ce guide https://developer.android.com/guide/.../usb/host.html .
    Seulement, je ne comprends pas vraiment tout.
    Où j'en suis particulièrement, la fonction builkTransfer me renvoie -1.

    http://stackoverflow.com/questions/1...t-receive-data ici l'exemple qui m'a inspiré.
    http://stackoverflow.com/questions/1...some-data-in-t ici un sujet traitant du retour -1 de builkTransfert. Mais je ne sais pas comment vérifier les paramètres.

Discussions similaires

  1. Connecter une tablette Android sous Ubuntu 12.10
    Par lil_formaticiin dans le forum Android
    Réponses: 1
    Dernier message: 01/09/2013, 22h51
  2. Connecter une tablette android à eclipse
    Par houcem001 dans le forum Android
    Réponses: 2
    Dernier message: 15/11/2011, 17h51
  3. Réponses: 1
    Dernier message: 19/01/2006, 10h45
  4. Connection JDBC (oci) à une base oracle 10.1.0
    Par kartman_c dans le forum Oracle
    Réponses: 5
    Dernier message: 03/11/2005, 18h21
  5. partager sa connection internet avec une virtual machine
    Par Death83 dans le forum Administration
    Réponses: 1
    Dernier message: 10/10/2005, 10h45

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