TODOPIC

Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: Marttyn en 29 de Agosto de 2009, 02:11:57

Título: Controlar iPod e iPhone con PIC
Publicado por: Marttyn en 29 de Agosto de 2009, 02:11:57
Hola chicos!
Hace tiempo que no pongo algo productivo por el foro. Asi que aqui voy  :mrgreen:
Para el que no lo sepa, me dedico a hacer espectaculos, y muchas veces, cuando actuo sólo es para mi muy importante tener el control del sonido. Hasta ahora lo que hacia era tener la mesa de sonido cerca y mi iPhone conectado a ella. Tiraba la musica con el iPhone, pero "manualmente"... cosa que no es muy estetico, escenicamente hablando, ya que hay que ir hasta la mesa de sonido cada vez que quieres subir o bajar el volumen, o pasar de cancion.
Hace unos dias me entere que Apple hace tiempo libero su "Apple Accessory Protocol" (AAP), que es el que hace posible comunicarse con los iPods y iPhones mediante comunicacion serie. Encontre que habia algo hecho con un dsPIC, pero la verdad no entendi el codigo  :( asi que me puse a investigar el protocolo y despues de unas cuantas horas investigando y probando logre descifrar su funcionamiento  :-/ :-/
Hace un ratito logre terminar el mini proyecto, que no es mas que un mando a distancia para controlar mi iPhone (o iPod) por radio frecuencia con un 12F683.
Los comandos implementados son:
-Play/Pause
-Vol +
-Vol -
-Skip >> / Fast foward
-<< Skip / Rewind

Ademas de estos comandos hay muchos otros, pero estos son lo que me hacian falta a mi.
Os dejo el codigo fuente para que sirva como base para ampliar/adaptar a sus necesidades.

Ademas, hay dos paginas que os daran la informacion basica para poder empezar:
http://pinouts.ru/PortableDevices/ipod_pinout.shtml
http://nuxx.net/wiki/Apple_Accessory_Protocol

Espero que a alguien le sea de ayuda.
Yo, al ver que mediante el puerto del iPhone, y con el AAP puedo controlar unas cuantas cosas, me estoy planteando hacer un manos libres para el coche, aunque supongo que me sera mas barato de tiempo y recursos comprarme un "Parrot"  :D

Salu2

PS: por lo visto esta lleno el servidor y no se pueden subir archivos. El codigo es muy cortito y es el siguiente:
Código: C
  1. #include <12F683.h>
  2. #device adc=8
  3.  
  4. #FUSES XT,NOWDT,NOMCLR,PUT,INTRC_IO,PROTECT
  5.  
  6. //GPIO
  7. #byte GP    =  0x05
  8.  
  9. #define TX      PIN_A0
  10. #bit BTPLAY     = GP.1
  11. #bit D3         = GP.2
  12. #bit D2         = GP.3
  13. #bit D1         = GP.4
  14. #bit D0         = GP.5
  15.  
  16. #use delay(clock=8000000)
  17. #use fast_io(a)
  18. #use rs232(baud=19200, xmit=TX)
  19.  
  20. //Leer http://nuxx.net/wiki/Apple_Accessory_Protocol
  21. //Algunos botones tienen una funcion diferente segun sea una pulsacion corta o larga.
  22. //Para simular una pulsacion larga hay que enviar SOLO UNA VEZ el comando
  23. //y este se mantendra "presionado" hasta que se envie el comando "released"
  24.  
  25. //                | Header  |Len |Mode| Command |Check (0x100-Len-Mode-Command)
  26. char INIT[]             = {0xFF,0x55,0x03,0x00,0x01,0x02,0xFA}; //inicializar "simple remote"
  27.  
  28. char RELEASED[] = {0xFF,0x55,0x03,0x02,0x00,0x00,0xFB}; //fin de pulsacion
  29. char PLAY[]             = {0xFF,0x55,0x03,0x02,0x00,0x01,0xFA}; //play/pause
  30. char VOLUP[]    = {0xFF,0x55,0x03,0x02,0x00,0x02,0xF9}; //volumen +
  31. char VOLDW[]    = {0xFF,0x55,0x03,0x02,0x00,0x04,0xF7}; //volumen -
  32. char NEXT[]             = {0xFF,0x55,0x03,0x02,0x00,0x08,0xF3}; //cancion siguiente/fast foward
  33. char PREV[]             = {0xFF,0x55,0x03,0x02,0x00,0x10,0xEB}; //cancion anterior/rewind
  34.  
  35. //Rutinas
  36. void Send_AAP(char *APP);
  37.  
  38. void main() {
  39.         setup_adc_ports(NO_ANALOGS);
  40.         setup_adc(ADC_CLOCK_INTERNAL);
  41.         setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  42.         setup_timer_1(T1_DISABLED);
  43.         setup_timer_2(T2_DISABLED,0,1);
  44.         setup_ccp1(CCP_OFF);
  45.         setup_comparator(NC_NC);
  46.         setup_vref(FALSE);
  47.  
  48.         setup_oscillator(OSC_8MHZ);
  49.         set_tris_a(0b00111110);
  50.        
  51.         Send_AAP(&INIT[0]);     //inicializar el ipod en modo "simple remote"
  52.        
  53.         do{
  54.                 if(BTPLAY == 0){
  55.                         Send_AAP(&PLAY[0]);
  56.                         Send_AAP(&RELEASED[0]);
  57.                         while(BTPLAY == 0){delay_ms(20);}       //antirebote
  58.                 }
  59.                
  60.                 if(D0 == 1){
  61.                         Send_AAP(&VOLUP[0]);    //comando volumen +
  62.                         while(D0 == 1){delay_ms(20);}   //espera a que se deje de presionar (mientas el volumen sigue subiendo)
  63.                         Send_AAP(&RELEASED[0]); //detiene la subida de volumen
  64.                 }
  65.                
  66.                 if(D1 == 1){
  67.                         Send_AAP(&VOLDW[0]);    //comando volumen -
  68.                         while(D1 == 1){delay_ms(20);}   //espera a que se deje de presionar (mientas el volumen sigue bajando)
  69.                         Send_AAP(&RELEASED[0]); //detiene la bajada de volumen
  70.                 }
  71.                
  72.                 if(D2 == 1){    //pulsacion corta: skip>> ; pulsacion larga: fast foward
  73.                         Send_AAP(&NEXT[0]);
  74.                         while(D2 == 1){delay_ms(20);}
  75.                         Send_AAP(&RELEASED[0]);
  76.                 }
  77.                
  78.                 if(D3 == 1){    //pulsacion corta: <<skip ; pulsacion larga: rewind
  79.                         Send_AAP(&PREV[0]);
  80.                         while(D3 == 1){delay_ms(20);}
  81.                         Send_AAP(&RELEASED[0]);
  82.                 }
  83.         }while(TRUE);
  84.  
  85. }
  86. void Send_AAP(char *AAP){
  87.         int x;
  88.        
  89.         for(x=0;x<7;x++){
  90.                 putc(AAP[x]);
  91.         }
  92. }
Título: Re: Controlar iPod e iPhone con PIC
Publicado por: AKENAFAB en 29 de Agosto de 2009, 02:23:57

Genial Martyn!

XD solo que no tengo ipod :(

Exelente , saludos!
Título: Re: Controlar iPod e iPhone con PIC
Publicado por: Nocturno en 29 de Agosto de 2009, 02:50:54
Magnífico, mago. Felicidades.
Título: Re: Controlar iPod e iPhone con PIC
Publicado por: migsantiago en 29 de Agosto de 2009, 10:31:20
Bastante útil  :mrgreen:

Felicidades por echarlo a andar Marttyn
Título: Re: Controlar iPod e iPhone con PIC
Publicado por: Marttyn en 29 de Agosto de 2009, 14:42:47
Foto y videito... no se ve muy bien, pero al menos da la idea  :D

(http://i299.photobucket.com/albums/mm317/Marttyn/Electronica/th_ABCD0003.jpg) (http://i299.photobucket.com/albums/mm317/Marttyn/Electronica/ABCD0003.jpg)

Título: Re: Controlar iPod e iPhone con PIC
Publicado por: xocas en 29 de Agosto de 2009, 15:18:40
que bueno... la magia de la serie 12F... como me gustan esos enanos.

y me recordó un enlace ya perdido en mis marcadores: http://www.zerosign.net/index.php/2006/07/28/ibrella-control-your-ipod-with-an-umbrella/ muy útil para quienes vivimos en Galicia.

un saludo
Título: Re: Controlar iPod e iPhone con PIC
Publicado por: ra.zamorano en 03 de Septiembre de 2009, 22:06:10
Bastante agradable tu post, muy bueno el tema hace un par de años andaba buscando algo por el estilo, no entiendo mucho C pero es legible y con hartos comentarios apartes los links que diste son bastante explicativos, lo unico que me queda es saber como consigo los conectores para el ipod o que tipo de cable con el conector debo comprar y faenar para poder aplicarlo.
Título: Re: Controlar iPod e iPhone con PIC
Publicado por: Marttyn en 05 de Septiembre de 2009, 11:24:03
Hola! Bienvenido al foro!
Los conectores los consigo comprando accesorios para iPod y luego desarmandolos  :P
En ebay hay accesorios (mandos a distancia, cables de datos, cables AV...) para iPod por apenas un par de euros si buscas en vendedores chinos. Estos conectores son normales, pero solo te traeran los pines que el accesorio utiliza. Por ejemplo, en el cable de datos te vienen solo cuatro pines: USB+, Gnd, D+ y D-. Tendras quitar los pines de su lugar y ponerlo en el que a ti te convenga.
Sino tambien hay una pagina que te vende conectores "virgenes" con todos los pines por 2 dolares creo. http://www.chargeconverter.com/shop/connector.htm
Sparkfun tambien tiene conectores, pero son mas caros.
Salu2 y esperamos verte por el foro!
Título: Re: Controlar iPod e iPhone con PIC
Publicado por: J1M en 05 de Septiembre de 2009, 12:10:40
Genial cacharro!!!! enhorabuena mago marttyn!
Título: Re: Controlar iPod e iPhone con PIC
Publicado por: Marttyn en 06 de Septiembre de 2009, 20:30:53
 :mrgreen: Gracias por los elogios!
Pero como no todo puede ser halagos tengo que decir que el viernes probe el aparatito y funciono decentemente bien, pero en otro espectaculo el sabado no funciono como esperaba. Dependiendo del ruido electromagnetico del entorno o de la distancia al receptor puede que haya que subir un poco el antirrebote. Al darle a cancion siguiente a veces pasaba dos canciones seguidas en vez de una. Asi que ya sabeis...  :P
Título: Re: Controlar iPod e iPhone con PIC
Publicado por: NANO1985 en 07 de Septiembre de 2009, 00:48:42
muuuuy bueeena marttyn!!!... sencillamente espectacular!
felicitciones y saludos!
 8)
Título: Re: Controlar iPod e iPhone con PIC
Publicado por: amyver en 08 de Septiembre de 2009, 16:35:08
Marttyn espectacular!!!!! :twisted: :twisted:

gracias nos sera de mucha utilidad chauuuuuuuuuuuu............. :-/ :-/ :-/ :-/
Título: Re: Controlar iPod e iPhone con PIC
Publicado por: AKENAFAB en 07 de Enero de 2011, 09:57:40
Muy bueno que te quedo.

No se como me perdi el desenlace  :mrgreen:

Ahora si tengo ipod xD

Espero conseguir un dock para hacer las pruebas.

Saludos!!!
-------------------------------

Marttyn , que dock pediste??

Creo que me iria bien con el de 15° de inclinacion para montar en pcb.
-----

Ya identifique el que usas en la página xD .