您现在的位置是:网站首页> 硬件
小众语言硬件开发
- 硬件
- 2023-05-15
- 751人已阅读
小众语言硬件开发
lua脚本语言
初识Lua
Lua 是一种轻量小巧的脚本语言,它用标准C语言编写并以源代码形式开放。这意味着什么呢?这意味着Lua虚拟机可以很方便的嵌入别的程序里,从而为应用程序提供灵活的扩展和定制功能。而整个Lua虚拟机编译后仅仅一百余K,经过适当的裁剪还能做到更小,十分适合嵌入式的开发。
变量
--新建三个变量,并赋值
year = 1926
month = 8
day = 7
--打印出三个变量的值
print(year,month,day)
a, b, c = 0, 1
print(a,b,c)
--输出0 1 nil
a, b = a+1, b+1, b+2
print(a,b)
--输出1 2
a, b, c = 0
print(a,b,c)
--输出0 nil nil
算数运算符
+ 加法
- 减法
* 乘法
/ 除法
% 取余,求出除法的余数
^ 乘幂,计算次方
- 负号,取负值
字符串
--双引号间的一串字符
str1 = "Lua"
--单引号间的一串字符
str2 = 'Lua'
--[[和]]--间的一串字符
str3 = [[Lua]]
str4 = [[使用双括号时,甚至能包含换行数据
换行了
最后一行]]
string拼接
我们使用..来表示字符串拼接符号,如下面的示例代码:
print('abc'..'def')
str1 = '123'
str2 = '999'
print(str1..str2)
number转string
n = 123
s = 'm/s'
string转number
n = 123
s = '2333'
result = tonumber(s) + n
print(result)
result = tostring(n)..s
逻辑运算
==
等于,检测两个值是否相等,相等返回 true,否则返回 false
~=
不等于,检测两个值是否相等,相等返回 false,否则返回 true
>
大于,如果左边的值大于右边的值,返回 true,否则返回 false
<
小于,如果左边的值大于右边的值,返回 false,否则返回 true
>=
大于等于,如果左边的值大于等于右边的值,返回 true,否则返回 false
<=
小于等于, 如果左边的值小于等于右边的值,返回 true,否则返回 false
逻辑运算符
and
逻辑与操作符。 若 A 为 false,则返回 A,否则返回 B
or
逻辑或操作符。 若 A 为 true,则返回 A,否则返回 B
not
逻辑非操作符。与逻辑运算结果相反,如果条件为 true,逻辑非为 false
语句
分支判断
n = 5
if n < 10 then
print('n小于10')
end
if 条件1 then
满足条件1
elseif 条件2 then
不满足条件1,但是满足条件2
else
前面条件全都不满足
end
函数
function hello()
print('Hello world!')
end
hello()
local变量
之前我们创建的变量,都是全局变量,这种变量在代码运行周期从头到尾,都不会被销毁,而且随处都可调用。
我们可以使用local标志来新建临时变量,使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。
a = 123
function add()
local n = a+2
print(n)
end
add()
print(n)
函数参数
function add(a,b)
print(a+b)
end
add(1,2)
函数返回值
function add(a,b)
return a+b
end
all = add(1,2)
--这里all的值就是3了
print(all)
返回多个值
function rectangle(a,b)
--补全代码
end
area,len = rectangle(1,2)
--结果:
--面积area为2
--周长len为6
print(area,len)
认识数组
t = {1,3,8,5,4}
print(t[1]) --打印1
print(t[3]) --打印8
t[2] = 99 --更改第二个元素的值
print(t[2]) --打印99
t[6] = 2 --凭空新建第六个元素并赋值
print(t[6]) --打印2
print(t[10])
实际上,table中可以包括任意类型的数据
t = {"abc",223,",..a",123123}
t = {
function() return 123 end,
function() print("abc") end,
function(a,b) return a+b end,
function() print("hello world") end,
}
t[1]()
t[2]()
t[3]()
t[4]()
下标进阶
在上一节,我们学习了如何自定义下标,其实在Lua中,下标也可以是字符串,如下面的例子
t = {
["apple"] = 10,
banana = 12,
pear = 6,
}
--使用["下标"] = 值
--和 下标 = 值
--都是正确写法
--当第二种方式有歧义时,应该用第一种方式
--可以用下面两种方式访问:
print(t["apple"])
--输出10
print(t.apple)
--输出10
--当第二种方式有歧义时,应该用第一种方式
可见,在使用string作为下标时,table的灵活性提升了一共数量级
t = {} -- 空table
t["new"] = "新的值"
print(t.new)
--输出 新的值
t = {
apple = {
price = 7.52,
weight = 2.1,
},
banana = {
price = 8.31,
weight = 1.4,
year = '2018'
},
year = '2019'
}
print(
t.price,
t.apple.price,
t.banana.weight,
t.year
)
Lua全局变量与table
实际上,在Lua中,所有的全局变量全部被存放在了一共大table中,这个table名为:_G
n = 123--新建变量
print(n)--输出123
print(_G.n)--输出123
_G.abc = 1--相当于新建全局变量
print(abc)--输出1
_G["def"] = 23--相当于新建全局变量
print(def)--输出23
--甚至你可以像下面这样
_G.print("hello")
_G["print"]("world")
table删减
table.insert (table, [pos ,] value)
在(数组型)表 table 的 pos 索引位置插入 value,其它元素向后移动到空的地方。pos 的默认值是表的长度加一,即默认是插在表的最后。
table.remove (table [, pos])
在表 table 中删除索引为 pos(pos 只能是 number 型)的元素,并返回这个被删除的元素,它后面所有元素的索引值都会减一。pos 的默认值是表的长度,即默认是删除表的最后一个元素。
local a = {1, 8} --a[1] = 1,a[2] = 8
table.insert(a, 1, 3) --在表索引为1处插入3
print(a[1], a[2], a[3])
table.insert(a, 10) --在表的最后插入10
print(a[1], a[2], a[3], a[4])
-->打印的结果:
--3 1 8
--3 1 8 10
local a = { 1, 2, 3, 4}
print(table.remove(a, 1)) --删除速索引为1的元素
print(a[1], a[2], a[3], a[4])
print(table.remove(a)) --删除最后一个元素
print(a[1], a[2], a[3], a[4])
-->打印的结果:
--1
--2 3 4 nil
--4
--2 3 nil nil
while循环
local result = 0
local num = 1
while num <= 100 do
result = result + num
num = num + 1
end
for循环
for 临时变量名=开始值,结束值,步长 do
循环的代码
end
local result = 0
for i=1,100 do
result = result + i
end
print(result)
中断循环
result = 0
for i=1,100 do
result = result + i
if result > 100 then
result = result - i
break
end
end
print(result)
string函数
string.sub
string.rep
string.len
string.format
string.char
string.byte
string.find
string.gsub
跨文件调用
在编写代码时,随着逻辑逐渐复杂,我们的代码量也会变大。虽然有函数可以把一部分代码逻辑封装起来,但是所有代码都放到一个文件里,显然也不是个好办法。
所以我们需要将一些代码放到不同文件中,通过文件来区分这些代码的功能
我们新建一个文件叫tools.lua,把这个函数放进去,现在,整个文件如下面这样:
tools.lua
---函数功能:
-- 生成从1-max的table
-- @输入值:table的最大值
-- @返回: table结果
-- @例子: local list = getNumberList(10)
local function getNumberList(max)
local t = {}
for i=1,max do
table.insert(t,i)
end
return t
end
--手动返回一个table,包含了上面的函数
return {
getNumberList = getNumberList,
}
现在,我们封装的这个函数就能在其他文件里被调用了,具体代码如下:
--引用tools.lua文件,并加载
local tool = require("tools")
local list = tool.getNumberList(12)
MicroPython脚本语言
nodejs脚本语言
nodemcu
NodeMCU,是一个开源的物联网平台,它包含了可以运行在esp8266 Wi-FiSoC芯片之上的固件,以及基于ESP-12模组的硬件,使用Lua脚本语言编程,当然也支持AT指令。
小智从安信可官方购入的nodemcu默认就带Lua固件的,但版本较旧,因此从nodemcu-build构建了一个新版本刷入。
整个过程小智来讲述一下。
刷固件需要以下准备:
1.到nodemcu-build.com构建自己需要的固件版本
选好需要的模块,填写好邮箱,等待一会邮箱就会收到固件的下载链接。
2.安装nodemcu驱动,USB线连接好硬件和电脑,根据提示安装
3.下载Esplorer,安装java sdk 1.8
4.下载ESP8266Flasher,刷固件用
做好上述准备后,我们先打开ESP8266Flasher
选中“config”选项卡,点“齿轮”,选择刚下载好的固件文件
上一篇:硬件学习及经验总结笔记
下一篇:常用经验及模块接口相关编程收集