不爱胡萝卜的仓鼠 发表于 2024-9-29 00:51

[嘉楠 CanMV K230]测评 ③点灯及代码离线运行

<div class='showpostmsg'> 本帖最后由 不爱胡萝卜的仓鼠 于 2024-9-29 00:54 编辑

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上一篇我们尝试在线运行了一个demo,但是在实际应用场景中,代码都是离线运行的,今天我们就要来尝试让代码离线运行。</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp; 由于脱离电脑,就没有办法通过USB数据线把摄像头的图像上传给电脑,我手上也没有屏幕,最终我选择最基础的点灯,通过运行点灯程序,就可以很直观的看到代码是否有离线运行成功</p>

<p>&nbsp;</p>

<p><strong><span style="font-size:24px;">一.点灯</span></strong></p>

<p>&nbsp; &nbsp; &nbsp; &nbsp; 点灯的本质就是控制GPIO的高低电平输出,那么先来看看原理图,LED灯连接到K230的那个GPIO上</p>

<div style="text-align: center;"></div>

<div style="text-align: center;"></div>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过原理图可以看到,使用的是GPIO52</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp; 点灯的写法很多,可以参照一下01studio的文档:<a href="https://wiki.01studio.cc/docs/canmv_k230/basic_examples/led" target="_blank">https://wiki.01studio.cc/docs/canmv_k230/basic_examples/led</a>。</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;官方也提供了文档,关于点灯会可以用到以下2个文档:</p>

<p>1.pin模块:<a href="https://developer.canaan-creative.com/k230_canmv/main/zh/api/machine/K230_CanMV_Pin%E6%A8%A1%E5%9D%97API%E6%89%8B%E5%86%8C.html" target="_blank">https://developer.canaan-creative.com/k230_canmv/main/zh/api/machine/K230_CanMV_Pin%E6%A8%A1%E5%9D%97API%E6%89%8B%E5%86%8C.html</a></p>

<p>2.FPIOA模块:<a href="https://developer.canaan-creative.com/k230_canmv/main/zh/api/machine/K230_CanMV_FPIOA%E6%A8%A1%E5%9D%97API%E6%89%8B%E5%86%8C.html" target="_blank">https://developer.canaan-creative.com/k230_canmv/main/zh/api/machine/K230_CanMV_FPIOA%E6%A8%A1%E5%9D%97API%E6%89%8B%E5%86%8C.html</a></p>

<p>&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;其中FPIOA模块是用于指定这个引脚的功能,一个屋里引脚可以有多个功能,这个在单片机中很常见,他就可以对这个引脚的功能进行配置。而pin模块就是真正对GPIO进行控制使用的</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp; 事实上不用FPIOA模块也可以实现点灯,直接使用pin模块就可以。代码如下,以下代码实现了闪灯效果,间隔1s</p>

<pre>
<code class="language-python">from machine import Pin
import time

#初始化52号引脚为输出模式,不拉高,驱动能力为默认的7
LED = Pin(52, Pin.OUT, pull=Pin.PULL_NONE, drive=7)

while True:
    #开灯
    LED.value(1)
    time.sleep(1)
    #关灯
    LED.value(0)
    time.sleep(1)</code></pre>

<p>&nbsp; &nbsp; &nbsp; &nbsp; 效果如下</p>

<p>23f6e66703e85a782dd2d3960fbd0e2c<br />
&nbsp;</p>

<p>&nbsp;</p>

<p><strong><span style="font-size:24px;">二.离线运行代码</span></strong></p>

<p>&nbsp; &nbsp; &nbsp; &nbsp; LED灯闪烁的代码已经准备好了,接下来就可以让代码离线运行了。操作非常简单,只需要把代码的py文件保存到SD卡中即可。</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp; K230在USB连接后,直接可以在电脑上看到对应的盘符,名字叫CanMV,就可以直接保存文件了</p>

<div style="text-align: center;"></div>

<p>&nbsp;</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp; 在CanMV中,有2个盘,一个是data,一个是sdcard&nbsp; &nbsp;&nbsp;</p>

<div style="text-align: center;"></div>

<p>&nbsp; &nbsp; &nbsp; &nbsp; 回头我们的代码就要放到sdcard中,现在的sdcard中文件如下</p>

<div style="text-align: center;"></div>

<p>&nbsp; &nbsp; &nbsp; &nbsp; 上电默认运行的文件规则如下:</p>

<ul>
        <li>
        <p>boot.py:&nbsp;<strong>上电第1个运行的脚本,如果代码有while True阻塞,将不会运行下面的main.py。</strong></p>
        </li>
        <li>
        <p>main.py:<strong>上电第2个运行的脚本。</strong></p>
        </li>
</ul>

<p>&nbsp;</p>

<p><strong><span style="font-size:20px;">1.手动保存</span></strong></p>

<p>那么只需要放一个名字叫boot.py的文件或者main.py就可以了,先试着放一个boot.py,里面内容就是我们刚才的代码</p>

<div style="text-align: center;"></div>

<p>&nbsp; &nbsp; &nbsp; &nbsp; 断电后,再上电,代码成功运行</p>

<p>&nbsp;59fe380341657df394159f0932ca2ac7</p>

<p>&nbsp;</p>

<p><strong><span style="font-size:20px;">2.IDE自动保存</span></strong></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;手动复制文件很麻烦,IDE中还提供了一键保存的方案。不过这个方法有一点需要注意,就是他是以main.py的名称保存的,那么按照刚才我们说的boot和mian的规则,你的sdcard路径下不能有boot.py,或者boot.py运行后main.py要能运行(也就是不能有while1循环阻塞,boot文件要有结束)。否则你下载进去的代码就没机会被执行了</p>

<p>&nbsp;</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp; 为了回头能区别出来两次保存的文件,我就把时间从1s改成了0.5s</p>

<p>&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;操作方法很简单,如下所示</p>

<div style="text-align: center;">
<div style="text-align: center;"></div>

<p>&nbsp;</p>
</div>

<p>这个点击是或否都行,我选择了否,不然注释就没了</p>

<div style="text-align: center;">
<div style="text-align: center;"></div>

<p style="text-align: left;">等待保存&nbsp;</p>

<div style="text-align: center;"></div>

<p>&nbsp;</p>
</div>

<p>保存成功</p>

<div style="text-align: center;">
<div style="text-align: center;"></div>

<p>&nbsp;</p>
</div>

<p>sdcard路径下就有main.py了</p>

<div style="text-align: center;">
<div style="text-align: center;">
<div style="text-align: center;"></div>

<p>&nbsp;</p>
</div>
</div>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在我们不删除boot,让两个文件都在,看看是不是和之前说的一样,如果一样的话,这次上电就会一直运行boot,1s一次闪灯。</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp; 效果如下,确实还是1s间隔,和我们的预期一样</p>

<p>a96c4a0647db62b63825f06b6f009a3e<br />
&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;然后我们把boot删除</p>

<div style="text-align: center;"></div>

<p>&nbsp; &nbsp; &nbsp; &nbsp; 此时再重新上电就会运行main了,会看到0.5s间隔的闪灯,效果如下,和我们的预期一致</p>

<p>fa2e049acdc1ad0ba2c90d002546320f<br />
&nbsp;</p>

<p>&nbsp;</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>
页: [1]
查看完整版本: [嘉楠 CanMV K230]测评 ③点灯及代码离线运行