Serie, UART y Android, como conexión con microcontroladores

imagen

Nuestros sujetos:


Tableta Android 4.1.1 "DNS AirTab M101w" y los siguientes dispositivos:
1. Tiva C Series TM4C123G LaunchPad
2. Placa Stellaris LaunchPad EK-LM4F120XL
3. Placa Arduino MEGA 2560
4. Placa MSP430 LaunchPad, M430G2553

Y ahora, en orden, conectaremos todas estas placas a través de USB OTG a la tableta e intentaremos establecer una conexión con ellas sin recurrir al acceso de root.

Tema 1. Tiva C Series TM4C123G LaunchPad


La placa tiene un conector "DEPURACIÓN" micro-usb, y un LED RGB, jugaremos con ellos.
El siguiente boceto se cargó con Energia IDE:
char data = ' '; //    boolean rs, gs, bs = false; //   void setup() { //  pinMode(RED_LED, OUTPUT); pinMode(GREEN_LED, OUTPUT); pinMode(BLUE_LED, OUTPUT); Serial.begin(9600); // Serial    9600 } void loop() { if (Serial.available()){ //    data = Serial.read(); //  switch (data){ //  case '1': rs = !rs; break; case '2': gs = !gs; break; case '3': bs = !bs; break; } //  digitalWrite(RED_LED, rs); digitalWrite(GREEN_LED, gs); digitalWrite(BLUE_LED, bs); //    Serial.print("RGB="); Serial.print(rs); Serial.print(gs); Serial.println(bs); } } 


En mi caso, cuando está conectado a la tableta, el archivo tty1-1: 1.0 aparece en el directorio / dev / usb /. Intentemos registrar lo siguiente en el emulador de terminal:
 $ echo 2 > /dev/tty1-1:1.0 $ read s < /dev/tty1-1:1.0 $ echo $s RGB=010 


Y luego, inesperadamente para mí, se enciende una luz verde y vi una línea de salida. ¿Por qué inesperadamente? Debido a que olvidé preconfigurar la conexión, empujé mi dedo hacia el cielo, ¡pero qué bien! No nos detendremos en esto. Pero diré que en diferentes versiones del núcleo, los tableros se definirán de manera diferente, y no se puede imaginar una sola línea de comando sin muletas (sí, Linux es normal) .

Después de jugar un poco con los colores, enviando diferentes números al llamado puerto COM, comencé a buscar una solución universal de Android. Hay mucho en Google Play para "Serial UART", y la mayoría de las aplicaciones funcionan como se espera con un juguete de Texas Instruments. Pero mis intentos de encontrar un hilo compatible con Open Source terminaron en casi nada. Para Arduino encontré una biblioteca genial, pero más sobre eso a continuación ...

Asunto 2: Placa Stellaris LaunchPad EK-LM4F120XL


Según tengo entendido, esta es la versión anterior de nuestro primer sujeto de prueba y se comporta exactamente igual con el Android. Pero el Energia 0101E0010 actual, cuando intenta completar el boceto, no ve esta placa (Windows 8).
 No ICDI device with USB VID:PID 1cbe:00fd found! Failed! 


Por lo tanto, acabo de encender la salida de la ruta binaria final a la consola y la cargué manualmente usando el Programador LM Flash.

Tema 3: Junta Arduino MEGA 2560


Cambiemos un poco el boceto y parpadearemos solo con un LED.
Rellene con el IDE Arduino
 #define LED 13 char data = ' '; boolean ls = false; void setup() { pinMode(LED, OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available()){ data = Serial.read(); switch (data){ case '1': ls = !ls; break; } digitalWrite(LED, ls); Serial.print("LED="); Serial.println(ls); } } 


Nos conectamos a la tableta, nuevamente vemos el archivo tty1-1: 1.0 en el directorio / dev / usb /, repetimos el experimento:
 $ echo 1 > /dev/tty1-1:1.0 

y luego encuentro que el LED parpadea 2 veces con un período de aproximadamente 100 ms y se apaga. Bien, estoy intentando lo siguiente:
 $ read s < /dev/tty1-1:1.0 

Y luego la terminal se congeló en anticipación ... De acuerdo, Ctrl + C
 $ echo $s 

Es lógico que no haya nada en la salida.

Pero esto fue solo una introducción, hay un maravilloso proyecto de la Biblioteca Physicaloid . Primero, abra la biblioteca como un proyecto ordinario de Android en Eclipse. Ahora cree un nuevo proyecto y en sus propiedades en el elemento android, haga clic en Biblioteca Agregar ... y seleccione Biblioteca Physicaloid. Ahora, para presionar el botón para enviar la cadena "1" al arduino:
 public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.button1: mPhysicaloid = new Physicaloid(this); if(mPhysicaloid.open()) { byte[] buf = "1".getBytes(); mPhysicaloid.write(buf, buf.length); mPhysicaloid.close(); } break; } 

No creo que necesite decir cómo leer los datos recibidos, porque todo está en la documentación de la biblioteca.

Asunto 4: Placa MSP430 LaunchPad, M430G2553.


Esta placa no quería funcionar con mi hardware en absoluto. Simplemente no está determinado por el sistema, y ​​la información del dispositivo USB simplemente se cuelga cuando se actualiza.

El resultado:


Me gustaría una biblioteca de este tipo para trabajar con las placas Tiva C Series. Rehazte mientras la habilidad no sea suficiente.

Source: https://habr.com/ru/post/444110/


All Articles