【Beetle ESP32-C3】四、Luat-OS环境部署
<div class='showpostmsg'><p> 本人使用ESP是从8266开始,从安信可的Eclipse开发直接跳到Arduino,当时就听说还有Lua可以开发,虽然后来也购入了NodeMCU,但是拿到手后就直接上的Arduino IDE。</p><p> 前一阵子,网络上天天都蹦出来合宙Luat-OS,搞得在下也是心念念。这次也是感谢EEWORLD的Beetle ESP32-C3测评活动,终于有机会体验一下Lua在ESP系列中的开发方式。</p>
<h2><b>1、Luat-OS的一些资料</b></h2>
<p> 搞了一晚上,查询了一些网上资料,将感觉比较有用的整理如下:</p>
<p> </p>
<p>① 合宙的Luat-OS Wiki,有工具下载、论坛链接、Lua教程、开发板介绍、API手册、内核编译源码等内容。</p>
<p><a href="https://wiki.luatos.com/"><u>https://wiki.luatos.com/</u></a> </p>
<p> </p>
<p>② 合宙的Gitee,里面的仓库不少。</p>
<p><a href="https://gitee.com/openLuat"><u>https://gitee.com/openLuat</u></a> </p>
<p> </p>
<p>③ 一位大神的Gitee,里面有构建好的固件(.SOC)。</p>
<p><a href="https://gitee.com/dreamcmi/LuatOS-ESP32/releases"><u>https://gitee.com/dreamcmi/LuatOS-ESP32/releases</u></a> </p>
<p> </p>
<p>④ 另一位大神的博客,有很多Luat-OS的使用教程,这里给出第一讲链接,本身还包含其它资料的链接。</p>
<p><a href="https://blog.csdn.net/qq_38091632/article/details/122665567"><u>https://blog.csdn.net/qq_38091632/article/details/122665567</u></a> </p>
<p> </p>
<h2><b>2、编译内核源码</b></h2>
<p> 所谓Luat-OS,在下理解就是一个大号的BootLoader或者像MicroPython这样的解析引擎(也许理解不到位)。</p>
<p> 所以,要做Lua开发,先要得到其内核固件,合宙Wiki中就有完整的教程:<a href="https://wiki.luatos.com/develop/compile/ESP32C3.html"><u>https://wiki.luatos.com/develop/compile/ESP32C3.html</u></a> 。</p>
<p> 第一步是从Gitee上下载源码,这里建议使用git clone,毕竟是国内的站点,网速很快。如果是下载zip包,一定记得解压后目录去掉“-master”的后缀。需要两个仓库:</p>
<p> </p>
<p>① LuatOS源码:git clone https://gitee.com/openLuat/LuatOS.git </p>
<p>② LuatOS-ESP32项目源码:git clone https://gitee.com/dreamcmi/LuatOS-ESP32.git</p>
<p> </p>
<p> 两个仓库下载到统一目录下,文件夹名字不能改变——因为项目的CMakeLists.txt都是固定的路径名。</p>
<p> </p>
<p class="imagemiddle" style="text-align: center;"></p>
<p align="center">图4-1 两个源码仓库(注意放到同一路径,并保证目录名与图中一致)</p>
<p align="center"> </p>
<p> 第二步,按官网教程要求,检查两个文件是否存在——个人估计教程这样写也是怕用户出现下载不全的问题。</p>
<p> </p>
<p class="imagemiddle" style="text-align: center;"></p>
<p align="center">图4-2 官网教程说明截图</p>
<p align="center"> </p>
<p> 第三步是IDF编译,如果有朋友还没有建立IDF环境,可以参考本人帖子:<a href="https://bbs.eeworld.com.cn/thread-1210470-1-1.html"><u>https://bbs.eeworld.com.cn/thread-1210470-1-1.html</u></a> 。</p>
<p> 这里本人按照教程,使用的也是IDF控制台方式,首先打开IDF控制台并进入LuatOS-ESP32路径,然后执行命令“idf.py set-target esp32c3”。</p>
<p> 接着执行命令“idf.py menuconfig”并进入Component config -> ESP System Settings -> Channel for console output 勾上USB Serial/JTAG Controller。</p>
<p> 最后就是“idf.py build”一路编译。build成功后,本人还下意识的idf.py flash,实际上Luat-OS的内核还要经过构建SOC文件的过程。</p>
<p> </p>
<p> 第四步就是构建SOC文件,控制台继续进入“LuatOS-ESP32/tools”路径,执行命令“pip install -r requirements.txt”,安装需要的依赖包——就两个“esptool 3.2和toml 0.10.2”,再执行命令“http://python esp32v3.py -t esp32c3 -p”就在tools目录下构建好SOC文件。</p>
<p> </p>
<p class="imagemiddle" style="text-align: center;"></p>
<p align="center">图4-3 构建好的内核</p>
<p align="center"> </p>
<h2><b>3、下载内核并测试闪烁灯</b></h2>
<p> 编译内核出奇的顺利,原来“坑”都留在测试阶段了。</p>
<p> 先是工具的获取:<a href="https://luatos.com/luatools/download/last"><u>https://luatos.com/luatools/download/last</u></a> ,得到烧写工具“luatools_v2.exe”,记住要右键“以管理员身份运行”,否则就会报错。</p>
<p> </p>
<p class="imagemiddle" style="text-align: center;"></p>
<p align="center">图4-4 直接双击打开报错</p>
<p align="center"> </p>
<p> 烧写固件过程,还算顺利,具体如下:</p>
<p> </p>
<p class="imagemiddle" style="text-align: center;"></p>
<p align="center"> </p>
<p class="imagemiddle" style="text-align: center;"></p>
<p align="center"> </p>
<p class="imagemiddle" style="text-align: center;"></p>
<p align="center">图4-5 luatools下载固件</p>
<p align="center"> </p>
<p> 官方提到ESP32-C3 USB版不能使用Luat IDE(本人后来尝试过,确实没成功,而且感觉便利性也一般),所以用记事本写了一个测试代码,并保存为main.lua——这里也是一个“坑”,项目必须有一个main.lua。</p>
<p> </p>
<pre>
<code>PROJECT = "gpiodemo"
VERSION = "1.0.0"
-- 一定要添加sys.lua !!!!
local sys = require "sys"
sys.taskInit(
function()
local LED_D4 = gpio.setup(10, 0)
while 1 do
LED_D4(0)
sys.wait(1000)
LED_D4(1)
sys.wait(1000)
end
end
)
-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!</code></pre>
<p> </p>
<p> 最后一个大坑来了,就是下载main.lua文件,先来看看错误的提示。</p>
<p> </p>
<p class="imagemiddle" style="text-align: center;"></p>
<p align="center">图4-6 下载lua文件报错</p>
<p align="center"> </p>
<p> 错误提示文件名不合法,考虑到源程序文件必须是main.lua(因为也报错过),很明显是CORE——也就是固件的文件名命名方法不对,生成SOC的名字后缀看着应该是建立的时间戳,应该改为版本号“_Vxxxx_”,鬼知道是什么呢?</p>
<p> 所以,这里本人重新下载大神提供的现成SOC,名字附带版本号,成功烧录。当然,成功后在下不死心,自己又构建了一次SOC,结果在构建命令完成后看到了版本号输出(前面真是瞎了)。</p>
<p> </p>
<p align="center"> </p>
<p align="center">图4-7 看到版本号V0004-BETA</p>
<p align="center"> </p>
<p> 接着,修改自己的固件名称,这里还有一个小坑,控制台输出版本号是中横线,必须改为下划线“LuatOS-SoC_ESP32C3_V0004_BETA.soc”。</p>
<p> </p>
<p class="imagemiddle" style="text-align: center;"></p>
<p align="center">图4-8 案例下载成功</p>
<p align="center"> </p>
<h2><b>4、Lua使用初体验</b></h2>
<p> 先说优点——就是功能完备。Luat-OS集成了绝大部分ESP32支持功能,默认烧写固件也包含这些功能,比如:u8g2和lvgl都是默认包含的。</p>
<p> 当然也可以通过在“..\LuatOS-ESP32\components\luat\include\luat_conf_bsp.h”头文件中对应的宏定义来实现内核功能裁剪。</p>
<p> 这样就可以跳过Arduino和MicroPython方式下载库、IDF方式进行menuconfig配置和加载components的过程。</p>
<p> </p>
<p> 再说缺点——需要学习Lua语言,当然学习成本初步看来不高,毕竟只是单片机开发不涉及到Web后端之类的。另外就是烧写过程有点繁琐,坑也有点多——尤其是SOC文件名这个要求。</p>
<p> 总体来说,一个晚上搞明白Lua使用过程,外加一个上午写好测评,还是挺开心的。不过后续准备还是先从熟悉的Arduino进行,搞定一个小案例之后,再转向Lua看看。</p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>Lua语言开发配Arduino,应该很好玩,期待楼主下面边测试边分享</p>
<p>还没体验过<strong>Lua</strong>,以后有机会玩玩<strong>。</strong></p>
页:
[1]