Serial, UART, dan Android, sebagai koneksi dengan mikrokontroler

gambar

Subjek kami:


Tablet Android 4.1.1 "DNS AirTab M101w" dan perangkat berikut:
1. Launchiva Tiva C Series TM4C123G
2. Stellaris LaunchPad EK-LM4F120XL Board
3. Papan Arduino MEGA 2560
4. Papan MSP430 LaunchPad, M430G2553

Dan sekarang, secara berurutan, kami akan menghubungkan semua papan ini melalui USB OTG ke tablet dan mencoba membuat koneksi dengan mereka tanpa menggunakan akses root.

Subjek 1. Tiva C Series TM4C123G LaunchPad


Papan ini memiliki konektor "DEBUG" mikro-usb, dan LED RGB, kami akan bermain dengannya.
Sketsa berikut diunggah dengan 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); } } 


Dalam kasus saya, ketika terhubung ke tablet, file tty1-1: 1.0 muncul di direktori / dev / usb /. Mari kita coba daftar berikut ini di emulator terminal:
 $ echo 2 > /dev/tty1-1:1.0 $ read s < /dev/tty1-1:1.0 $ echo $s RGB=010 


Dan kemudian, tiba-tiba bagi saya, lampu hijau menyala dan saya melihat garis keluaran. Kenapa tiba-tiba? Karena saya lalai melakukan pra-konfigurasi koneksi, menjulurkan jari saya ke langit, tetapi untuk seberapa baik! Kami tidak akan memikirkan ini. Tetapi saya akan mengatakan bahwa dalam versi inti yang berbeda, papan akan didefinisikan secara berbeda, dan Anda tidak dapat membayangkan satu baris perintah tanpa kruk (ya, linux biasa) .

Setelah bermain sedikit dengan warna, mengirimkan nomor yang berbeda ke port COM, saya mulai mencari solusi Android universal. Ada banyak hal di Google Play untuk β€œSerial UART”, dan sebagian besar aplikasi berfungsi seperti yang diharapkan dengan mainan dari Texas Instruments. Tetapi upaya saya untuk menemukan utas yang kompatibel dengan Open Source berakhir hampir tidak ada. Untuk Arduino saya menemukan perpustakaan keren, tetapi lebih dari itu di bawah ini ...

Subjek 2: Stellaris LaunchPad EK-LM4F120XL Board


Seperti yang saya pahami, ini adalah versi sebelumnya dari subjek tes pertama kami dan berperilaku persis sama dengan android. Tetapi Energia 0101E0010 saat ini, ketika mencoba mengisi sketsa, tidak melihat papan ini (Windows 8).
 No ICDI device with USB VID:PID 1cbe:00fd found! Failed! 


Oleh karena itu, saya hanya menyalakan output dari jalur biner terakhir ke konsol dan memuatnya secara manual menggunakan LM Flash Programmer.

Subjek 3: Papan Arduino MEGA 2560


Mari kita ubah sketsa sedikit dan kita hanya akan berkedip dengan satu LED.
Isi dengan Arduino IDE
 #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); } } 


Kami terhubung ke tablet, sekali lagi kami melihat file tty1-1: 1.0 di direktori / dev / usb /, kami ulangi percobaan:
 $ echo 1 > /dev/tty1-1:1.0 

dan kemudian saya menemukan bahwa LED berkedip 2 kali dengan periode sekitar 100 ms dan padam. Oke, saya mencoba yang berikut:
 $ read s < /dev/tty1-1:1.0 

Dan kemudian terminal membeku untuk mengantisipasi ... Oke, Ctrl + C
 $ echo $s 

Adalah logis bahwa tidak ada dalam output.

Tapi ini hanya perkenalan, ada satu proyek yang luar biasa dari Perpustakaan Physicaloid . Pertama, buka perpustakaan sebagai proyek android biasa di Eclipse. Sekarang buat proyek baru dan dalam propertinya di item android, Library klik Add ... dan pilih Physicaloid Library. Sekarang, untuk menekan tombol untuk mengirim string "1" ke 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; } 

Saya rasa saya tidak perlu memberi tahu cara membaca data yang diterima, karena semuanya ada dalam dokumentasi perpustakaan.

Subjek 4: Board MSP430 LaunchPad, M430G2553.


Papan ini sama sekali tidak mau bekerja dengan perangkat keras saya. Ini tidak ditentukan oleh sistem, dan info Perangkat USB hanya hang ketika disegarkan.

Hasilnya:


Saya ingin perpustakaan seperti itu untuk bekerja dengan papan Tiva C Series. Remake diri Anda saat skill tidak cukup.

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


All Articles