您现在的位置是:网站首页> 硬件

小众语言硬件开发

  • 硬件
  • 2023-05-15
  • 750人已阅读
摘要

小众语言硬件开发

合宙支持的lua脚本语言

MicroPython脚本语言

nodejs脚本语言

nodemcu



lua脚本语言

点击查看在线教程

点击查看合宙的LuatOS API教程

初识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

NodeMCU,是一个开源的物联网平台,它包含了可以运行在esp8266 Wi-FiSoC芯片之上的固件,以及基于ESP-12模组的硬件,使用Lua脚本语言编程,当然也支持AT指令。

小智从安信可官方购入的nodemcu默认就带Lua固件的,但版本较旧,因此从nodemcu-build构建了一个新版本刷入。

整个过程小智来讲述一下。

刷固件需要以下准备:


1.到nodemcu-build.com构建自己需要的固件版本

https://nodemcu-build.com/

1.png



选好需要的模块,填写好邮箱,等待一会邮箱就会收到固件的下载链接。


2.安装nodemcu驱动,USB线连接好硬件和电脑,根据提示安装


3.下载Esplorer,安装java sdk 1.8


4.下载ESP8266Flasher,刷固件用


做好上述准备后,我们先打开ESP8266Flasher

选中“config”选项卡,点“齿轮”,选择刚下载好的固件文件

2.png






Top