Nerds Pledge Magnanimously

    @ux-xu/konashi-web-bluetooth
    TypeScript icon, indicating that this package has built-in type declarations

    0.3.2 • Public • Published

    konashi 3.0 SDK for Web Bluetooth

    konashi 3.0 を Web Bluetooth で操作することができます。

    開発言語は以下のものに対応しております。

    • JavaScript(ES2015, async await)
    • typescript

    konashi 公式ドキュメント:https://konashi.ux-xu.com/

    import { Konashi } from "@ux-xu/konashi-web-bluetooth";
    
    window.addEventListener("click", async () => {
      const k = await Konashi.find();
      await k
        .pinMode(Konashi.PIO0, Konashi.OUTPUT)
        .catch((error) => console.log(error));
      let i = 0;
      setInterval(async () => {
        k.digitalWrite(Konashi.PIO0, i % 2 === 0 ? Konashi.HIGH : Konashi.LOW);
      }, 1000);
    });

    動作環境

    Web Bluetooth API 公式 Github の Implementation Status をご確認ください。

    https://github.com/WebBluetoothCG/web-bluetooth/blob/master/implementation-status.md

    導入

    Windows, Mac, Linux

    Chrome をインストール・アップグレードする。

    Android

    Chrome をインストール・アップグレードする。

    iOS

    WebBLE(有料)アプリをインストールする。
    https://apps.apple.com/jp/app/webble/id1193531073

    機能と関数について

    現在対応している機能は以下の通りです。

    • Digital I/O
    • Digital Input Notification
    • Analog Input
    • PWM
    • UART

    対応していない機能は以下の通りです

    • Analog Output(未実装)
    • SPI(未実装)
    • I2C(未検証)

    関数について

    typescript の定義を利用して説明します。

    定数

    Konashi.HIGH で呼びだせる定数です。

    static get HIGH(): number;  // Digital HIGH
    static get LOW(): number;  // Digital LOW
    static get OUTPUT(): number;  // mode: Digital Pin OUTPUT
    static get INPUT(): number;  // mode: Digital Pin INPUT
    static get PULLUP(): number;  // mode: Digital pullup
    static get NO_PULLS(): number;  // mode: Digital no pullup
    
    // ピンの定義
    static get PIO0(): number;
    static get PIO1(): number;
    static get PIO2(): number;
    static get PIO3(): number;
    static get PIO4(): number;
    static get PIO5(): number;
    static get PIO6(): number;
    static get PIO7(): number;
    static get AIO0(): number;
    static get AIO1(): number;
    static get AIO2(): number;
    static get I2C_SDA(): number;
    static get I2C_SCL(): number;
    
    // PWM
    static get PWM_DISABLE(): number;  // PWM mode: disable
    static get PWM_ENABLE(): number;  // PWM mode: enable
    static get PWM_ENABLE_LED_MODE(): number;  // PWM mode: LED mode
    static get PWM_LED_PERIOD(): number;  // PWM constant: LED mode period
    
    // analog I/O
    static get ANALOG_REFERENCE(): number;  // konashi3.0 のアナログ値 1300mV
    
    // I2C
    static get I2C_DATA_MAX_LENGTH(): number;
    static get I2C_DISABLE(): number;
    static get I2C_ENABLE(): number;
    static get I2C_ENABLE_100K(): number;
    static get I2C_ENABLE_400K(): number;
    static get I2C_STOP_CONDITION(): number;
    static get I2C_START_CONDITION(): number;
    static get I2C_RESTART_CONDITION(): number;
    
    // UART
    static get UART_RATE_2K4(): number;
    static get UART_RATE_9K6(): number;
    static get UART_DATA_MAX_LENGTH(): number;
    static get UART_DISABLE(): number;
    static get UART_ENABLE(): number;
    
    static get _serviceUUID(): string;
    static get defaultFilter(): object;

    クラス関数

    konashi のインスタンスを作成するために利用する関数群

    static _createUUID(part: string): string;
    static find(willAutoConnect: boolean, options: Object): Promise<Konashi>;

    以下のサンプルは,

    ①konashiを見つけて自動的に接続する ②cocorokitを見つけて接続する

    const konashi = await Konashi.findk();
    const konashi = await Konashi.find({
      filters: [{ namePrefix: "cocorokit" }],
      optionalServices: [Konashi._serviceUUID],
    });

    インスタンス関数

    find 関数に willAutoConnect = false を設定した場合,別途接続する必要があります.

    connect(): void;
    disconnect(): void;

    以下,見つけて接続するサンプルです.

    const konashi = await Konashi.find(willAutoConnect = false);
    await konashi.connect().catch(async error => {
      whatyouwant();
    });

    接続したkonashiの情報を取得する関数

    get _c12cUUIDs(): { [key: string]: string };
    get isConnected(): boolean;
    get deviceName(): string;

    デジタルピンの入出力

    // start Digital I/O {
    pinMode(pin: number, mode: number): Promise<void>;
    pinModeAll(modes: number): Promise<void>;
    pinPullUp(pin: number, mode: number): Promise<void>;
    digitalWrite(pin: number, value: number): Promise<void>;
    digitalWriteAll(values: number): Promise<void>;
    digitalRead(pin: number): Promise<number>;
    startDigitalInputNotification(callback: (arg0: number) => void): Promise<void>;
    stopDigitalInputNotification(): Promise<void>;
    // close Digital I/O }
    const konashi = await Konashi.find();
    
    async () => {
      await konashi.pinMode(Konashi.PIO0, Konashi.OUTPUT);
      await konashi.digitalWrite(Konashi.PIO0, Konashi.HIGH);
    }
    
    async () => {
      await konashi.pinModeAll(0b11111111);
      await konashi.digitalWriteAll(0b11111111);
    }
    
    async () => {
      await konashi.pinMode(Konashi.PIO0, Konashi.INPUT)
      const p0_input = await konashi.digitalRead(Konashi.PIO0);
    }
    
    const printValue = (value) => {
      console.log("received: " + value);
    }
    
    konashi.startDigitalInputNotification(printValue);
    
    // if input pin 1 value changed to HIGH
    // received: 0b00000010
    
    konashi.startDigitalInputNotification(printValue);

    アナログピンの入力

    // start Analog Input {
    analogRead(pin: number): Promise<number>;
    // close Analog Input }
    const konashi = await Konashi.find();
    const analog0_value = konashi.analogRead(Konashi.AIO0);

    PWM の操作

    // start PWM {
    pwmMode(pin: number, mode: number): Promise<void>;
    pwmPeriod(pin: number, period: number): Promise<void>;
    pwmDuty(pin: number, duty: number): Promise<void>;
    pwmWrite(pin: number, ratio: number): Promise<void>;
    // close PWM }
    const konashi = await Konashi.find();
    konashi.pwmMode(Konashi.PIO1, Konashi.PWM_ENABLE_LED_MODE);
    konashi.pwmWrite(Konashi.PIO1, 100);

    その他デバイスの操作

    // start Hardware control {
    reset(): Promise<void>;
    readBatteryLevel(): Promise<number>;
    readSignalStrength(): Promise<number>;
    // close Hardware control }

    Install

    npm i @ux-xu/konashi-web-bluetooth

    DownloadsWeekly Downloads

    2

    Version

    0.3.2

    License

    Apache-2.0

    Unpacked Size

    31.9 kB

    Total Files

    5

    Last publish

    Collaborators

    • siwai
    • yusakuxxu