sonicfirr 发表于 2022-8-8 10:42

【Beetle ESP32-C3】四、Luat-OS环境部署

<div class='showpostmsg'><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本人使用ESP是从8266开始,从安信可的Eclipse开发直接跳到Arduino,当时就听说还有Lua可以开发,虽然后来也购入了NodeMCU,但是拿到手后就直接上的Arduino IDE。</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 前一阵子,网络上天天都蹦出来合宙Luat-OS,搞得在下也是心念念。这次也是感谢EEWORLD的Beetle ESP32-C3测评活动,终于有机会体验一下Lua在ESP系列中的开发方式。</p>

<h2><b>1、Luat-OS的一些资料</b></h2>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 搞了一晚上,查询了一些网上资料,将感觉比较有用的整理如下:</p>

<p>&nbsp;</p>

<p>①&nbsp;合宙的Luat-OS Wiki,有工具下载、论坛链接、Lua教程、开发板介绍、API手册、内核编译源码等内容。</p>

<p><a href="https://wiki.luatos.com/"><u>https://wiki.luatos.com/</u></a>&nbsp;</p>

<p>&nbsp;</p>

<p>②&nbsp;合宙的Gitee,里面的仓库不少。</p>

<p><a href="https://gitee.com/openLuat"><u>https://gitee.com/openLuat</u></a>&nbsp;</p>

<p>&nbsp;</p>

<p>③&nbsp;一位大神的Gitee,里面有构建好的固件(.SOC)。</p>

<p><a href="https://gitee.com/dreamcmi/LuatOS-ESP32/releases"><u>https://gitee.com/dreamcmi/LuatOS-ESP32/releases</u></a>&nbsp;</p>

<p>&nbsp;</p>

<p>④&nbsp;另一位大神的博客,有很多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>&nbsp;</p>

<p>&nbsp;</p>

<h2><b>2、编译内核源码</b></h2>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所谓Luat-OS,在下理解就是一个大号的BootLoader或者像MicroPython这样的解析引擎(也许理解不到位)。</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所以,要做Lua开发,先要得到其内核固件,合宙Wiki中就有完整的教程:<a href="https://wiki.luatos.com/develop/compile/ESP32C3.html"><u>https://wiki.luatos.com/develop/compile/ESP32C3.html</u></a>&nbsp;。</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第一步是从Gitee上下载源码,这里建议使用git clone,毕竟是国内的站点,网速很快。如果是下载zip包,一定记得解压后目录去掉&ldquo;-master&rdquo;的后缀。需要两个仓库:</p>

<p>&nbsp;</p>

<p>①&nbsp;LuatOS源码:git clone https://gitee.com/openLuat/LuatOS.git&nbsp;</p>

<p>②&nbsp;LuatOS-ESP32项目源码:git clone https://gitee.com/dreamcmi/LuatOS-ESP32.git</p>

<p>&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 两个仓库下载到统一目录下,文件夹名字不能改变&mdash;&mdash;因为项目的CMakeLists.txt都是固定的路径名。</p>

<p>&nbsp;</p>

<p class="imagemiddle" style="text-align: center;"></p>

<p align="center">图4-1&nbsp;两个源码仓库(注意放到同一路径,并保证目录名与图中一致)</p>

<p align="center">&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第二步,按官网教程要求,检查两个文件是否存在&mdash;&mdash;个人估计教程这样写也是怕用户出现下载不全的问题。</p>

<p>&nbsp;</p>

<p class="imagemiddle" style="text-align: center;"></p>

<p align="center">图4-2&nbsp;官网教程说明截图</p>

<p align="center">&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第三步是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>&nbsp;。</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这里本人按照教程,使用的也是IDF控制台方式,首先打开IDF控制台并进入LuatOS-ESP32路径,然后执行命令&ldquo;idf.py set-target esp32c3&rdquo;。</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 接着执行命令&ldquo;idf.py menuconfig&rdquo;并进入Component config -&gt; ESP System Settings -&gt; Channel for console output 勾上USB Serial/JTAG Controller。</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最后就是&ldquo;idf.py build&rdquo;一路编译。build成功后,本人还下意识的idf.py flash,实际上Luat-OS的内核还要经过构建SOC文件的过程。</p>

<p>&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第四步就是构建SOC文件,控制台继续进入&ldquo;LuatOS-ESP32/tools&rdquo;路径,执行命令&ldquo;pip install -r requirements.txt&rdquo;,安装需要的依赖包&mdash;&mdash;就两个&ldquo;esptool 3.2和toml 0.10.2&rdquo;,再执行命令&ldquo;http://python esp32v3.py -t esp32c3 -p&rdquo;就在tools目录下构建好SOC文件。</p>

<p>&nbsp;</p>

<p class="imagemiddle" style="text-align: center;"></p>

<p align="center">图4-3&nbsp;构建好的内核</p>

<p align="center">&nbsp;</p>

<h2><b>3、下载内核并测试闪烁灯</b></h2>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 编译内核出奇的顺利,原来&ldquo;坑&rdquo;都留在测试阶段了。</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 先是工具的获取:<a href="https://luatos.com/luatools/download/last"><u>https://luatos.com/luatools/download/last</u></a>&nbsp;,得到烧写工具&ldquo;luatools_v2.exe&rdquo;,记住要右键&ldquo;以管理员身份运行&rdquo;,否则就会报错。</p>

<p>&nbsp;</p>

<p class="imagemiddle" style="text-align: center;"></p>

<p align="center">图4-4&nbsp;直接双击打开报错</p>

<p align="center">&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 烧写固件过程,还算顺利,具体如下:</p>

<p>&nbsp;</p>

<p class="imagemiddle" style="text-align: center;"></p>

<p align="center">&nbsp;</p>

<p class="imagemiddle" style="text-align: center;"></p>

<p align="center">&nbsp;</p>

<p class="imagemiddle" style="text-align: center;"></p>

<p align="center">图4-5&nbsp;luatools下载固件</p>

<p align="center">&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 官方提到ESP32-C3 USB版不能使用Luat IDE(本人后来尝试过,确实没成功,而且感觉便利性也一般),所以用记事本写了一个测试代码,并保存为main.lua&mdash;&mdash;这里也是一个&ldquo;坑&rdquo;,项目必须有一个main.lua。</p>

<p>&nbsp;</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>&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最后一个大坑来了,就是下载main.lua文件,先来看看错误的提示。</p>

<p>&nbsp;</p>

<p class="imagemiddle" style="text-align: center;"></p>

<p align="center">图4-6&nbsp;下载lua文件报错</p>

<p align="center">&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 错误提示文件名不合法,考虑到源程序文件必须是main.lua(因为也报错过),很明显是CORE&mdash;&mdash;也就是固件的文件名命名方法不对,生成SOC的名字后缀看着应该是建立的时间戳,应该改为版本号&ldquo;_Vxxxx_&rdquo;,鬼知道是什么呢?</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所以,这里本人重新下载大神提供的现成SOC,名字附带版本号,成功烧录。当然,成功后在下不死心,自己又构建了一次SOC,结果在构建命令完成后看到了版本号输出(前面真是瞎了)。</p>

<p>&nbsp;</p>

<p align="center"> &nbsp;</p>

<p align="center">图4-7&nbsp;看到版本号V0004-BETA</p>

<p align="center">&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 接着,修改自己的固件名称,这里还有一个小坑,控制台输出版本号是中横线,必须改为下划线&ldquo;LuatOS-SoC_ESP32C3_V0004_BETA.soc&rdquo;。</p>

<p>&nbsp;</p>

<p class="imagemiddle" style="text-align: center;"></p>

<p align="center">图4-8&nbsp;案例下载成功</p>

<p align="center">&nbsp;</p>

<h2><b>4、Lua使用初体验</b></h2>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 先说优点&mdash;&mdash;就是功能完备。Luat-OS集成了绝大部分ESP32支持功能,默认烧写固件也包含这些功能,比如:u8g2和lvgl都是默认包含的。</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当然也可以通过在&ldquo;..\LuatOS-ESP32\components\luat\include\luat_conf_bsp.h&rdquo;头文件中对应的宏定义来实现内核功能裁剪。</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这样就可以跳过Arduino和MicroPython方式下载库、IDF方式进行menuconfig配置和加载components的过程。</p>

<p>&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 再说缺点&mdash;&mdash;需要学习Lua语言,当然学习成本初步看来不高,毕竟只是单片机开发不涉及到Web后端之类的。另外就是烧写过程有点繁琐,坑也有点多&mdash;&mdash;尤其是SOC文件名这个要求。</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 总体来说,一个晚上搞明白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>

Jacktang 发表于 2022-8-9 07:21

<p>Lua语言开发配Arduino,应该很好玩,期待楼主下面边测试边分享</p>

wangerxian 发表于 2022-8-9 10:18

<p>还没体验过<strong>Lua</strong>,以后有机会玩玩<strong>。</strong></p>
页: [1]
查看完整版本: 【Beetle ESP32-C3】四、Luat-OS环境部署