2016-12-08 11 views
2

В настоящее время я работаю над проектом для университета, где мне нужно создать программу, которая контролирует влажность в террариуме. С этой целью у меня есть гигрометр.Чтение данных с USB-порта

Прежде всего программа должна импортировать необработанные данные с гигрометра, но я понятия не имею, как это работает. В документации говорится, что для него есть интерфейс USB, но я могу найти способ анализа необработанных данных. Я также написал электронное письмо компании, которая продает этот гигрометр. Они сказали, что это внешнее программное обеспечение, которое импортирует и обрабатывает данные. Однако мне не разрешено использовать внешние программные средства. Поэтому я вынужден читать исходные данные непосредственно с USB-порта. Я попытался работать с usb4java, но я смог найти все подключенные USB-устройства. Я понятия не имею, как это сделать. Пожалуйста, помогите мне documentation documentation

Код ниже

public class DumpDevices 
{ 
/** 
* Dumps the specified USB device to stdout. 
* 
* @param device 
*   The USB device to dump. 
*/ 


private static void dumpDevice(final UsbDevice device) 
{ 
    // Dump information about the device itself 
    System.out.println(device); 
    final UsbPort port = device.getParentUsbPort(); 
    if (port != null) 
    { 
     System.out.println("Connected to port: " + port.getPortNumber()); 
     System.out.println("Parent: " + port.getUsbHub()); 
    } 

    // Dump device descriptor 
    System.out.println(device.getUsbDeviceDescriptor()); 

    // Process all configurations 
    for (UsbConfiguration configuration: (List<UsbConfiguration>) device 
     .getUsbConfigurations()) 
    { 
     // Dump configuration descriptor 
     System.out.println(configuration.getUsbConfigurationDescriptor()); 

     // Process all interfaces 
     for (UsbInterface iface: (List<UsbInterface>) configuration 
      .getUsbInterfaces()) 
     { 
      // Dump the interface descriptor 
      System.out.println(iface.getUsbInterfaceDescriptor()); 

      // Process all endpoints 
      for (UsbEndpoint endpoint: (List<UsbEndpoint>) iface 
       .getUsbEndpoints()) 
      { 
       // Dump the endpoint descriptor 
       System.out.println(endpoint.getUsbEndpointDescriptor()); 
      } 
     } 
    } 

    System.out.println(); 

    // Dump child devices if device is a hub 
    if (device.isUsbHub()) 
    { 
     final UsbHub hub = (UsbHub) device; 
     for (UsbDevice child: (List<UsbDevice>) hub.getAttachedUsbDevices()) 
     { 
      dumpDevice(child); 
     } 
     System.out.println(hub); 
    } 
} 


/** 
* Main method. 
* 
* @param args 
*   Command-line arguments (Ignored) 
* @throws UsbException 
*    When an USB error was reported which wasn't handled by this 
*    program itself. 
*/ 
public static void main(final String[] args) throws UsbException 
{ 
    // Get the USB services and dump information about them 
    final UsbServices services = UsbHostManager.getUsbServices(); 
    System.out.println("USB Service Implementation: " 
     + services.getImpDescription()); 
    System.out.println("Implementation version: " 
     + services.getImpVersion()); 
    System.out.println("Service API version: " + services.getApiVersion()); 
    System.out.println(); 

    // Dump the root USB hub 
    dumpDevice(services.getRootUsbHub()); 
} 
+2

Вам необходимо ознакомиться с документацией датчика. Должен быть какой-то драйвер или SDK-описание. Когда у вас был контакт - вы сказали им, что это для образовательного использования? Может иметь значение в политике лицензирования. – Fildor

+0

Да, я сказал ему его для образовательного использования. Но, в конце концов, он снова отправил мне документацию. Я собираюсь добавить некоторые фотографии документации, когда я дома. – Xinren

+0

Из документов это кажется так часто, они делают эмуляцию rs232. Поэтому вам нужно подключиться к виртуальному COM-порту. Затем вы можете считывать данные, как описано на стр. 23 и далее. – Fildor

ответ

0

Я думаю usb4java очень хорошо, но довольно сложным. Вы можете выполнить чтение данных из USB порта очень легко с jssc

Пример чтения данных с USB:

SerialPort serialPort = new SerialPort("/dev/tty.usbmodem1435"); 
serialPort.openPort();//Open serial port 
serialPort.setParams(4800, 8, 1, 0);//Set params. 
while(true) { 
    byte[] buffer = serialPort.readBytes(10); 
    if(buffer!=null) { 
     for(byte b:buffer) { 
      System.out.print(b); 
     } 
    } 
} 

Обратите внимание, что «/dev/tty.usbmodem1435» это всего лишь пример названия, вы должны использовать имя порта, которое вас интересует.

Надеюсь, это поможет.