Skip to main content

Suli

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

Suliとは何か

女の子の名前のように聞こえますか?実際には、Seeed Unified Library Interface(Seeed統一ライブラリインターフェース)を意味します。これは、近い将来に取り組むべき重要な課題の一つです。

私たちは何百ものセンサー、アクチュエーター、ディスプレイ、その他の便利なモジュールを持っています。過去には主にArduinoアプリケーションに焦点を当て、Arduinoライブラリのみを提供していました。つまり、Raspberry、LauchPad、MCS51などの別のプラットフォームを使用する場合、私たちのライブラリを移植する必要があり、時にはそれが簡単ではありませんでした。

時々、顧客が非Arduinoプラットフォーム用のライブラリを提供するよう求めてきたとき、私たちができることは「すみません、Arduinoライブラリしかありません」と答えることだけでした。このように顧客に返答するのは気分が良くありませんでした。

そこで、私たちはライブラリをすべてのプラットフォームに適合させる方法があるのではないかと考えました。それは非常に困難な課題ですが、不可能ではありません。そして、最終的に解決策を見つけることができました。それがSuli – Seeed Unified Library Interfaceです。これにより、ほぼすべて(少なくとも90%)のライブラリが多くの一般的なプラットフォームに適合し、または移植を容易にすることができます。

Suliはどのように機能するのか

以下の画像をご覧ください。

4つの円があり、最も内側がHW(ハードウェア)です。SuliはHWからリソースを呼び出します。例えば、GPIO、I2C、タイマー、UARTなどです。その後、Suli互換ライブラリ、そしてユーザーアプリケーションが続きます。私たちのすべてのライブラリはSuli関数のみを呼び出します。そのため、異なるプラットフォームに対してはSuliを移植するだけでライブラリを使用することができます。つまり、異なるプラットフォームにはそれぞれのSuliがあります。例えば、Arduino用のSuli、Mbed用のSuliなどです。

Suliに関するいくつかのポイント:

  • 異なるプラットフォームには異なるSuliがあり、それぞれ特定のプラットフォーム用です。
  • Suli互換ライブラリはプラットフォームに依存しません。
  • Suli互換ライブラリはSuli内の関数を呼び出します。

Suliには2つのファイル、Suli.hとSuli.cpp(または.c)があります。そして、Suliは以下の関数を実装する必要があります。

GPIOタイプ:

typedef     int     IO_T;                           // IOタイプ
typedef int PIN_T; // ピン名
typedef int DIR_T; // ピン方向
typedef int ANALOG_T; // ピンアナログ

GPIO状態:

#define HAL_PIN_INPUT   INPUT          // INPUTとOUTPUTはArduino IDEで宣言されています
#define HAL_PIN_OUTPUT OUTPUT
#define HAL_PIN_HIGH HIGH // HIGHとLOWはArduino IDEで宣言されています
#define HAL_PIN_LOW LOW

データタイプ:

typedef signed char     int8;
typedef unsigned char uint8;
typedef signed short int16;
typedef unsigned short uint16;
typedef signed long int32;
typedef unsigned long uint32;

デジタルIO操作:

void suli_pin_init(IO_T *pio, PIN_T pin);      // ピン初期化
void suli_pin_dir(IO_T *pio, DIR_T dir); // ピン方向設定
void suli_pin_write(IO_T *pio, int16 state); // ピン書き込み
int16 suli_pin_read(IO_T *pio); // ピン読み取り
uint16 suli_pulse_in(IO_T *pio, uint8 state, uint32 timeout);

アナログIO操作:

void suli_analog_init(ANALOG_T * aio, PIN_T pin);
int16 suli_analog_read(ANALOG_T * aio);

遅延:

    void suli_delay_us(uint32 us);                 // マイクロ秒単位の遅延
void suli_delay_ms(uint32 ms); // ミリ秒単位の遅延

時間:

    uint32 suli_millis(void);
uint32 suli_micros(void);

I2Cインターフェース:

    void suli_i2c_init(void * i2c_device);
uint8 suli_i2c_write(void * i2c_device, uint8 dev_addr, uint8 *data, uint8 len);
uint8 suli_i2c_read(void * i2c_device, uint8 dev_addr, uint8 *buff, uint8 *len);

UART:

    void suli_uart_init(void * uart_device, int16 uart_num, uint32 baud);
void suli_uart_send(void * uart_device, int16 uart_num, uint8 *data, uint16 len);
void suli_uart_send_byte(void * uart_device, int16 uart_num, uint8 data);
uint8 suli_uart_read_byte(void * uart_device, int16 uart_num);
uint16 suli_uart_readable(void * uart_device, int16 uart_num);

SuliにはデジタルIO操作、アナログIO操作、I2C、UART機能が含まれています。非常に包括的ではないかもしれませんが、私の経験に基づけば、多くのライブラリにとって十分です。もちろん、将来的にさらに多くの機能が必要だと判明した場合には、それを追加する予定です。

次に何をするのか

私たちの計画は、すべてのSeeedライブラリをSuli互換にし、いくつかの一般的なプラットフォームのSuliを移植することです。これらのプラットフォームには、最初の段階でArduino、Mbed、Mesh Bee、Raspberry、LaunchPadが含まれます。この作業は6月までに完了する予定です。続報をお待ちください。

参考資料

技術サポートと製品ディスカッション

私たちの製品を選んでいただきありがとうございます!製品の使用体験がスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、いくつかのコミュニケーションチャネルを用意しています。

Loading Comments...