DéveloppeurWeb.Com
    DéveloppeurWeb.Com
    • Agile Zone
    • AI Zone
    • Cloud Zone
    • Database Zone
    • DevOps Zone
    • Integration Zone
    • Web Dev Zone
    DéveloppeurWeb.Com
    Home»Uncategorized»Comment transformer un smartphone en un clavier périphérique
    Uncategorized

    Comment transformer un smartphone en un clavier périphérique

    mars 15, 2023
    Comment transformer un smartphone en un clavier périphérique
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    La technologie de lecture de codes-barres est cruciale pour de nombreuses entreprises, telles que celles des supermarchés, de la logistique et de l’entreposage. Les données obtenues à partir de la numérisation des codes-barres sont utilisées pour suivre l’inventaire, gérer les commandes et traiter les paiements. Les lecteurs de codes-barres portables sont largement utilisés comme périphériques dans ces industries. Cependant, les scanners de codes-barres laser portables traditionnels ne peuvent détecter que les codes unidimensionnels, tandis que des scanners plus coûteux avec une caméra intégrée sont nécessaires pour détecter les codes bidimensionnels tels que les codes QR. Les smartphones avec caméras intégrées peuvent détecter les codes unidimensionnels et bidimensionnels. De nos jours, les smartphones sont devenus omniprésents. Tout le monde a au moins un smartphone dans sa poche. Si un smartphone peut faire le même travail qu’un lecteur de codes-barres portable, aucun matériel supplémentaire n’est nécessaire. Cet article présente une solution qui combine des technologies telles que Flutter, Python, Bonjour, des sockets Web, PyAutoGUI et Dynamsoft Barcode Reader SDK pour aider les entreprises à réduire leurs coûts en utilisant des smartphones au lieu de lecteurs de codes-barres.

    pas de lecteur de code-barres portable

    Plates-formes prises en charge

    Vidéo de démonstration : Smartphone en tant que clavier périphérique et lecteur de code-barres

    La démo montre comment saisir simultanément du texte depuis un téléphone Android dans le bloc-notes Windows et les notes macOS.

    Aperçu des technologies utilisées et pourquoi elles sont utilisées

    Avant de plonger dans les détails de la solution, examinons d’abord les technologies utilisées dans cette solution.

    • Flutter : Flutter est un framework d’interface utilisateur multiplateforme. Il permet aux développeurs de créer des applications natives pour les fenêtres, Linux, macOS, Android, iOS, et le la toile à partir d’une seule base de code. L’utilisation de Flutter peut économiser beaucoup de temps et d’efforts dans la création de l’interface utilisateur du client.
    • Python : avec Python, il suffit de quelques lignes de code pour implémenter des services réseau et simuler la saisie au clavier sur les systèmes d’exploitation.
    • Bonjour : Bonjour est un protocole de mise en réseau sans configuration (zeroconf) développé par Apple. Il permet aux appareils sur le même réseau de se découvrir. Dans cette solution, Bonjour est utilisé pour découvrir le serveur de socket Web sur le même réseau.
    • WebSocket : les sockets Web sont un protocole de communication informatique qui permet une communication bidirectionnelle entre un client et un serveur. Dans cette solution, les sockets Web sont utilisés pour communiquer entre les appareils mobiles et les PC.
    • PyAutoGUI : PyAutoGUI est un module Python qui peut être utilisé pour automatiser les mouvements de la souris et les pressions sur le clavier. Dans cette solution, PyAutoGUI est utilisé pour simuler la saisie au clavier.
    • Dynamsoft Barcode Reader SDK : Dynamsoft Barcode Reader SDK est un SDK de reconnaissance de codes-barres multiplateforme qui peut être utilisé pour reconnaître les codes-barres 1D et 2D dans les images. Dans cette solution, Dynamsoft Barcode Reader SDK est utilisé pour reconnaître les codes-barres dans les images capturées par l’appareil photo du smartphone.

    Construire un serveur de socket Web détectable avec Bonjour en Python

    Commençons par l’implémentation côté serveur. L’implémentation côté serveur est écrite en Python.

    Installer les modules Python requis

    pip install pyautogui websockets zeroconf

    Obtenir l’adresse IP locale en Python

    Il peut y avoir plusieurs interfaces réseau sur votre ordinateur. Une façon simple de tous les lister est d’utiliser le ipconfig commande sous Windows ou la ifconfig commande sous Linux et macOS. Le Python subprocess.run() La méthode peut être utilisée pour exécuter la commande et obtenir la sortie. L’adresse IP souhaitée peut être obtenue à partir de la sortie en utilisant une expression régulière, telle que r'(\d+\.\d+\.\d+\.\d+)'.

    import subprocess
    import re
    import sys
    
    def get_ip_address():
        ip_address=""
        if sys.platform == 'win32':
            result = subprocess.run(['ipconfig', '/all'], capture_output=True, text=True)   
        else:
            result = subprocess.run(['ifconfig'], capture_output=True, text=True)
    
        foundEthernet = False
        for line in result.stdout.split('\n'):
            if sys.platform == 'win32':
                match = re.search(r'Ethernet adapter Ethernet:', line)
                if match:
                    foundEthernet = True
                
                if foundEthernet:
                    match = re.search(r'IPv4 Address.*? : (\d+\.\d+\.\d+\.\d+)', line)
                    if match:
                        ip_address = match.group(1)
                        break
            else:
                if sys.platform == "linux" or sys.platform == "linux2":
                    match = re.search(r'eth0:', line)
                else:
                    match = re.search(r'en0:', line)
                if match:
                    foundEthernet = True
                
                if foundEthernet:
                    match = re.search(r'(\d+\.\d+\.\d+\.\d+)', line)
                    if match:
                        ip_address = match.group(1)
                        break
    
        return ip_address

    Remarque : Vous devrez peut-être modifier l’expression régulière utilisée dans le code ci-dessus pour qu’elle corresponde au nom de l’interface réseau sur votre ordinateur..

    Implémenter le serveur Web Socket

    Après avoir obtenu l’adresse IP locale, le serveur de socket Web peut être implémenté avec asyncio et websockets.

    import asyncio
    import asyncio
    import websockets
    import socket
    import pyautogui
    import signal
    
    connected = set()
    isShutdown = False
    
    async def handle_message(websocket, path):
        async for message in websocket:
            if isinstance(message, str):
                pass
                    
            elif isinstance(message, bytes):
                pass            
                
    
    async def server(websocket, path):
        connected.add(websocket)
        try:
            await handle_message(websocket, path)
        except:
            connected.remove(websocket)
          
    
    def ctrl_c(signum, frame):
        global isShutdown
        isShutdown = True
        
    async def main(ip_address):
        global isShutdown
        # Start the server
        s = await websockets.serve(server, ip_address, 4000)
    
        while not isShutdown:
            await asyncio.sleep(1)
            
        s.close()
        await s.wait_closed()
    
    signal.signal(signal.SIGINT, ctrl_c)

    Nous utilisons signal.signal() pour gérer la saisie au clavier pour interrompre la boucle infinie du serveur.

    Simuler l’entrée au clavier avec PyAutoGUI

    Une fois qu’un message est reçu du client mobile, le serveur peut simuler la saisie au clavier avec PyAutoGUI.

    
    if message != '':
        if message == 'backspace':
            pyautogui.press('backspace')
        elif message == 'enter':
            pyautogui.press('enter')
        else:
    

    Le pyautogui.press peut être utilisée pour simuler l’appui sur une touche du clavier. Le pyautogui.typewrite peut être utilisée pour simuler la saisie de texte sur le clavier.

    Intégrer Bonjour dans le serveur Web Socket

    La dernière étape consiste à rendre le serveur de socket Web détectable avec Bonjour. Le zeroconf module peut être utilisé pour intégrer Bonjour dans le serveur web socket.

    from zeroconf import ServiceBrowser, ServiceInfo, ServiceListener, Zeroconf
    
    class MyListener(ServiceListener):
    
        def update_service(self, zc: Zeroconf, type_: str, name: str) -> None:
            print(f"Service {name} updated")
    
        def remove_service(self, zc: Zeroconf, type_: str, name: str) -> None:
            print(f"Service {name} removed")
    
        def add_service(self, zc: Zeroconf, type_: str, name: str) -> None:
            info = zc.get_service_info(type_, name)
            print(f"Service {name} added, service info: {info}")
    
    ip_address_str = get_ip_address()
    ip_address = socket.inet_aton(ip_address_str)
    
    info = ServiceInfo("_bonsoirdemo._tcp.local.", socket.gethostname().split('.')[0] +
                    " Web Socket Server._bonsoirdemo._tcp.local.",
                    port=7000, addresses=[ip_address])
    
    zeroconf = Zeroconf()
    # Register the Bonjour service
    zeroconf.register_service(info)
    listener = MyListener()
    browser = ServiceBrowser(zeroconf, "_bonsoirdemo._tcp.local.", listener)
    
    # Start the web socket server
    signal.signal(signal.SIGINT, ctrl_c)
    asyncio.run(main(ip_address_str))
    
    # Unregister the Bonjour service
    print("Unregistering Bonjour service")
    zeroconf.unregister_service(info)
    zeroconf.close()

    Le socket.gethostname() peut renvoyer un nom d’hôte contenant un . à l’intérieur. Le . doit être filtré ; sinon, le nom du service Bonjour ne sera pas valide.

    Création d’une application mobile avec Flutter, Bonjour, WebSocket et Dynamsoft Barcode Reader SDK

    Dans cette section, nous allons créer une application mobile avec Flutter, Bonjour, WebSocket et Dynamsoft Barcode Reader SDK. L’application mobile peut détecter automatiquement le serveur Web Socket et envoyer des données de code-barres via la connexion Web Socket.

    Installer les packages Flutter requis

    flutter pub add bonsoir flutter_riverpod device_info web_socket_channel dynamsoft_capture_vision_flutter 

    • Pour Android, remplacez la version minimale du SDK par 21 dans android/app/build.gradle:

      
      defaultConfig {
          minSdkVersion 21
      }

    • Pour iOS, ajoutez la description suivante à ios/Runner/Info.plist:

      
      NSCameraUsageDescription
      Can I use the camera please?
      NSLocalNetworkUsageDescription
      Looking for local tcp Bonjour service
      NSBonjourServices
      
        _bonsoirdemo._tcp

    La valeur de NSBonjourServices doit être le même que le type de service de votre service Bonjour.

    Implémenter la connexion Web Socket et la découverte du service Bonjour dans Flutter

    Nous utilisons la découverte du service Bonjour car nous voulons éviter de saisir manuellement l’adresse IP du serveur de socket Web.

    L’exemple de code de bonsoir est utile pour implémenter la découverte du service Bonjour. Nous pouvons copier app_service.dart, discovery.dartet service_list.dart fichiers de l’exemple de code à notre projet, puis modifiez-les pour répondre à nos besoins.

    Implémenter la numérisation de code QR de code-barres dans Flutter

    Le dynamsoft_capture_vision_flutter contient également un excellent exemple de code, qui vous explique comment utiliser l’API du SDK Dynamsoft Barcode Reader dans Flutter.

    Voici les étapes de base pour implémenter la numérisation de code QR de code-barres dans Flutter :

    1. Initialisez le SDK avec une clé de licence.
       
      
      late final DCVCameraEnhancer _cameraEnhancer;
       late final DCVBarcodeReader _barcodeReader;
      
       final DCVCameraView _cameraView = DCVCameraView();
      
      ...
    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Add A Comment

    Leave A Reply Cancel Reply

    Catégories

    • Politique de cookies
    • Politique de confidentialité
    • CONTACT
    • Politique du DMCA
    • CONDITIONS D’UTILISATION
    • Avertissement
    © 2023 DéveloppeurWeb.Com.

    Type above and press Enter to search. Press Esc to cancel.