viernes, 23 de enero de 2015

Permiso para el puertos serial de Linux

Bueno, cuando eres nuevo en Linux (mi caso) pero has trabajado con el Arduino en Windows, te abras dado cuenta que para seleccionar lo que antes era el puerto COMX (puerto serial) en Windows en Linux aparece desactivado.

Esto se debe a que el puerto Serial en realidad lo que hace es generar archivos (genera un archivo y lo manda a la PC, la PC genera un archivo y lo manda al dispositivo del puerto), si mal no recuerdo (ya empezamos XD) el archivo esta generado en hexadecimal, Entonces ya sea para leer o escribir el archivo necesitamos permisos como si de un servidor se tratase (de otro modo actuarias igual que un virus :P), pero bueno, vamos al grano:

No se puede comunicar el Arduino con la PC por que el puerto está bloqueado; por lo que tendremos que darle permisos para poder leer, escribir y demás cosas que se puedan hacer con el puerto en cuestión.

Para comenzar debes saber que debes de iniciar una terminal como administrador (o root como le llaman por aquí).

Tipea lo siguiente: ls /dev
Conecta el dispositivo (el Arduino).
Tipea otra ves: ls /dev

Mira que puerto apareció (Ese es el que usa el dispositivo y al que le daremos permisos).
Si tienes más de un Arduino conectado en el cable USB como lo es mi caso, o simplemente quieres saber que Arduino tienes conectado en que puerto, pues tendrás que tener buen ojo, porque te tocara buscar

Tipea: dmesg
En mi caso me aparesio lo sigiente:

[10.250] usb 3-2.2: Manufacturer: Arduino (www.arduino.cc)
[10.250] usb 3-2.2: SerialNumber: 55233132
[10.253] cdc_acm 3-2.2:1.0: ttyACM0: USB ACM device
[10.353] usb 3-2.4: new full-speed USB device number 7 using uhci_hcd
[10.501] usb 3-2.4: Product: Arduino Leonardo
[10.501] usb 3-2.4: Manufacturer: Arduino LLC
[10.504] cdc_acm 3-2.4:1.0: This device cannot do calls on its own. It is not a modem.
[10.504] cdc_acm 3-2.4:1.0: ttyACM1: USB ACM device
[10.512] generic-usb 0003:21:8003: input,hidraw0: USB HID v1.01 Mouse [Arduino LLC Arduino Leonardo] on usb-0000:00:1d.1-2.4/input2

De este modo ya sabemos que el Arduino UNO está en ttyACM0 y el Leonardo en ttyACM1, ahora viene lo sencillo dar permisos, primero debemos movernos a la dirección /dev

Tipea: cd /dev/

tipea: ls -ls ttyACM0
Aparecerá: 0 crw-rw---- 1
tipea: sudo chmod 777 ttyACM0
tipea: ls -ls ttyACM0
Aparecerá: 0 crwxrwxrwx 1

Si lo que te debía aparecer después te sale tal cual entonces fue exitoso el proceso, así que ve y programa tu Arduino que ya podrás hacerlo.


Te preguntas que significan esos códigos? Pues veras, la asignación de permisos se da por medio de números, cada número significa una cosa:

1 = ejecución
2 = escritura
4 = lectura

7 (4+2+1) = lectura, escritura y ejecución


Ahora porque son tres los 7 que se ponen, bueno, pues es que son 3 tipos de usuarios los que pueden tener acceso al dispositivo, al poner 777 quiere decir que todos los usuarios tienen permiso de leer, escribir y ejecutar.

1. Owner (propietario): La persona que el sistema reconoce como dueño de la carpeta o archivo.
2. Group (grupo): Conjunto de usuarios con permisos similares.
3. Other (otros): Cualquier otra persona.



REPASANDO LOS CÓDIGOS:


# dmesg
Busca tu dispositivo
# cd /dev/
# ls -ls ttyACM0
# sudo chmod 777 ttyACM0
# ls -ls ttyACM0

Fuente:
  • https://sites.google.com/site/picandojavacom/arduino/noapareceelpuertousbdelarduinoenubuntulinux
  • http://asignaciondepermisosenlinux.blogspot.mx/2007/08/asignacin-de-permisos-en-linux.html

3 comentarios:

  1. Alguna solución similar para windows?

    ResponderEliminar
    Respuestas
    1. La verdad es que la última versión de Windows que utilice fue win7, asta esa versión los puertos en Windows venían sin restricciones de escritura.

      Eliminar

En lugar de utilizar en los comentarios "Anónimo" utiliza "Nombre/URL", solo para tener referencia en caso de requerir una respuesta al comentario...