Bu eğitim, Seeed tarafından Wio Terminal でUSB Host機能を堪能 adlı yazıdan çevrilmiştir. Yazı, homemadegarbage tarafından yazılmıştır (twitter: @H0meMadeGarbage). Bunu bizimle paylaştıkları için teşekkür ederiz! Daha ilginç projeler için ana sayfalarını ziyaret edin: homemadegarbage.com.
Wio Terminal, USB Host işlevi ile donatılmıştır ve USB Cihazına bağlanabilir. Bu demo da, veri girişi için Wio Terminal’e bir klavye bağlanmıştır. LCD ekranda gösterildiği gibi, farklı tuşlar farklı müzik ölçeklerine atanmış ve birlikte bir melodi çalabilir.
Bu gönderi aşağıdakileri kapsayacaktır:
- 1. USB Host Kütüphanesini Kurun
- 2. Klavyeyi Bağlayın
- 3. Örnek Kod
- 4. Hata Ayıklama
1. USB Host Kütüphanesini Kurun
Wio Terminal’de USB Host kullanmak için, USB Host Library SAMD gereklidir. Kurulum hakkında bilgi almak için buraya göz atın.
2. Klavyeyi Bağlayın
Bu eğitime başvurun ve klavyeyi Wio Terminal’e bağlayın. Ayrıca bir USB-C OTG kablosuna ihtiyacınız olacak.

USB Host işlevi kullanılırken, güç kaynağı ve USB seri iletişim kullanılamaz çünkü USB Type-C arayüzü alınmıştır, bu nedenle Wio Terminal’in arkasındaki 40-pin başlığı kullanacağız.


USB seri dönüşüm kablosunun güç kaynağı 3.3V olarak ayarlanmıştır (Bu demoda kullanılan FTDI USB to Serial Adapter Amazon’da bulunabilir).
Bundan sonra, Serial1 ile çıktı alınabilir ve Tera Term gibi bazı yaygın seri iletişim yazılımları ile izlenebilir.
3. Örnek Kod
Referans:
https://wiki.seeedstudio.com/Wio-Terminal-USBH-Keyboard/
https://wiki.seeedstudio.com/Wio-Terminal-LCD-Basic/
https://wiki.seeedstudio.com/Wio-Terminal-Buzzer/
#include <KeyboardController.h>
#define SerialDebug Serial1
#include"TFT_eSPI.h"
#include"Free_Fonts.h" //header dosyasını dahil et
#define BUZZER_PIN WIO_BUZZER
// USB Kontrolcüsünü başlat
USBHost usb;
// USB'ye klavye kontrolcüsünü bağla
KeyboardController keyboard(usb);
void printKey();
TFT_eSPI tft;
int key;
// Bu fonksiyon tuş basımını yakalar
void keyPressed() {
SerialDebug.print("Basıldı: ");
printKey();
switch (key) {
case 20:
tft.drawString("C",140,100);
playTone(1915, 400);
break;
case 26:
tft.drawString("D",140,100);
playTone(1700, 400);
break;
case 8:
tft.drawString("E",140,100);
playTone(1519, 400);
break;
case 21:
tft.drawString("F",140,100);
playTone(1432, 400);
break;
case 23:
tft.drawString("G",140,100);
playTone(1275, 400);
break;
case 28:
tft.drawString("A",140,100);
playTone(1136, 400);
break;
case 24:
tft.drawString("B",140,100);
playTone(1014, 400);
break;
case 12:
tft.drawString("C+",140,100);
playTone(956, 400);
break;
}
}
// Bu fonksiyon tuş bırakmayı yakalar
void keyReleased() {
SerialDebug.print("Bırakıldı: ");
printKey();
tft.fillScreen(TFT_BLACK);
digitalWrite(BUZZER_PIN, LOW);
}
void printKey() {
// getOemKey() tuşla ilişkili OEM kodunu döndürür
key = keyboard.getOemKey();
SerialDebug.print(" tuş:");
SerialDebug.print(key);
// getModifiers() modifier tuşları ile birlikte bir bit alanı döndürür
int mod = keyboard.getModifiers();
SerialDebug.print(" mod:");
SerialDebug.print(mod);
SerialDebug.print(" => ");
if (mod & LeftCtrl)
SerialDebug.print("L-Ctrl ");
if (mod & LeftShift)
SerialDebug.print("L-Shift ");
if (mod & Alt)
SerialDebug.print("Alt ");
if (mod & LeftCmd)
SerialDebug.print("L-Cmd ");
if (mod & RightCtrl)
SerialDebug.print("R-Ctrl ");
if (mod & RightShift)
SerialDebug.print("R-Shift ");
if (mod & AltGr)
SerialDebug.print("AltGr ");
if (mod & RightCmd)
SerialDebug.print("R-Cmd ");
// getKey() OEM tuşunun ASCII çevirisini döndürür
// modifier'lar ile birleştirilmiş.
SerialDebug.write(keyboard.getKey());
SerialDebug.println();
}
uint32_t lastUSBstate = 0;
void setup(){
tft.begin();
tft.setRotation(3);
tft.fillScreen(TFT_BLACK);
tft.setFreeFont(FSSBO24);
SerialDebug.begin( 115200 );
SerialDebug.println("Klavye Kontrolcü Programı başlatıldı");
if (usb.Init())
SerialDebug.println("USB host başlatılamadı.");
delay( 20 );
// Wio Terminal'de USB Host'u etkinleştirmek için pinleri yapılandır
digitalWrite(PIN_USB_HOST_ENABLE, LOW);
digitalWrite(OUTPUT_CTR_5V, HIGH);
pinMode(BUZZER_PIN, OUTPUT);
}
void loop()
{
// USB görevlerini işle
usb.Task();
uint32_t currentUSBstate = usb.getUsbTaskState();
if (lastUSBstate != currentUSBstate) {
SerialDebug.print("USB durumu değişti: 0x");
SerialDebug.print(lastUSBstate, HEX);
SerialDebug.print(" -> 0x");
SerialDebug.println(currentUSBstate, HEX);
switch (currentUSBstate) {
case USB_ATTACHED_SUBSTATE_SETTLE: SerialDebug.println("Cihaz Bağlandı"); break;
case USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE: SerialDebug.println("Bağlantı kesildi, Cihaz bekleniyor"); break;
case USB_ATTACHED_SUBSTATE_RESET_DEVICE: SerialDebug.println("Cihaz Sıfırlanıyor"); break;
case USB_ATTACHED_SUBSTATE_WAIT_RESET_COMPLETE: SerialDebug.println("Sıfırlama tamamlandı"); break;
case USB_STATE_CONFIGURING: SerialDebug.println("USB Yapılandırılıyor"); break;
case USB_STATE_RUNNING: SerialDebug.println("USB Çalışıyor"); break;
}
lastUSBstate = currentUSBstate;
}
}
void playTone(int tone, int duration) {
for (long i = 0; i < duration * 1000L; i += tone * 2) {
digitalWrite(BUZZER_PIN, HIGH);
delayMicroseconds(tone);
digitalWrite(BUZZER_PIN, LOW);
delayMicroseconds(tone);
}
}
4. Hata Ayıklama
USB Host kodunu yükledikten sonra, Wio Terminal’i USB-C konektörü aracılığıyla PC’ye bağlasanız bile tanınmayacaktır.
Bu durumda, lütfen Wio Terminal’in yanındaki güç düğmesini iki kez hızlıca kaydırarak yeniden yazma moduna alın.
