编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

一种全新开发方式的物联网操作系统 - LuatOS

wxchong 2024-07-06 00:44:26 开源技术 10 ℃ 0 评论

一说到国产操作系统,可能很多同学会觉得根本就没有这种东西。但是实际上,国内有很多优秀的国产操作系统,虽然有些并不是供普通消费者使用的,但是它们都各有特色,并且有些系统在其专业细分领域使用率已经很高了,今天推荐的 LuatOS 就是这样一款物联网操作系统。

项目名称:LuatOS

项目作者:Wendal

开源许可协议:MIT

LuatOS 是运行在嵌入式硬件的实时操作系统,只需要少量内存的 flash 空间就能运行,用户编写 lua 代码就可完成各种功能。

  1. 基于Lua 5.3.5
  2. 低内存需求, 最低32kb, 96kb flash空间
  3. 硬件抽象层兼容M3/arm/risc-v等
  4. 可测试,可模拟(qemu)
  5. 在线升级
  6. 可裁剪,可扩展

总体架构

代码示例节选

local sys = require("sys")


sys.subscribe("WLAN_READY", function ()
    print("!!! wlan ready event !!!")
    -- 马上进行时间同步
    socket.ntpSync()
end)


disp.init("ssd1306")
display_str("Booting ...")


-- 配网回调
sys.subscribe("WLAN_PW_RE", function(ssid, password)
    if ssid then
        log.info(TAG, "airkiss GOT", ssid, password)
        local conf = {ssid=ssid,password=password}
        json.encodeFile(conf, "/wlan.json")
    else
        log.info(TAG, "airkiss fail")
    end
end)


-- 业务流程, 联网后定时发送温度数据到服务器
sys.taskInit(function()
    while 1 do
        if wlan.ready() == 1 then
            sys.wait(1000)
            local temp = (sensor.ds18b20(28) or "")
            display_str("Temp: " .. temp  .. " rssi:" .. tostring(wlan.rssi()))
            local t = {"GET /api/w60x/report/ds18b20?mac=", wlan.get_mac(), "&temp=", temp, " HTTP/1.0\r\n",
                    "Host: site0.cn\r\n",
                    "User-Agent: LuatOS/0.1.0\r\n",
                        "\r\n"}
            socket.tsend("site0.cn", 80, table.concat(t))
            log.info("network", "tsend complete, sleep 5s")
            sys.wait(5000)
        else
            log.warn("main", "wlan is not ready yet")
            sys.waitUntil("WLAN_READY", 30000)
        end
    end
end)


-- 主循环, 必须加
sys.

测试 GPS

--引用gps.lua、sys.lua
require"gps"
require"sys"

--定义函数prtgps,在trace中输出gps定位信息
--是否3D定位,经纬度,速度,方向角,海拔
local function prtgps()
print("gps", gps.is3dfix(), gps.getgpslocation(), gps.getgpsspd(), gps.getgpscog(), gps.getaltitude())
end

--设置定时器,每10秒调用一次prtgps函数
sys.timer_loop_start(prtgps, 10000)
--开机后,初始化gps;gps授时同步时钟
gps.init()
gps.settimezone(gps.GPS_BEIJING_TIME)

测试 MQTT


--引用mqtt.lua
require"mqtt"

--mqtt connect成功的回调函数
local function connectedcb()
--订阅主题
mqttclient:subscribe({topic="/event0",qos=1})
--发布消息
mqttclient:publish("/event0", "qos1data", 1)
end

--创建mqtt client
mqttclient = mqtt.create("TCP", "lbsmqtt.airm2m.com", 8083)
--连接到 mqtt 服务器
mqttclient:connect("clientID", 240, "username", "password", connectedcb)

项目地址:https://gitee.com/wendal/LuatOS

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表