Serial, UART e Android, como uma conexão com microcontroladores

imagem

Nossos assuntos:


Tablet Android 4.1.1 "DNS AirTab M101w" e os seguintes dispositivos:
1. Tiva C Series TM4C123G LaunchPad
2. Placa Stellaris LaunchPad EK-LM4F120XL
3. Placa Arduino MEGA 2560
4. Placa MSP430 LaunchPad, M430G2553

E agora, em ordem, conectaremos todas essas placas via USB OTG ao tablet e tentaremos estabelecer uma conexão com elas sem recorrer ao acesso root.

Assunto 1. Tiva C Series TM4C123G LaunchPad


A placa possui um conector micro-usb “DEBUG” e um LED RGB, vamos brincar com eles.
O seguinte esboço foi carregado com o 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); } } 


No meu caso, quando conectado ao tablet, o arquivo tty1-1: 1.0 aparece no diretório / dev / usb /. Vamos tentar registrar o seguinte no emulador de terminal:
 $ echo 2 > /dev/tty1-1:1.0 $ read s < /dev/tty1-1:1.0 $ echo $s RGB=010 


E então, inesperadamente para mim, uma luz verde acende e eu vi uma linha de saída. Por que inesperadamente? Porque eu esqueci de pré-configurar a conexão, cutuquei meu dedo no céu, mas pelo quão bem! Nós não vamos insistir nisso. Mas direi que em versões diferentes do núcleo, as placas serão definidas de maneira diferente e você não pode imaginar uma única linha de comando sem muletas (sim, o linux é comum) .

Tendo brincado um pouco com as cores, enviando números diferentes para a chamada porta COM, comecei a procurar uma solução universal para Android. Há muito no Google Play para "Serial UART", e a maioria dos aplicativos funciona como esperado com um brinquedo da Texas Instruments. Mas minhas tentativas de encontrar um segmento compatível com o Open Source terminaram em quase nada. Para o Arduino, encontrei uma biblioteca interessante, mas mais sobre isso abaixo ...

Assunto 2: Placa Stellaris LaunchPad EK-LM4F120XL


Pelo que entendi, esta é a versão anterior do nosso primeiro assunto de teste e se comporta exatamente da mesma forma que no android. Mas o atual Energia 0101E0010, ao tentar preencher o esboço, não vê este quadro (Windows 8).
 No ICDI device with USB VID:PID 1cbe:00fd found! Failed! 


Portanto, ativei a saída do caminho binário final para o console e o carreguei manualmente usando o LM Flash Programmer.

Assunto 3: Placa Arduino MEGA 2560


Vamos mudar um pouco o esboço e piscaremos apenas com um LED.
Preencha com o IDE do 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); } } 


Nós nos conectamos ao tablet, novamente vemos o arquivo tty1-1: 1.0 no diretório / dev / usb /, repetimos o experimento:
 $ echo 1 > /dev/tty1-1:1.0 

e então eu acho que o LED pisca 2 vezes com um período de cerca de 100 ms e apaga. Ok, eu tento o seguinte:
 $ read s < /dev/tty1-1:1.0 

E então o terminal congelou em antecipação ... Ok, Ctrl + C
 $ echo $s 

É lógico que não há nada na saída.

Mas isso foi apenas uma introdução, existe um maravilhoso projeto Physicaloid Library . Primeiro, abra a biblioteca como um projeto android comum no Eclipse. Agora crie um novo projeto e em suas propriedades no item android, Library, clique em Add ... e selecione Physicaloid Library. Agora, pressione o botão para enviar a string "1" para o 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; } 

Acho que não preciso dizer como ler os dados recebidos, porque tudo está na documentação da biblioteca.

Assunto 4: Placa de lançamento MSP430, M430G2553.


Esta placa não queria trabalhar com meu hardware. Simplesmente não é determinado pelo sistema, e as informações do dispositivo USB ficam suspensas quando atualizadas.

O resultado:


Eu gostaria que uma biblioteca desse tipo trabalhasse com os quadros da série C da Tiva. Refaça a si mesmo enquanto a habilidade não é suficiente.

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


All Articles