百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

第一个Luat程序 第一个程序是谁编写的

liebian365 2024-11-14 18:01 24 浏览 0 评论

第一个Luat程序

目录名称

  • 第一个Luat程序
    • 第一个工程
    • 安装编辑器
      • 更改软件各项默认设置
      • 推荐安装的拓展
    • 新建工程
    • 模块化编程
    • 连接硬件
    • 点亮LED小灯
    • 让LED灯闪烁起来

第一个工程

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

  • 已经学习完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_8

LED1

GND

SPI1_DO/GPIO_11

LED2

GND

SPI1_DI/GPIO_12

LED3

GND

UART1_CTS/GPIO_3

LED4

GND

UART1_RTS/GPIO_2

LED5

GND

可以看到,每个管脚都有各种复用功能,我们本文之将其作为普通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,那么就可以自己尝试编写一个流水灯了,这里不再赘述,请大家自己尝试

相关推荐

4万多吨豪华游轮遇险 竟是因为这个原因……

(观察者网讯)4.7万吨豪华游轮搁浅,竟是因为油量太低?据观察者网此前报道,挪威游轮“维京天空”号上周六(23日)在挪威近海发生引擎故障搁浅。船上载有1300多人,其中28人受伤住院。经过数天的调...

“菜鸟黑客”必用兵器之“渗透测试篇二”

"菜鸟黑客"必用兵器之"渗透测试篇二"上篇文章主要针对伙伴们对"渗透测试"应该如何学习?"渗透测试"的基本流程?本篇文章继续上次的分享,接着介绍一下黑客们常用的渗透测试工具有哪些?以及用实验环境让大家...

科幻春晚丨《震动羽翼说“Hello”》两万年星间飞行,探测器对地球的最终告白

作者|藤井太洋译者|祝力新【编者按】2021年科幻春晚的最后一篇小说,来自大家喜爱的日本科幻作家藤井太洋。小说将视角放在一颗太空探测器上,延续了他一贯的浪漫风格。...

麦子陪你做作业(二):KEGG通路数据库的正确打开姿势

作者:麦子KEGG是通路数据库中最庞大的,涵盖基因组网络信息,主要注释基因的功能和调控关系。当我们选到了合适的候选分子,单变量研究也已做完,接着研究机制的时便可使用到它。你需要了解你的分子目前已有哪些...

知存科技王绍迪:突破存储墙瓶颈,详解存算一体架构优势

智东西(公众号:zhidxcom)编辑|韦世玮智东西6月5日消息,近日,在落幕不久的GTIC2021嵌入式AI创新峰会上,知存科技CEO王绍迪博士以《存算一体AI芯片:AIoT设备的算力新选择》...

每日新闻播报(September 14)_每日新闻播报英文

AnOscarstatuestandscoveredwithplasticduringpreparationsleadinguptothe87thAcademyAward...

香港新巴城巴开放实时到站数据 供科技界研发使用

中新网3月22日电据香港《明报》报道,香港特区政府致力推动智慧城市,鼓励公私营机构开放数据,以便科技界研发使用。香港运输署21日与新巴及城巴(两巴)公司签署谅解备忘录,两巴将于2019年第3季度,开...

5款不容错过的APP: Red Bull Alert,Flipagram,WifiMapper

本周有不少非常出色的app推出,鸵鸟电台做了一个小合集。亮相本周榜单的有WifiMapper's安卓版的app,其中包含了RedBull的一款新型闹钟,还有一款可爱的怪物主题益智游戏。一起来看看我...

Qt动画效果展示_qt显示图片

今天在这篇博文中,主要实践Qt动画,做一个实例来讲解Qt动画使用,其界面如下图所示(由于没有录制为gif动画图片,所以请各位下载查看效果):该程序使用应用程序单窗口,主窗口继承于QMainWindow...

如何从0到1设计实现一门自己的脚本语言

作者:dong...

三年级语文上册 仿写句子 需要的直接下载打印吧

描写秋天的好句好段1.秋天来了,山野变成了美丽的图画。苹果露出红红的脸庞,梨树挂起金黄的灯笼,高粱举起了燃烧的火把。大雁在天空一会儿写“人”字,一会儿写“一”字。2.花园里,菊花争奇斗艳,红的似火,粉...

C++|那些一看就很简洁、优雅、经典的小代码段

目录0等概率随机洗牌:1大小写转换2字符串复制...

二年级上册语文必考句子仿写,家长打印,孩子照着练

二年级上册语文必考句子仿写,家长打印,孩子照着练。具体如下:...

一年级语文上 句子专项练习(可打印)

...

亲自上阵!C++ 大佬深度“剧透”:C++26 将如何在代码生成上对抗 Rust?

...

取消回复欢迎 发表评论: