Burada Suli’yi, Arduino, Raspberry Pi, mbed ve benzeri açık donanım modül kütüphanelerinin planını duyurmaktan mutluluk duyuyoruz.
Suli nedir?
Bir kız ismi gibi mi geliyor? Aslında Seeed Unified Library Interface’in kısaltması. Bu, yakın gelecekte yapılacaklar listemizde büyük bir madde.
Yüzlerce sensör, aktüatör, ekran ve diğer yararlı modüllerimiz var. Geçmişte, esas olarak Arduino uygulamalarına odaklandık ve yalnızca Arduino Kütüphanesi sağladık. Bu, Raspberry, LauchPad veya MCS51 gibi başka bir platform kullandıysanız, Kütüphanemizi taşımak zorunda kaldığınız anlamına geliyordu ve bazen bu kolay olmuyordu.
Bazen bazı müşteriler bizden bir Arduino dışı platform için bazı kütüphaneler sağlamamızı istediğinde, onlara “hey dostum, bizde sadece Arduino kütüphanesi var.” demekten başka bir şey yapamıyorduk. Müşterilere bu şekilde yanıt vermek bizi kötü hissettiriyordu.
Ve kütüphanelerimizi tüm platformlara uyumlu hale getirmenin bir yolu olup olmadığını düşünüyorduk. Bu gerçekten zor bir görev, ama imkansız değil. Ve sonunda bunu çözmeyi başardık: Suli – Seeed Unified Library Interface, bu sayede kütüphanelerimizin neredeyse tamamı (en az %90) birçok yaygın platforma uyumlu hale getirilebilir veya en azından taşınması kolay hale getirilebilir.
Suli nasıl çalışır?
Aşağıdaki resme bir bakalım

Dört daire olduğunu görebiliriz ve en içteki HW (donanım). Suli, GPIO, I2C, Zamanlayıcı ve UART gibi HW’den kaynakları çağıracak; ardından Suli uyumlu Kütüphane ve ardından Kullanıcı Uygulaması. Tüm Kütüphanelerimiz yalnızca Suli fonksiyonunu çağıracak. Böylece farklı platformlar için sadece Suli’yi taşımamız yeterli, ardından Kütüphane kullanılabilir hale gelir. Bu, farklı platformların kendi Suli’sine sahip olduğu anlamına gelir; Arduino için Suli, Mbed için Suli, Suli için….
Suli hakkında birkaç nokta var:
l Farklı platformların eşdeğer Suli’si vardır.
l Suli uyumlu Kütüphane platformdan bağımsızdır.
l Suli uyumlu Kütüphane, Suli’deki fonksiyonu çağıracaktır.
Suli, Suli.h ve Suli.cpp(.c) olmak üzere iki dosyaya sahiptir. Ve Suli, aşağıdaki fonksiyonu uygulamalıdır, bu fonksiyon
[php]
GPIO türü:
typedef int IO_T; // IO türü
typedef int PIN_T; // pin adı
typedef int DIR_T; // pin yönü
typedef int ANALOG_T; // pin analog
GPIO durumu:
#define HAL_PIN_INPUT INPUT // INPUT ve OUTPUT Arduino IDE’de tanımlandı
#define HAL_PIN_OUTPUT OUTPUT
#define HAL_PIN_HIGH HIGH // HIGH ve LOW Arduino IDE’de tanımlandı
#define HAL_PIN_LOW LOW
Veri türü:
typedef signed char int8;
typedef unsigned char uint8;
typedef signed short int16;
typedef unsigned short uint16;
typedef signed long int32;
typedef unsigned long uint32;
Dijital IO İşlemi:
void seeed_hal_pin_init(IO_T *pio, PIN_T pin); // pin başlat
void seeed_hal_pin_dir(IO_T *pio, DIR_T dir); // pin yönünü ayarla
void seeed_hal_pin_write(IO_T *pio, int16 state); // pin yaz
int16 seeed_hal_pin_read(IO_T *pio); // pin oku
uint16 seeed_hal_pulse_in(IO_T *pio, uint8 state, uint32 timeout);
Analog IO İşlemi:
void seeed_hal_analog_init(ANALOG_T * aio, PIN_T pin);
int16 seeed_hal_analog_read(ANALOG_T * aio);
Gecikme
void seeed_hal_delay_us(uint32 us); // us gecikme
void seeed_hal_delay_ms(uint32 ms); // ms gecikme
Zamanlar
uint32 seeed_hal_millis(void);
uint32 seeed_hal_micros(void);
I2C Arayüzü:
void seeed_hal_i2c_init(void * i2c_device);
uint8 seeed_hal_i2c_write(void * i2c_device, uint8 dev_addr, uint8 *data, uint8 len);
uint8 seeed_hal_i2c_read(void * i2c_device, uint8 dev_addr, uint8 *buff, uint8 *len);
UART:
void seeed_hal_uart_init(void * uart_device, int16 uart_num, uint32 baud);
void seeed_hal_uart_send(void * uart_device, int16 uart_num, uint8 *data, uint16 len);
void seeed_hal_uart_send_byte(void * uart_device, int16 uart_num, uint8 data);
uint8 seeed_hal_uart_read_byte(void * uart_device, int16 uart_num);
uint16 seeed_hal_uart_readable(void * uart_device, int16 uart_num);
Suli’nin dijital IO işlemi, analog IO işlemi, I2C ve Uart fonksiyonlarını içerdiğini görebilirsiniz. Çok kapsamlı değil, ama deneyimlerimize dayanarak, birçok kütüphanemiz için yeterli. Elbette bir gün daha fazla fonksiyona ihtiyaç duyduğumuzu fark edersek, ekleyeceğiz.
[/php]
Sonraki ne olacak?
Planımız, tüm Seeed kütüphanelerini Suli uyumlu hale getirmek ve bazı yaygın platformların Suli’sini taşımaktır. Bu platformlar, ilk aşamada Arduino, Mbed, Mesh Bee, Raspberry, LaunchPad’i içerecektir. Bu çalışmanın Haziran’dan önce tamamlanması bekleniyor. Bizi takipte kalın 😀
Daha fazla bilgi için lütfen https://github.com/Seeed-Studio/Suli adresine bakın
Yazan: Loovee
