Série, UART et Android, en tant que connexion avec des microcontrôleurs

image

Nos sujets:


Tablette Android 4.1.1 «DNS AirTab M101w» et les appareils suivants:
1. LaunchPad Tiva C Series TM4C123G
2. Carte Stellaris LaunchPad EK-LM4F120XL
3. Carte Arduino MEGA 2560
4. Carte MSP430 LaunchPad, M430G2553

Et maintenant, dans l'ordre, nous allons connecter toutes ces cartes via USB OTG à la tablette et essayer d'établir une connexion avec elles sans recourir à un accès root.

Objet 1. LaunchPad Tiva C Series TM4C123G


La carte a un connecteur micro-usb "DEBUG", et une LED RGB, nous allons jouer avec eux.
L'esquisse suivante a été téléchargée avec 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); } } 


Dans mon cas, une fois connecté à la tablette, le fichier tty1-1: 1.0 apparaît dans le répertoire / dev / usb /. Essayons d'enregistrer les éléments suivants dans l'émulateur de terminal:
 $ echo 2 > /dev/tty1-1:1.0 $ read s < /dev/tty1-1:1.0 $ echo $s RGB=010 


Et puis, de façon inattendue pour moi, un voyant vert s'allume et j'ai vu une ligne de sortie. Pourquoi de façon inattendue? Parce que j'ai négligé de préconfigurer la connexion, j'ai pointé mon doigt vers le ciel, mais pour quelle raison! Nous ne nous attarderons pas là-dessus. Mais je dirai que dans différentes versions du noyau, les cartes seront définies différemment, et vous ne pouvez pas imaginer une seule ligne de commande sans béquilles (oui, linux est ordinaire) .

Après avoir joué un peu avec les couleurs, en envoyant différents numéros au soi-disant port COM, j'ai commencé à chercher une solution Android universelle. Il y a beaucoup sur Google Play pour "Serial UART", et la plupart des applications fonctionnent comme prévu avec un jouet de Texas Instruments. Mais mes tentatives pour trouver un fil compatible avec l'Open Source se sont soldées par presque rien. Pour Arduino, j'ai trouvé une bibliothèque sympa, mais plus sur celle ci-dessous ...

Sujet 2: Carte Stellaris LaunchPad EK-LM4F120XL


Si je comprends bien, il s'agit de la version précédente de notre premier sujet de test et se comporte exactement de la même manière avec l'androïde. Mais l'actuel Energia 0101E0010, en essayant de remplir le croquis, ne voit pas cette carte (Windows 8).
 No ICDI device with USB VID:PID 1cbe:00fd found! Failed! 


Par conséquent, je viens d'activer la sortie du chemin binaire final vers la console et de la charger manuellement à l'aide du LM Flash Programmer.

Sujet 3: Carte Arduino MEGA 2560


Modifions un peu le croquis et nous ne clignoterons qu'avec une seule LED.
Remplissez avec l'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); } } 


Nous nous connectons à la tablette, nous voyons à nouveau le fichier tty1-1: 1.0 dans le répertoire / dev / usb /, nous répétons l'expérience:
 $ echo 1 > /dev/tty1-1:1.0 

puis je trouve que la LED clignote 2 fois avec une période d'environ 100 ms et s'éteint. D'accord, j'essaye ce qui suit:
 $ read s < /dev/tty1-1:1.0 

Et puis le terminal a gelé en prévision ... D'accord, Ctrl + C
 $ echo $s 

Il est logique qu'il n'y ait rien dans la sortie.

Mais ce n'était qu'une introduction, il y a un merveilleux projet Physicaloid Library . Tout d'abord, ouvrez la bibliothèque en tant que projet Android ordinaire dans Eclipse. Maintenant, créez un nouveau projet et dans ses propriétés dans l'élément android, Bibliothèque, cliquez sur Ajouter ... et sélectionnez Bibliothèque Physicaloid. Maintenant, pour appuyer sur le bouton pour envoyer la chaîne «1» à l'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; } 

Je ne pense pas avoir besoin de dire comment lire les données reçues, car tout est dans la documentation de la bibliothèque.

Sujet 4: Board MSP430 LaunchPad, M430G2553.


Cette carte ne voulait pas du tout fonctionner avec mon matériel. Ce n'est tout simplement pas déterminé par le système, et les informations sur le périphérique USB se bloquent uniquement lorsqu'elles sont actualisées.

Le résultat:


J'aimerais une telle bibliothèque pour travailler avec les cartes Tiva C Series. Refaites-vous alors que la compétence ne suffit pas.

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


All Articles