关于Espruino
什么是Espruino?
Espruino是一款适用于微控制器的JavaScript解释器,可以快速轻松地进行嵌入式软件开发。Espruino解释器是可在各种不同的微控制器上运行的开源固件,购买预装有解释器的Espruino板是最容易上手的方式。
Espruino本身不仅是解释器固件或硬件,还有 Web IDE,命令行工具,文档,教程和模块,它们构成了嵌入式软件开发的完整解决方案。
为什么要使用JavaScript?
我们想使用一种语言:
- 具有与C相同的基本形式,因此简单的代码看起来类似于Arduino代码
- 鼓励基于事件的编程(以降低功耗)
- 广泛使用,在线上有很多学习资料
进行解释,并允许在解释器运行时修改函数(与某些其他语言不同,JavaScript将函数视为变量)
Espruino 100%JavaScript兼容吗?
Espruino实现了完整JavaScript规范的(大)子集,但还不是100%完整。我们的目标是使我们确实实现的所有功能都符合标准。请查看Espruino功能表以获取Espruino支持的语言功能的完整列表。
尽管我们实现了许多JavaScript的标准库,但是缺少了一些未使用的部分,因为它们没有足够的内存来包含它们。
实际上,如果您正在编写普通的JavaScript代码,那么您不太可能会注意到Espruino与普通JavaScript之间的任何区别。如果您确实遇到任何问题,请在论坛中发布代码示例,如果它是错误或我们认为人们会使用的功能,我们将尝试予以修复。
更多问题参见官方文档:http://www.espruino.com/FAQEspruino语言快速入门
现在您可以试着在Espruino IDE的左侧或命令行界面输入以下命令,然后在后面按’Enter’键,它们将被立即执行(您也可以将它们复制并粘贴到终端窗口中):
1+2
上面的命令结果应该返回
=3。
如果没有,可能是终端应用程序已经输入了一些其他文本。按Ctrl-C键清除,然后再试一次。
每次你输入一个命令并按’enter’键,它将立即被执行。如果命令没有执行结果(例如,如果你执行的函数没有返回值),则显示=undefined。引脚输出
digitalWrite(LED1,1)
注意上面代码中的大写字母——JavaScript(以及Espruino)区分大小写,因此在此处digitalwrite将不起作用,而digitalWrite可以。
如果一切顺利,将显示=undefined,表示没有返回值,但是板子上的LED1灯会亮起。这就是控制开发板引脚输出电压(1=3.3V,0=0V)的方法。你可以使用任何引脚名称来代替LED1,例如A1或B5(引脚名称和查看开发板的引脚图:)。
如果上面的命令出现错误提示:Uncaught ReferenceError: "LED1" is not definedLED1``var LED1 = you_pin_name?(LED1未定义),那么您可能没有使用官方的开发板——你可以在引脚上附加一个LED,然后键入var LED1 = 引脚名自己定义一个LED1。修改命令
现在,按 “向上 “箭头。这将显示你已运行的最后一条命令,并再次显示
digitalWrite(LED1,1)文本。按左移键直到光标移动到1的后面,按退格键,然后按0。现在看起来应该是这样的。digitalWrite(LED1,0)
现在,您可以将光标移动到该行的末尾(使用右移键或’end’键),然后按Enter执行该命令(这将关闭LED)。
只有在光标位于行的末尾时按Enter键,才会执行该命令,否则只是换行(您可以按Backspace键回退并删除换行)。创建变量
接下来,我们需要创建一个变量。例如:
var on = false
然后按’enter’键 ——这将创建一个新的变量,并将其值设置为布尔false。
编写函数
您现在可以编写一个函数。输入以下内容:
function toggle() {on = !on;digitalWrite(LED1, on);}
当你在第一行末尾按’Enter’键时,命令并没有被执行,相反,Espruino只是创建了一个新的行,这是因为行末有一个未闭合的大括号
{。而如果在行的末尾不是未闭合的括号,那么函数将被立即执行,如果你不想把你的括号放在行尾而是放到新的行中,可以在function toggle()行的末尾按Alt+Enter这将换行而不是执行命令(不建议这样做)。
如果你不小心创建了一个新行怎么办?只要按退格键就可以了。或者如果你完全搞乱了,只想重新开始,按Ctrl+C键,你输入的文字就会被删除。
一旦你在最后一行后按了’enter’键,就会在终端中显示出=function () { ..... }。这意味着你的函数(名为toggle)已经定义好了。那么它的作用是什么呢?on变量存储了一个值,这个值可以是true或false。命令on = !on;执行后,如果 on 的值之前是false,那么就会变成true,如果之前是true,那么就会变成false(即:将on变成非on)。
下一行是用改变后的on的值(true或false)控制引脚LED1的电平输出。每当你使用toggle函数时,on的值就会在true和false之间切换,从而使LED打开或关闭。调用函数
现在我们可以尝试一下,键入以下内容,然后按Enter键:
toggle()
如果你想再次运行它,只需点击向上箭头(在历史记录中找到该命令),然后按’enter’键。每次运行它,LED会从开到关,或者相反。
创建定时器
现在输入:
var i = setInterval(toggle, 500)
这将每隔500ms调用一次切换函数(也即,一秒钟两次),所以LED会开始闪烁。新的变量
i(由var定义)是对我们创建的定时器的引用——这在后面修改定时器会很有用!修改函数
但是,如果我们想改变切换函数怎么办?
输入如下:edit('toggle')
您也可以通过单击向上箭头直到返回定义
toggle的命令来获得类似的效果。现在函数显示出来了,按左箭头将光标向后移动,开始编辑函数。在末尾添加一行新的行,使其看起来像这样(要在digitalWrite之后添加一行,将光标移动到行的末尾,然后按’enter’键)。function toggle() {on = !on;digitalWrite(LED1, on);digitalWrite(LED2, !on);}
现在,用方向键将光标右移到最后一行的末尾(或按’page down’),然后按’enter’键。这将执行该命令,这将重新定义函数功能 - 现在LED1会亮,然后是LED2,然后是LED1 - 如此循环。
修改定时器
现在,您可以使用以下命令更改指示灯闪烁的速度:
changeInterval(i, 200)
这与您最初调用
setInterval( ... , 200)时相同- 现在每200毫秒(每秒5次)调用一次toggle清除定时器
如果您想让灯光停止闪烁-只需输入以下内容:
clearInterval(i)
注意,如果键入clearInterval()而不加任何参数,可以清除所有的定时器。
程序复位
如果您想完全从头开始并清除您所做的所有事情,只需键入:
reset()
如果您按下板子上的重置按钮(如果您的板子有的话),Espruino 也会重置。但是我们不建议这样做 - 在大多数电路板上,这也会重置USB/蓝牙连接,所以您可能需要重新启动您的终端应用程序,或者在某些情况下,甚至是拔掉插头重新插入设备。
保存程序
如果你使用重置按钮关闭或重置Espruino,它将丢失你写的所有代码。您可以使用save()命令保存Espruino的状态,这样就不会发生这种情况。
save()命令会保存引脚和片上外设的当前状态,以及所有的函数、变量、表和定时器。但是你之前输入的命令将不会被再次执行。启动事件
如果你想在Espruino启动时执行一些代码(例如你可能需要初始化一些外部硬件,如LCD),你可以使用
E上的init事件:E.on('init', function() {digitalWrite([LED1,LED2], 2);setTimeout("digitalWrite([LED1,LED2], 1);", 1000);setTimeout("digitalWrite([LED1,LED2], 0);", 2000);});
注意:您可以添加第二个处理程序,以在Espruino启动时执行其他操作,只需再次调用
E.on('init', ...)即可。如果您编写了一个名为onInit的函数,那么该函数也会自动执行。
上面的代码使用了Espruino中一些以上未介绍的额外功能:你可以向digitalWrite传递一个引脚数组(也适用于digitalRead)。如果你这样做,你所提供的值将被视为二进制值,最小的位将被送到数组中最右边的引脚,以此类推。
- 如果你将一个字符串传递给
setTimeout或setInterval,它将被当作一个函数来处理,并在一定时间段后执行。
其他参考资料
如果您已经设法保存了一些东西到Espruino,导致它无法工作,不用担心 - 您可以很容易地恢复它。只需查看故障排除页面。
在Espruino IDE的帮助菜单里有一个循序渐进的新手入门训练,强烈建议新手尝试一下:
更多信息请参考官网文档(英文):http://www.espruino.com/Quick+Start+Code
