【Funpack11】【LPC55S69】让大家一起来学习mciropython
这个项目让大家能够快速的创建micropython的工程,并且能够看到源码,熟悉里面的细节。而且搭建环境一点也不复杂,只要跟着视频来一起做就可以了。视频里10分钟内就能弄好micropython环境
标签
嵌入式系统
RTTHREAD
飞跃1989
更新2021-10-28
1278

说明文档

这次参加funpack活动,移植了一个micropython的编译环境,并实现了micropython的串口通信和控制GPIO小灯程序

任务:

移植Micropython,并实现串口通信和控制IO口。

硬件介绍

FsWwWZ60XkUlOzQku1KQonaNMgVW

这次使用主要涉及到D8: RGB 小灯和串口2,UART2通过下面的GPIO引脚引出,通过查询原理图可以找到是mikro BUS里面的TX RX

UART2
FC2_USART_TXD ---- PIO0_27
FC2_USART_RXD----- PIO1_24

代码片段 micropython代码

这部分,我这边主要基于RT-THREAD的操作系统下面的micropython软件包的形式生成的,具体如何操作可以参考视频部分,我已经把所有步骤都记录下来了,方便大家复现。可以说这个应该是全网最快的micropython固件编译环境,需要的代码量较少,并且操作简单,方便使用。这边我就不详细展开了

GPIO代码

micropython如何操作GPIO 呢?

通过查看原理图,我们可以找到RGB小灯的如下信息:

LEDR --- PIO1_6
LEDG ---- PIO1_7
LEDB -----PIO1_4

 

首先我整理了一下最简单的GPIO的编写python代码:

from machine import Pin
import utime
led = Pin(("PA4", 37), Pin.OUT_PP)
while True:
  led.value(0)  
  utime.sleep(1)
  led.value(1)
  utime.sleep(1)

这里的37就是引脚对应的PIO1_4的蓝色小灯对应的引脚,运行这段代码,可以让蓝灯不停的闪烁。

UART代码

UART对应引脚:

UART2
FC2_USART_TXD ---- PIO0_27
FC2_USART_RXD----- PIO1_24

这边我简单的写了一个测试UART 发送的小python脚本,运行这个python脚本,可以定时的从UART2中打印出abc

import utime
from machine import UART
​
uart = UART(2, 115200)
uart.init(115200, bits=8, parity=None, stop=1)
while True:
  uart.write('abc')
  utime.sleep(1)
​整合代码

这边我整合了一下测试用例,讲串口和IO口结合起来参考代码如下:

import utime as time
from machine import Pin
from machine import UART
LED_ON = 0
LED_OFF = 1
​
PIN_LED_R = 39  # PIO1_6
PIN_LED_G = 40  # PIO1_7
PIN_LED_B = 37  # PIO1_4
​
led_r = Pin(("led_red", PIN_LED_R), Pin.OUT_PP)
led_g = Pin(("led_green", PIN_LED_G), Pin.OUT_PP)
led_b = Pin(("led_blue", PIN_LED_B), Pin.OUT_PP)
​
key_0 = Pin(("key_0", 42), Pin.IN, Pin.PULL_UP)
​
uart = UART(2, 115200)
​
led_value = 0
​
while True:
   time.sleep(1)
   if(key_0.value() == 0):
       if(led_value == 0):
           led_value = 1
           led_r.value(led_value)
           print('red off')
       elif (led_value == 1):
           led_value = 0
           led_r.value(led_value)
           print('red on')
   
   msg = uart.read()
   if (msg != b'') :
       print(msg)
       if 'on' in msg:
           led_value = 0
       elif 'off' in msg:
           led_value = 1
​
       if 'red' in msg:
           led_r.value(led_value)
       elif 'green' in msg:
           led_g.value(led_value)
       elif 'blue' in msg:
           led_b.value(led_value)

这边我将通过UART来输入'red on ' 或者 'red off' 来判断是否需要开rgb小灯。这样可以达到测试UART口和IO口的目的。

各功能展示

首先我们从USB转串口(不是LP-LINK)通过UART2发送一个 green on 的命令发给开发板,开发板通过解析命令中的ON和green指令,将绿灯打开

FiOApSSynPt8OzMOI1ilxuccnIKn

在我们输入 green off 关闭绿灯之后,通过命令 blue on 打开蓝色的灯,如下图所示:

FprdArIGABPeCMIWT3QxEC60aeGU

对本次活动的心得体会

这次活动让我对micropython这种开发环境熟悉了很多,并且在LPC开发板环境下,对M33也有一定的熟悉。主要是对micropython这种轻量级的语言能够尝试一下,非常之开心,而且从RTTHREAD micropython 固件开发指南 中了解到一个micropython是如何构建出来的,并且看到里面的代码如何一步步单步调试的,对micropython架构有了很深的了解。

其实一开始使用RT-THREAD的BSP的时候,会有很多error,我通过修复和PR一些代码

 

https://github.com/RT-Thread/rt-thread/pull/5135

 

https://github.com/RT-Thread-packages/micropython/pull/182

 

https://github.com/RT-Thread-packages/micropython/pull/181

 

https://github.com/RT-Thread/rt-thread/pull/5085

 

我相信很多小伙伴刚开始用RTTHREAD的bsp做mciropython的时候有很多问题,经过我这些PR之后,小伙伴们上手更容易了,看到大家在RTT上顺利的跑起来,我自己心里也比较开心,虽然大家可能不知道是我修复的,不过我觉得没关系,只要大家能用的比较舒服,上手比较顺利,我就会比较开心了,我想我的心情应该和magic直播老师的心情是一样的。

同时,我的视频感觉大家看了就会编译mciropython固件了,对micropython里面的运行机制也能有更好的方式去了解。同时我的视频也帮助了几位小伙伴一起完成mciropython。

当然肯定还有很多其他问题,如果大家每个人都能有一种开源贡献精神的话,善于去发现这个bsp的问题,大家一起来修复,我相信中国的开源代码会越来越优秀的。其实我看到还有很多问题。

比如:

[bsp] [lpc55sxx] scons 编译不过

https://club.rt-thread.org/ask/question/433270.html

我想多留一些给大家贡献也是挺好的选择。

 

建议: 建议FUNPACK多举办一些类似的活动,能够让更多人参与到开发的快乐中去。

建议大家多尝试去发现问题,去解决问题,然后PR到开源项目中去,把自己平时学到的东西应用到项目中能够帮助大家。

附件下载
可以编译下载的代码.zip
HEX直接烧入,python文件通过vscode micropython插件下下去,具体看视频
团队介绍
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号