LuatOS
直播中

辛一

7年用户 99经验值
擅长:可编程逻辑 嵌入式技术
私信 关注

【合宙Air105开发板试用体验】体验不一样的嵌入式脚本开发

本帖最后由 辛一_e1e 于 2022-6-23 23:38 编辑

首先赞一下合宙的LuatOS wiki,做的真的很详细:https://wiki.luatos.com/index.html。手上拿到的这款Air105核心板是基于Air105 MCU设计的一款开发板,开发板尺寸迷你,通过邮票孔设计引出Pin脚,很容易进行拓展连接。 all.jpg Air105 MCU是一款强大的MCU,内核采用Cortex M4F CPU,运算能力有一定的保证。同时配有640KB的大内存,以及4MB的Flash,可以让开发者不必纠结代码结构,大胆“放飞自我”。接口方面有基本的UART、SPI、IIC等串行接口,还带有USB和摄像头DCMI,可以说是应有尽有。另外ADC、DAC、timer等模块可以丰富MCU的应用场景,CRC和TRNG模块能够在信息安全中发挥作用。 blk.JPG 总体来看 Air105 MCU真是一块宝。虽然采用ARM的MCU,但是合宙帮我们开发者封装了一层脚本框架LuatOS,基于这个框架可以大大提高开发效率。既然是基于LuatOS,那么就不能使用Keil进行开发。合宙官方推荐的vscode+插件的形式,插件可以在vscode内搜索“LuatOS-SOC推荐拓展包”,有了这个插件可以完成一些LuatOS下代码自动补全的功能。 lsoc.JPG 脚本的烧录是通过串口进行的,需要用到的工具是Luatools。Luatools是一个综合工具,可以完成串口打印debug,也可以完成固件更新,以及脚本上传。 串口打印.JPG 下载脚本.JPG LuatOS的Wiki主页为我们提供不少库和外设的使用方式。其中sys和log基本上是必选的。sys负责嵌入式操作系统任务的创建和调度等任务,加入sys库LuatOS才能够正常运行。
  1. local sys = require "sys"
而log库可以输出代码信息,方便调试。log可以分为debug、info、warn和error不同等级,可以根据需求屏蔽不同等级的输出,方便了程序调试。
  1. log.setLevel("WARN") -- warn以下等级的log不会输出print(log.getLevel())log.debug(PROJECT, "debug message")log.info(PROJECT, "info message")log.warn(PROJECT, "warn message")log.error(PROJECT, "error message")
为了保证程序不会跑飞,还可以加入看门狗
  1. -- 添加硬狗防止程序卡死wdt.init(15000)  -- 初始化watchdog设置为15ssys.timerLoopStart(wdt.feed, 10000)  -- 10s喂一次狗
通过上面三个库的使用,可以看到LuatOS很容易上手,大大提高了开发效率。

最后,利用温度传感器和PWM配合,完成了一个自适应的风扇调节系统。
  1. sys.taskInit(function()
  2.     local raw = 0
  3.     local mv  = 0
  4.     while 1 do
  5.         adc.open(1)
  6.         sys.wait(500)
  7.         raw, mv = adc.read(1)
  8.         log.debug("adc", "adc1", mv)
  9.                 if mv >= 1500 then
  10.                         pwm.open(5, 1000, 100)
  11.                 elseif mv >= 1000 then
  12.                         pwm.open(5, 1000, 80)
  13.                 elseif mv >= 800 then
  14.                         pwm.open(5, 1000, 60)
  15.                 elseif mv >= 500 then
  16.                         pwm.open(5, 1000, 30)
  17.                 elseif mv >= 100 then
  18.                         pwm.open(5, 1000, 20)
  19.                 else
  20.                         pwm.open(5, 1000, 0)
  21.                 end

  22.         adc.close(1)
  23.         sys.wait(500)
  24.     end

  25. end)


更多回帖

发帖
×
20
完善资料,
赚取积分