指南-Luat二次开发教程指南-第一个Luat程序

第一个Luat程序

第一个工程

本文将从零开始,引导你建立第一个工程。在阅读本文前,请确保:

  • 已经学习完Lua语法相关知识
  • 已经学会使用Luatools烧录代码
  • 有一台运行Microsoft Windows系统的电脑
  • 准备好了一个Luat开发板

学习本文后,你将会掌握:

  • 新建一个全新的Luat工程
  • 简单控制模块的GPIO

安装编辑器

代码编辑器有很多可供选择,比如notepad++、Sublime Text,这里我们选择功能强大的Visual Studio Code(vscode)作为主力编辑器。

  1. 下载安装
    打开官网:https://code.visualstudio.com/
    点击官网那个大大的绿色按键,下载

    下载完后直接安装
    安装时注意改一下这个选项
  2. 更改语言
    首先,我们要把软件改成中文的
    在左侧点击拓展输入chinese安装中文语言拓展

更改软件各项默认设置

打开软件,在软件页面,按下快捷键Ctrl+,(逗号),打开设置页面

  1. 中文字体使用微软雅黑
    Editor: Font Family内容改为如下:
    Consolas, 'Microsoft Yahei UI Light','Courier New', monospace

  2. 空格和tab显示小点和箭头占位符

    显示效果是这样

  3. 关闭复制当前行功能

  4. 自动猜测文件编码
    这个可以准确识别大部分文件的编码,当然有时候还是会识别错误,但总比每次都要手动选好多了

  5. 末尾自动插入新行

  6. 自动去除每行末尾多余的空格

推荐安装的拓展

由于有很多重名插件,请仔细查看我截图所示的插件,保证作者相同再安装

  1. Lua
    Lua Language Server coded by Lua
    自动补全、高亮、静态检查等功能的插件,国人出品

  2. LUAT
    LUAT接口代码自动补全

  3. indent-rainbow
    缩进自动彩色,大大提高编程效率(前提是你按规范缩进了)

  4. Rainbow Brackets
    括号彩色分组,防止你看错括号对

新建工程

在你觉得适当的位置,新建一个文件夹,名为LUAT-LED,使用你的代码编辑器打开该文件夹,vscode如下图所示操作:

打开后,在编辑器左侧的文件夹中,右击空白处,新建文件,输入文件名main.lua,回车键保存:

接着,在新建的文件夹中添加如下代码,完成最主要的main.lua文件的编写:

--必须在这个位置定义PROJECT和VERSION变量  
--PROJECT:ascii string类型,可以随便定义,只要不使用,就行  
--VERSION:ascii string类型,如果使用Luat物联云平台固件升级的功能,必须按照"X.X.X"定义,X表示1位数字;否则可随便定义  
PROJECT = "LED-TEST"  
VERSION = "0.0.1"  

--根据固件判断模块类型  
moduleType = string.find(rtos.get_version(),"8955") and 2 or 4  

--加载日志功能模块,并且设置日志输出等级  
--如果关闭调用log模块接口输出的日志,等级设置为log.LOG_SILENT即可  
require "log"  
LOG_LEVEL = log.LOGLEVEL_TRACE  

require "sys"  

require "net"  
--每1分钟查询一次GSM信号强度  
--每1分钟查询一次基站信息  
net.startQueryAll(60000, 60000)  

--加载硬件看门狗功能模块  
--根据自己的硬件配置决定:1、是否加载此功能模块;2、配置Luat模块复位单片机引脚和互相喂狗引脚  
--合宙官方出售的Air201开发板上有硬件看门狗,所以使用官方Air201开发板时,必须加载此功能模块  
--如果用的是720 4g模块,请注释掉这两行  
require "wdt"  
wdt.setup(pio.P0_30, pio.P0_31)  


--加载网络指示灯功能模块  
--根据自己的项目需求和硬件配置决定:1、是否加载此功能模块;2、配置指示灯引脚  
--合宙官方出售的Air800和Air801开发板上的指示灯引脚为pio.P0_28,其他开发板上的指示灯引脚为pio.P1_1  
require "netLed"  
netLed.setup(true,moduleType == 2 and pio.P1_1 or pio.P2_0,moduleType == 2 and nil or pio.P2_1)--自动判断2/4g默认网络灯引脚配置  
--网络指示灯功能模块中,默认配置了各种工作状态下指示灯的闪烁规律,参考netLed.lua中ledBlinkTime配置的默认值  
--如果默认值满足不了需求,此处调用netLed.updateBlinkTime去配置闪烁时长  

--加载错误日志管理功能模块【强烈建议打开此功能】  
--如下2行代码,只是简单的演示如何使用errDump功能,详情参考errDump的api  
require "errDump"  
errDump.request("udp://ota.airm2m.com:9072")  

--加载远程升级功能模块【强烈建议打开此功能】  
--如下3行代码,只是简单的演示如何使用update功能,详情参考update的api以及demo/update  
-- PRODUCT_KEY = "xxxxxx"  
-- require "update"  
-- update.request()  


--启动系统框架  
sys.init(0, 0)  
sys.run()  

我们将main.lua和基本的task库文件烧录到开发板中(不烧录会的请看第一章),会发现:并没有什么事情发生(因为代码基本是空的啊2333)

模块化编程

在编写lua功能时,我们一般会把相似功能的代码放到同一个文件中,写完后只需要在main.lua中添加require语句即可,所以我们需要将main.lua结尾改成如下形式:

....上面一堆代码省略  

--加载远程升级功能模块【强烈建议打开此功能】  
--如下3行代码,只是简单的演示如何使用update功能,详情参考update的api以及demo/update  
-- PRODUCT_KEY = "xxxxxx"  
-- require "update"  
-- update.request()  

require "ledtest"    --新加上的代码  

--启动系统框架  
sys.init(0, 0)  
sys.run()  

添加完后,使用和新建main.lua文件相同的方式,新建一个新的文件ledtest.lua
我们在ledtest.lua的第一行可以先加上如下一句话:
module(..., package.seeall) --使得文件中的函数在何处都可调用

连接硬件

注意:这里演示用的是2g模块,4g模块请详细阅读下面代码注释中的信息进行修改,代码不可以直接拿去用!!

由于我这里使用的是普通的S9开发板,和一个配套的LED灯小主板,所以我直接将其连接到了双排针上,插入方式如下图:

为了照顾其他未使用S9开发板的读者,我将led的电气连接在下方进行标识,有条件的可以手动按下文进行连接(用的是Air202模块,其他模块请根据情况自行修改):

引脚名称灯序号另一端连接哪里
SPI1_CLK/GPIO_8LED1GND
SPI1_DO/GPIO_11LED2GND
SPI1_DI/GPIO_12LED3GND
UART1_CTS/GPIO_3LED4GND
UART1_RTS/GPIO_2LED5GND

可以看到,每个管脚都有各种复用功能,我们本文之将其作为普通GPIO口使用

点亮LED小灯

模块中几乎所有的函数都可以在手册中找到,所以我们也可以直接进行搜索
打开openluat手册的软件资料部分:https://doc.openluat.com/wiki/21?wiki_page_id=2052
在网页左边选择Luat API手册,可以看到所有接口都被整理好放到了这里,点击对应的模块接口就可以找到我们需要的函数接口:

这样我们就明白这个改如何点亮LED小灯了,我们将ledtest.lua改成如下代码:

module(..., package.seeall)  
require"pins"  --用到了pin库,该库为luatask专用库,需要进行引用  

-- GPIO 0到GPIO 31表示为pio.P0_0到pio.P0_31 。  
-- GPIO 32到GPIO XX表示为pio.P1_0到pio.P1_(XX-32),例如GPIO33 表示为pio.P1_1  
if moduleType == 2 then  
    pmd.ldoset(5,pmd.LDO_VMMC)  --使用某些GPIO时,必须在脚本中写代码打开GPIO所属的电压域,配置电压输出输入等级,这些GPIO才能正常工作  
end  
--注意!!!4G模块无需设置电压域!  


--设置led的GPIO口  
local led1 = pins.setup(pio.P0_8,0)--如果你用的是4G模块,请更改这个gpio编号  
local led2 = pins.setup(pio.P0_11,0)--如果你用的是4G模块,请更改这个gpio编号  
local led3 = pins.setup(pio.P0_12,0)--如果你用的是4G模块,请更改这个gpio编号  
local led4 = pins.setup(pio.P0_3,0)--如果你用的是4G模块,请更改这个gpio编号  
local led5 = pins.setup(pio.P0_2,0)--如果你用的是4G模块,请更改这个gpio编号  

--将gpio口都置为高电平  
led1(1)  
led2(1)  
led3(1)  
led4(1)  
led5(1)  

更改完保存后,将改好的文件全部烧入模块中,查看效果
如果一切正常的话,五个灯都会正常被点亮
led1(1)改为led1(0)即可熄灭第一个灯,以此类推,可以多尝试更改着玩一下,再看下一部分

让LED灯闪烁起来

LED灯已经可以点亮了,那么我们就要让它动起来
我们可以在wiki页查到,开启一个定时器函数为sys.timerStart(fnc, ms, ...),那么我们可以将代码改成如下样式:

module(..., package.seeall)  
require"pins"  --用到了pin库,该库为luatask专用库,需要进行引用  

-- GPIO 0到GPIO 31表示为pio.P0_0到pio.P0_31 。  
-- GPIO 32到GPIO XX表示为pio.P1_0到pio.P1_(XX-32),例如GPIO33 表示为pio.P1_1  
if moduleType == 2 then  
    pmd.ldoset(5,pmd.LDO_VMMC)  --使用某些GPIO时,必须在脚本中写代码打开GPIO所属的电压域,配置电压输出输入等级,这些GPIO才能正常工作  
end  
--注意!!!4G模块无需设置电压域!  

--设置led的GPIO口  
local led1 = pins.setup(pio.P0_8,0)--如果你用的是4G模块,请更改这个gpio编号  
local led2 = pins.setup(pio.P0_11,0)--如果你用的是4G模块,请更改这个gpio编号  
local led3 = pins.setup(pio.P0_12,0)--如果你用的是4G模块,请更改这个gpio编号  
local led4 = pins.setup(pio.P0_3,0)--如果你用的是4G模块,请更改这个gpio编号  
local led5 = pins.setup(pio.P0_2,0)--如果你用的是4G模块,请更改这个gpio编号  

local ledon = false --led是否开启  
function changeLED()  
    if ledon then  
        led1(1)  
        led2(1)  
        led3(1)  
        led4(1)  
        led5(1)  
    else  
        led1(0)  
        led2(0)  
        led3(0)  
        led4(0)  
        led5(0)  
    end  
    ledon = not ledon  
    sys.timerStart(changeLED,1000)--一秒后执行指定函数  
end  

changeLED() --开机后立刻运行该函数  

保存后烧入程序即可,如果不出意外,五个LED灯就应该一秒亮一秒灭了
既然学会了延时、点亮LED、熄灭LED,那么就可以自己尝试编写一个流水灯了,这里不再赘述,请大家自己尝试

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值