# Interfaz de Puerto USB con Visual Basic.Net



## PayOola (Feb 2, 2010)

Hola soy nueva en esto de los foros... 

Pero necesito de su Gran Ayuda!!!!

Lo que tratdo de hacer es tener una interfaz con el Puerto USB programandolo en Visul Basic .Net, esto lo necesito para un proyecto de mi escuela, pero la verad esto es casi nuevo para mi..... Lo que estoy pensando realizar es que por medio del puerto USB llegen los datos de entrada de los circuitos, y tambien que por medio de la computadora, pueda transferir mis datos de salida!!!!!

Cualquier Ayuda es Aceptada!!!!
y de ante mano GRACIAS!!!!!!!


----------



## Meta (Feb 3, 2010)

¿Te vale par un puerto serie? Porque el USB nadie lo domina por aquí muy bien del todo.

http://www.abcdatos.com/tutoriales/tutorial/v12.html

Por otro lado lo estoy haciendo de nuevo pero más completo y real, también habrá manual.
https://www.forosdeelectronica.com/f26/interfaz-puerto-serie-picrs232-v2-00-beta-28156/#post241859










Saludo.


----------



## EINNER C (Jun 2, 2014)

Buen Dia,

tengo un progtama que realize  hace un tiempo en visual basic .net, para comunicarme por medio de usb hid con un pic 18f2550, dicho proyecto funciono totalmente en simulacion como en real, pero un año despues que vengo a ejecutarlo ya en un pc con w7, me saca un error y la verdad no se que sera, el archivo mcHID.dll esta en la crpteta sistem32, no se si este olvidando algo, agradeceria su ayuda, ademas baje un ejemplo de internet donde dice que funciona perfectamente y cuando lo corro sale el mismo error, lo del pic me funciona perfecto, y aparece como dispositivo hid, pero en visual me sale este error, gracias de antemano por sus ayuda


----------



## miborbolla (Jun 11, 2014)

Hola EINNER C, me parece que el error que te muestra VB.net es por que no has agregado la referencia de mcHID.dll.

Para hacerlo, una vez que cargaste tu proyecto, utilizas Proyecto>Agregar referencia...estando en la ventana de "Agregar referencia" vas a la pestaña "Examinar" y desde ahí buscas la carpeta donde tienes mcHID.dll y seleccionas el archivo.

Con esto debería quitarse el problema, ojala te sirva mi comentario.

Saludos


----------



## miborbolla (Jun 18, 2014)

Hola Meta, recibe un saludo y aprovecho para ver si me puedes enterar sobre lo que comentaste:



> ¿Te vale par un puerto serie? Porque el USB nadie lo domina por aquí muy bien del todo.



Tenia entendido que en el tema que nuestro compañero Moyano inicio:https://www.forosdeelectronica.com/f24/control-dispositivos-traves-modulo-usb-pic18f2550-17458/ ya estaba mas que solucionado el asunto USB HID y visual .net, y que tu también lo tenias resuelto, ya que vi inclusive algún post donde tocan el tema https://www.forosdeelectronica.com/f26/usb-hid-hidcomm-exe-64-bits-win-7-win-vista-72232/ , y di por hecho el dominio del USB, yo por mi parte, que trato de programar todo en lenguaje Basic, desde los microcontroladores; "IDE proton compiler" y desde la pc; "Visual Basic .net 2010", vengo resolviendo la comunicación USB-HID por medio de la libreria "HIDLibrary.dll" que descargue de https://github.com/mikeobrien/HidLibrary y que desde aquí aprovecho a agradecer al desarrollador Mike O'Brien por su excelente librería.

Con esta librería he encontrado una simplificación estupenda para escribir mis programas VB.net, aun cuando siempre compilo en 32 bits, los programas funcionan perfecto en 64 bits incluyendo el nuevo windows 8 (32 y 64 bits) y hasta en el ya saliente Windows XP, el único requisito para que todo funcione ok es tener el Netframework mas reciente, que obvio que si instalas Visual Basic .net, pues ya lo tendrás, lo comento para cuando se tiene que distribuir la aplicación. Por el lado de la DLL (HIDLibrary.dll) solo se requiere que este presente el archivo en el mismo directorio donde esta la aplicación o el clásico \windows\system32\.



De cualquier manera dejo una sencillisima aplicación en VB.net 2010, que no hace otra cosa que prender un led o apagarlo (enviar un buffer) y mostrar el contenido de un puerto (recibir buffer). No voy a adentrarme en diagramas, explicaciones extensas del protocolo ya que esta mas que documentado en el Post de Moyano, que por cierto le envió un saludo; solo deseaba tocar el asunto de Visual Basic.net, eso si les aseguro que con esta misma librería (HIDLibrary.dll) he podido tener comunicación con cualquier dispositivo HID, ya sea un Microchip, Un Atmel, Un mouse, un teclado, etc, etc, que sea HID.

Ojala sirva mi "aportación" creo que viene lo suficientemente documentado el programa como para realizar un manual...reciban un cordial saludo.



```
Imports HIDLibrary ' se importan las funciones de la libreria HIDLibrary.dll y a su vez tendremos que referenciarla via el Menu; Proyecto>Agregar Referencia
Imports System.Threading 'importamos el "engarzado" de las funciones de la libreria, para que esten disponibles en nuestro programa


Public Class Cibertlan_HID

    Dim HidDeviceList As HIDLibrary.HidDevice() ' Es la Variable que indicara si hay tarjetas HID en nuestro sistema (windows)
    Dim Cibertlan As HidDevice ' Esta variable nos sirve para dar un nombre a nuestra tarjeta cuando este reconocida por el programa, yo usare Cibertlan
    Dim EntradaDatos As HidDeviceData ' esta variable contendra y manejara el buffer de entrada de la conexion USB de nuestra tarjeta
    Dim SalidaDatos(8) As Byte ' La variable Salidadatos contendra el buffer que sera enviado a la conexion USB de nuestra tarjeta
    
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        
    End Sub

    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick 'esta subrutina es un timer activo cada 100 ms

        HidDeviceList = HidDevices.Enumerate(&H1781, &H7D0) ' Enumeramos nuestro dispositivo en base al Vid y Pid de nuestra tarjeta

        If HidDeviceList.Length > 0 Then 'si existe cuando menos un dispositivo con el Vid y Pid entonces,
            Cibertlan = HidDeviceList(0) 'tomamos el primer dispositivo encontrado y le asignamos un nombre, en este caso "Cibertlan"

            ' Dentro del siguiente If (si es valido) se Verifica si la tarjeta esta conectada y reconocida por Windows, 
            ' ademas se Transfieren los buffers de salida y de entrada

            If Cibertlan.IsConnected Then ' Preguntamos si la tarjeta esta conectada y si es asi:
                Conecta.FillColor = Color.Green ' Cambiamos el color de nuestro indicador de conexion a Verde
                Enciende.Enabled = True ' Habilitamos el boton de comando "Enciende"
                Apaga.Enabled = True ' Habilitamos el boton de comando "Apaga"
                Cibertlan.Write(SalidaDatos) ' se transfiere el Buffer de salida desde la variable SalidaDatos hacia nuestra tarjeta USB
                EntradaDatos = Cibertlan.Read() ' se Transfiere el Buffer desde nuestra tarjeta USB en la variable EntradaDatos
                Thread.Sleep(10) ' Hacemos una pausa de 10 milisegundos para esperar que las operaciones de intercambio se completen.
                Buferin.Text = EntradaDatos.Data(1) 'aqui en este ejemplo, veremos reflejado el buffer(1) que viene desde nuestra tarjeta usb en el textbox "buferin"
            End If
        Else ' Si no se detecto la tarjeta se deshabilitan los botones y se pone en rojo el indicador de conexion
            Conecta.FillColor = Color.Red ' cambiamos el color de nuestro indicador de conexion a Rojo
            Enciende.Enabled = False ' Deshabilitamos el boton de comando "Enciende"
            Apaga.Enabled = False ' Deshabilitamos el boton de comando "Apaga"
        End If
    End Sub

    Private Sub Enciende_Click(sender As System.Object, e As System.EventArgs) Handles Enciende.Click
        SalidaDatos(0) = 0 ' se coloca un cero en la primera variable del buffer nota.-El buffer (0) se utilza para manejo de errores
        SalidaDatos(1) = 1 ' Escribimos un "1" en el buffer(1) que en su momento se vera refeljado en el buffer de nuestra tarjeta.
    End Sub

    Private Sub Apaga_Click(sender As System.Object, e As System.EventArgs) Handles Apaga.Click
        SalidaDatos(0) = 0 ' se coloca un cero en la primera variable del buffer nota.-El buffer (0) se utilza para manejo de errores
        SalidaDatos(1) = 0 ' Escribimos un "O" en el buffer(1) que en su momento se vera reflejado en el buffer de nuestra tarjeta.
    End Sub
End Class
```


----------



## Yrami (Oct 13, 2014)

Ejemplo de Encendido y Apagado de Led en VB2013
Hoola a Todos agradeceria su ayuda porfavor me gustaria aplicar el código de Cibertlan_HID pero en VB2013, he intentado aplicar el código de VB2010 pero me da un error  en

HidDeviceList = HidDevices.Enumerate(&H1781, &H7D0) '

si alguien me puede ayudar, soy principiante agradecería la ayuda que puedan brindarme


----------



## Yetrox (Oct 13, 2014)

Yrami dijo:


> Ejemplo de Encendido y Apagado de Led en VB2013
> Hoola a Todos agradeceria su ayuda porfavor me gustaria aplicar el código de Cibertlan_HID pero en VB2013, he intentado aplicar el código de VB2010 pero me da un error en
> 
> HidDeviceList = HidDevices.Enumerate(&H1781, &H7D0) '
> ...


 

@Yrami Pásate por aquí y podrás realizar tu proyecto con efectividad.
https://es.scribd.com/doc/236646764/Manual-de-Vb-usb-Hid

También algo por aquí:

http://protonbasic.wordpress.com/usb/usb-hid/


----------



## Yrami (Oct 14, 2014)

Muchas gracias Yetrox por tu ayuda creo que esto me servirá mucho


----------



## miborbolla (Oct 16, 2014)

Hola Yrami:

¿Realizaste la "referencia" de la libreria DLL?

Si te fijas en la primera linea del programa lo comento.



> se importan las funciones de la libreria HIDLibrary.dll y a su vez tendremos que referenciarla via el Menu; Proyecto>Agregar Referencia



Ya que si no lo haces, simplemente te aparecen errores como el que comentas, yo pude utilizar este mismo programa en vb 2012 (windows8 32 bits) sin ningún problema, sin embargo reitero  es fundamental hacer la referencia a la HIDLibrary.dll en tu proyecto.

Con respecto al uso del EASYHID, a mi me parece que ya es obsoleto sobre todo en la parte de Windows ya que el código que genera ya no es para nada compatible con .net y motivo por el que yo encontré mejor solución en la librería que comento. Obvio que no deja ser importante la oportunidad que tuvo en su momento,  si visitamos al vestigio del sitio EASYHID, notaremos que ya no esta soportado para nada.

Saludos

Saludos.


----------



## Yrami (Nov 26, 2014)

Hola Miborbolla
He probado el código al que hiciste referencia, solamente que pido que por favor me ayudes este es el error que me lanza en el código, lo que deseo es saber encender y apagar un led desde Visual Basic, agradezco tu colaboración(utilizo VB 2013) Gracias  Saludos


----------



## Yrami (Dic 11, 2014)

Pueden ayudarme a construir físicamente el circuito de encendido del led que se usa en el código al cual se refieren en el código Cibertland escrito en VB quizás el error lo tengo en la construcción física del circuito agradezco su ayuda


----------



## miborbolla (Dic 12, 2014)

Yrami dijo:


> Pueden ayudarme a construir físicamente el circuito de encendido del led que se usa en el código al cual se refieren en el código Cibertland escrito en VB quizás el error lo tengo en la construcción física del circuito agradezco su ayuda



Claro que podemos ayudarte, si nos precisas lo que llevas hecho; este codigo lo tengo mas que probado.

Si fuera necesario, podría postear el diagrama y el codigo en el microcontrolador que utilisas, solo cuentanos de donde debemos partir para ayudar...el programa en VB funciona correctamente partiendo de que ya tienes "enumerado" en windows tu tarjeta o prototipo en el sistema.

Saludos


----------

