在上一篇教程 BL618 + PikaPython 系列教程一、固件烧录和点亮 LED 灯
中,我们介绍了如何在 BL618 芯片上使用 PikaPython,包括如何构建、烧录、连接到 REPL,以及点亮 LED 灯。在本篇教程中,我们将探讨内置 example.py
代码的详细实现,并鼓励大家通过学习这些例程,举一反三地编写自己的程序。
example.py 在 pikapython_bl618 的 example/pikapython/pikapython 目录下
BL618 内置的 example.py
代码解析
example.py
文件包含了以下例程:
led()
key()
key_callback()
adc()
dac()
使用 REPL 调用 example 里面的例程
在本章节中,我们将说明如何通过 REPL (Read-Eval-Print Loop) 调用 example.py 中的例程。REPL 是一个交互式编程环境,允许您在运行时输入代码,并立即看到执行结果。这使得测试和调试变得更加便捷。
连接到 REPL
首先,确保您已经成功连接到 BL618 的 USB 接口,并使用 Pika-Studio 工具连接到开发板。默认波特率为 115200。
按下 Enter
键进入 REPL
模式。
导入 example.py
example.py
已经内置在固件中,因此我们可以直接导入并使用它。在 REPL
中输入以下命令导入 example:
import example
现在,您已经成功导入了 example.py 中的所有例程。
调用例程
要调用 example.py 中的一个例程,只需在 REPL 中输入 example.<函数名>()。例如,要调用 led() 例程,输入:
example.led()
这将执行 led()
函数,并使开发板上的 LED 灯依次闪烁。
同样,要调用其他例程,例如 key()
、key_callback()
、adc()
和 dac()
,分别输入以下命令:
example.key()
example.key_callback()
example.adc()
example.dac()
交互式学习
我们鼓励您通过 REPL
运行这些例程,并尝试对其进行修改以更好地理解 BL618 和 PikaPython。您可以在 REPL 中实时输入和运行代码,观察执行结果,从而加深对 BL618 功能和 PikaPython 语言的理解。
使用 REPL
的交互式编程环境,可以快速验证您的想法、测试代码片段,以及探索 PikaPython 的各种功能。通过这种方式,您可以更加轻松地学习和掌握 BL618 和 PikaPython。
例程解析
下面,我们将逐一解析这些例程的实现。
1. led()
led() 函数是用于控制三个不同 LED 的闪烁。这里,我们使用 machine.Led
类来实例化 LED 对象,并通过 on()
和 off()
方法来控制 LED
的状态。代码中的 for
循环控制 LED
闪烁 10 次。
def led():
"""
led 例程
led0、led1、led2 依次闪烁 10 次
led0 和 led1 是 sipeed m0p 的板载 led
led2 是 verimake bl618 竞赛板的板载 led
"""
led0 = machine.Led(0)
led1 = machine.Led(1)
led2 = machine.Led(2)
for i in range(10):
print('Blinking (%d/10)' % (i + 1))
led0.on()
led1.off()
led2.off()
time.sleep(0.1)
led0.off()
led1.on()
led2.off()
time.sleep(0.1)
led0.off()
led1.off()
led2.on()
led0.off()
led1.off()
led2.off()
led0.close()
led1.close()
led2.close()
2. key()
key()
函数演示了如何检测按键按下。在这个例程中,我们使用 machine.Key
类来实例化按键对象。代码使用一个 while
循环等待按键被按下 3 次,每次按下时,计数器 count
递增。
def key():
"""
key 例程
等待 key0 被按下 3 次, 使用阻塞方式
key0 是 verimake bl618 竞赛板的板载按键
"""
key0 = machine.Key(0)
print('Waiting for key0 to be pressed')
count_expect = 3
count = 0
while True:
if key0.isPressed():
print('Key0 is pressed (%d/%d)' % (count + 1, count_expect))
count += 1
if count == count_expect:
break
time.sleep(0.1)
key0.close()
3. key_callback()
key_callback()
函数展示了如何使用回调函数检测按键按下。在这个例程中,我们首先定义了一个名为 _handle_key0
的回调函数。然后,我们使用 key0.setCallBack()
方法将回调函数与按键对象关联。while
循环等待按键被按下 3 次。
count = 0
count_expect = 3
def _handle_key0(siganl):
"""
key 回调例程的回调函数
"""
global count
print('Key0 is pressed (%d/%d)' % (count + 1, count_expect))
count += 1
def key_callback():
"""
key 回调例程
等待 key0 被按下 3 次, 使用回调方式
key0 是 verimake bl618 竞赛板的板载按键
"""
global count
count = 0
key0 = machine.Key(0)
print('Waiting for key0 to be pressed')
key0.setCallBack(_handle_key0, std.GPIO.SIGNAL_FALLING)
while True:
if count == count_expect:
break
time.sleep(0.1)
key0.close()
4. adc()
adc()
函数展示了如何使用 BL618 的模拟-数字转换器 (ADC) 功能。在这个例程中,我们使用 machine.ADC
类来实例化 ADC
对象。for
循环连续读取 ADC
输入的电压值,并将其打印到控制台。
def adc():
"""
adc 例程
读取 adc0 的值 10 次
adc 接在 P0 引脚
"""
adc0 = machine.ADC()
adc0.setPin('P0')
adc0.enable()
for i in range(10):
print('ADC0: %f (%d/%d)' % (adc0.read(), i, 10))
time.sleep(0.5)
5. dac()
dac()
函数展示了如何使用 BL618 的数字-模拟转换器 (DAC) 功能。在这个例程中,我们使用 machine.DAC
类来实例化 DAC 对象。for
循环逐渐增加 DAC 输出的电压值,并将其打印到控制台。
def dac():
"""
dac 例程
输出 0.5V 的方波 10 次
dac 接在 P3 引脚
adc 接在 P0 引脚, 实验时可以用杜邦线将 P3 和 P0 连接起来
"""
dac0 = machine.DAC()
dac0.setPin('P3')
dac0.enable()
adc0 = machine.ADC()
adc0.setPin('P0')
adc0.enable()
val_max = 1.5
val_min = 1
for i in range(10):
dac0.write(val_max)
print('DAC0: %r, ADC0: %r (%d/%d)' % (val_max, adc0.read(), i+1, 10))
time.sleep(0.5)
dac0.write(val_min)
print('DAC0: %r, ADC0: %r (%d/%d)' % (val_min, adc0.read(), i+1, 10))
time.sleep(0.5)
dac0.disable()
adc0.disable()
结论
本篇教程详细解析了 BL618 内置的 example.py
代码,包括如何控制 LED 灯、检测按键、使用回调函数、读取 ADC 输入电压以及设置 DAC 输出电压。希望同学们能通过学习这些例程,举一反三地编写自己的程序,从而更好地利用 BL618 芯片。在接下来的教程中,我们将继续探讨更多有关 BL618 和 PikaPython 的实用知识和技巧。
后续教程:
BL618 + PikaPython 系列教程三:如何为 BL618 烧录脚本