说明文档
这次参加funpack活动,移植了一个micropython的编译环境,并实现了micropython的串口通信和控制GPIO小灯程序
任务:
移植Micropython,并实现串口通信和控制IO口。
硬件介绍
这次使用主要涉及到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指令,将绿灯打开
在我们输入 green off 关闭绿灯之后,通过命令 blue on 打开蓝色的灯,如下图所示:
对本次活动的心得体会
这次活动让我对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到开源项目中去,把自己平时学到的东西应用到项目中能够帮助大家。