合宙Air780EG開発ボードチュートリアル - sysライブラリの紹介 (LuatOSベース)

sysライブラリ

sysライブラリのインターフェース関数については、sysインターフェース関数を参照してください。

一、sys.taskInit(func, arg1, arg2, argN)

タスク(コルーチン)を作成します。

パラメータ:

  • function: 実行する関数。匿名関数、ローカル関数、またはグローバル関数を指定できます。
  • any: 渡す引数1(任意)
  • any: 渡す引数2(任意)
  • any: 渡す引数N(任意)

例:

-- LuaToolsはPROJECTとVERSION情報を必要とします
PROJECT = "AIR_780eg"
VERSION = "1.0.0"

_G.sys = require("sys")

-- 関数と引数を指定してタスクを開始
sys.taskInit(function(name, delay)
    sys.wait(delay)
    print("タスク", name, "が実行されました")
end, "サンプル1", 2000)

-- 引数なしでタスクを開始
sys.taskInit(function()
    print("引数なしのタスクが実行されました")
end)

sys.run()

どちらの方法でも使用可能です。引数は要件に応じて省略できます。

二、sys.timerStart(func, timeout, arg1, arg2, argN)

タイマーを作成します。この関数内では `sys.waitXXX` を使用できません。

例:

PROJECT = "AIR_780eg"
VERSION = "1.0.0"

_G.sys = require("sys")

-- 1000ミリ秒後にメッセージを表示するタイマー
sys.timerStart(function(msg)
    print("タイマーがトリガーされました:", msg)
end, 1000, "こんにちは")

-- 5000ミリ秒後にメッセージを表示するタイマー
sys.timerStart(function()
    print("5秒経過しました")
end, 5000)

sys.run()

タイマーの間隔に注意してください。

三、sys.subscribe(topic, func), sys.publish(topic, arg1, arg2, argN)

特定のトピックチャネルを購読し、メッセージを発行します。

例:

-- LuaToolsはPROJECTとVERSION情報を必要とします
PROJECT = "AIR_780eg"
VERSION = "1.0.0"

_G.sys = require("sys")

-- センサーデータ更新のコールバック関数
local function sensor_callback(data)
    print("センサー更新受信:", data)
end

-- トピックを購読
sys.subscribe("SENSOR_UPDATE", sensor_callback)

-- トピックにメッセージを発行
sys.publish("SENSOR_UPDATE", {temp=25, humidity=60})

-- 別の購読者
sys.subscribe("SENSOR_UPDATE", function(data)
    print("別の購読者: センサー更新受信", data.temp)
end)

sys.run()

四、sys.waitUntil(topic, timeout)

タスクは指定された時間または特定のトピックメッセージを待ちます。

例:

-- LuaToolsはPROJECTとVERSION情報を必要とします
PROJECT = "AIR_780eg"
VERSION = "1.0.0"

_G.sys = require("sys")

sys.taskInit(function()
    print("待機は不要です")
    sys.waitUntil("DATA_READY", 5000)
    print("メッセージを受信しました")
end)

sys.taskInit(function()
    sys.wait(3000)
    sys.publish("DATA_READY")
    print("メッセージを発行")
end)

sys.run()

上記の例では、`sys.waitUntil` の前の文が先に表示され、3秒後にメッセージが発行されると、`sys.waitUntil` がメッセージを検出して、次の文が実行されます。

例 (タイムアウト):

-- LuaToolsはPROJECTとVERSION情報を必要とします
PROJECT = "AIR_780eg"
VERSION = "1.0.0"

_G.sys = require("sys")

sys.taskInit(function()
    print("待機は不要です")
    sys.waitUntil("DATA_READY", 5000)
    print("メッセージを受信しませんでした(タイムアウト)")
end)

sys.taskInit(function()
    sys.wait(10000)
    sys.publish("DATA_READY")
    print("メッセージを発行")
end)

sys.run()

タイムアウト期間が終了してもメッセージが発行されない場合、次のコードが自動的に実行されます。

`sys.waitUntil` の戻り値をキャッチしてみてください。例: `local result, data = sys.waitUntil("test", 3000)`

五、sys.timerLoopStart(func, timeout, arg1, arg2, argN)

ループタイマーを作成します。この関数内では `sys.waitXXX` を使用できません。

例:

PROJECT = "AIR_780eg"
VERSION = "1.0.0"

_G.sys = require("sys")

-- 1000ミリ秒ごとに実行されるループタイマー
sys.timerLoopStart(function()
    print("ループタイマー:", os.time())
end, 1000)

-- 別のタスク
sys.taskInit(function()
    sys.waitUntil("SYSTEM_READY", 1000) -- この行は省略可能
    local counter = 0
    while true do
        sys.wait(2000) -- 2000ミリ秒待機
        counter = counter + 1
        print("メインタスク: ", counter, "回実行")
    end
end)

sys.run()
-- sys.run()の後には何も追加しないでください!!!!!

タグ: LuatOS Air780EG lua IoT RTOS

5月25日 17:31 投稿