0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用MicroPython在Raspberry Pi上通过双核编程的多线程控制LED

科技观察员 来源:circuitdigest 作者:JOYDIP DUTTA 2022-07-25 17:41 次阅读

在本教程中,我们将使用 MicroPython在 Raspberry Pi Pico 上通过双核编程的多线程控制两个 LED

到目前为止,我们已经了解了如何连接OLED、LCD、伺服、超声波传感器,并且我们已经实现了I2CADC、与 Raspberry Pi Pico 的蓝牙通信。RP2040微控制器pico 板具有双核。如果您不熟悉多线程执行,那么请考虑一下您的计算机系统。它可以同时执行多个程序,这些程序可以由一个操作系统使用多线程来运行。但是我们在 Raspberry Pi Pico 上没有任何操作系统来控制 CPU 周期,它只能支持每个内核一个线程,在这种情况下是两个。

Raspberry Pi Pico 上双核编程所需的组件

您需要确保拥有以下组件来演示 Pico 板上的双核编程。

树莓派 Pico

LED x2

电阻器 x2(330 欧姆)

面包板

连接电线

使用 Raspberry Pi Pico 板的伺服电机电路图

伺服电机的电路图就是这么简单。我已经分别使用两个 330 欧姆电阻与 GPIO15 和 GPIO16 连接了两个 LED。LED 的接地引脚已连接到 Pico 板的接地引脚。

poYBAGLeZN2ABGE6AANNlnAL4Go059.png

使用双核编程在 Raspberry Pi Pico 上进行多线程

您需要克隆我们的Raspberry Pi Pico 教程GitHub 存储库。然后打开“T9_DualCore_Program_PIco”文件夹。在此文件夹中,您可以找到“代码”文件夹。在Thonny编辑器中打开“main.py”python 文件。现在,让我们讨论一下main.py文件。

从机器进口销
导入 utime
导入_thread

首先,我们需要从上面提到的 machine.py 库中导入Pin() 类。在我们之前的教程中,我们已经多次使用机器库,希望您现在熟悉机器库。然后我们需要导入“utime”库来使用pico的内部时钟。我们正在使用“_thread”库来使用 raspberry pi pico 社区制作的线程函数。

led1 = Pin(16, machine.Pin.OUT)
led2 = Pin(15, machine.Pin.OUT)
sLock = _thread.allocate_lock()

在上面的代码中,我使用“Pin(16, machine.Pin.OUT)”和“Pin(15, machine.Pin.OUT)”函数将 GPIO15 和 GPIO16 的两个 LED 初始化为 OUPUT 。“_thread.allocate_lock()”函数可用于为两个线程提供信号量锁。如果想详细了解这个函数,可以参考“_thread”库的文档。

定义核心任务():
    而真:
        sLock.acquire()
        print("进入第二个线程")
        utime.sleep(1)
        led2.high()
        print("Led 2 开启")
        utime.sleep(2)
        led2.low()
        print("Led 2 关闭")
        utime.sleep(1)
        print("从第二个线程退出")
        utime.sleep(1)
        sLock.release()
_thread.start_new_thread(CoreTask, ())

我们将在单线程的另一个内核中使用“CoreTask()”函数。在函数内的 while 循环中,我们使用信号量锁来保持线程,直到它完成。然后我将 led2 调高 1 秒钟,然后在 Thonny 的输出端打印指令。然后我在线程完成时释放信号量锁。“_thread.start_new_thread(CoreTask, ())”函数将启动线程。该函数将目标函数名作为第一个参数。在我的例子中,它是“CoreTask”,它在第二个参数中接受参数。就我而言,我没有任何要传递的论点。

而真:
    # 我们获取信号量锁
    sLock.acquire()
    print("进入主线程")
    led1.toggle()
    utime.sleep(0.15)
    print("Led 1 开始切换。")
    print("退出主线程")
    utime.sleep(1)
    # 我们释放信号量锁
    sLock.release()

在上面的 while 循环中,我们类似地使用了另一个信号量锁,以便主线程继续运行直到它完成。它将切换 led1,然后释放信号量锁。现在,在 Thonny IDE中,打开 “main.py” 文件。首先, 通过按键盘上的 “ctrl+shift+s”键将“main.py”文件保存在 Pico 板上 。在保存文件之前,请确保您的 Pico 板已连接到您的笔记本电脑。保存代码后,会出现一个弹出窗口,如下图所示。您必须首先 选择 Raspberry Pi Pico,然后 将文件命名为“main.py”并保存。 此过程使您能够在 Pico 打开时运行程序。

poYBAGLeZNaAXAD3AADbydIz35Y407.png

当您在 Pico 板上上传并运行代码时,您会看到连接到 GPIO16 的 led1 以 1.15 秒的延迟切换。但是连接到 GPIO15 的 led2 会延迟 2 秒闪烁。您可以参考下面的视频了解更多详情。

代码

主文件

进口机
导入 utime
导入_thread
led1 = machine.Pin(16, machine.Pin.OUT)
led2 = machine.Pin(15, machine.Pin.OUT)
sLock = _thread.allocate_lock()
定义核心任务():
    而真:
        sLock.acquire()
        print("进入第二个线程")
        utime.sleep(1)
        led2.high()
        print("Led 2 开启")
        utime.sleep(2)
        led2.low()
        print("Led 2 关闭")
        utime.sleep(1)
        print("从第二个线程退出")
        utime.sleep(1)
        sLock.release()
_thread.start_new_thread(CoreTask, ())
而真:
    # 我们获取信号量锁
    sLock.acquire()
    print("进入主线程")
    led1.toggle()
    utime.sleep(0.15)
    print("Led 1 开始切换。")
    utime.sleep(1)
    print("退出主线程")
    utime.sleep(1)
    # 我们释放信号量锁
    sLock.release()

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    242

    文章

    23252

    浏览量

    660594
  • Micropython
    +关注

    关注

    0

    文章

    68

    浏览量

    4731
收藏 人收藏

    评论

    相关推荐

    【Embedded Pi申请】基于Raspberry Pi的智能家居远程控制系统

    本项目大体分为4个阶段,第一阶段为入门篇,切身体验Raspberry Pi开发套件硬件资源,软件资源和开发环境;第二阶段为功能篇,通过编程,实现 ArduinoTM shields各功
    发表于 11-24 09:33

    Micropython STM32添加多线程功能

    Micropython 官方下载的代码默认未开启多线程支持,可用以下方法: Micropython添加多线程功能的STM32目录下mpconfigport.h中 #define MIC
    发表于 08-24 06:08

    【BPI-Pico-RP2040 开发板】RP2040MicroPython环境中多线程编程

    为参考到的部分资料列表:树莓派Pico迷你开发板MicroPython多线程编程实践Multithreaded on Raspberry Pi
    发表于 04-12 15:54

    linux多线程编程课件

    电子发烧友为您提供了linux多线程编程课件,希望对您学习 linux 有所帮助。部分内容如下: *1、多线程模型单处理器模型和多处理器系统
    发表于 07-10 11:58 0次下载

    linux多线程编程开发

    本文中我们针对 Linux 多线程编程的主要特性总结出 5 条经验,用以改善 Linux 多线程编程的习惯和避免其中的开发陷阱。
    发表于 12-26 14:24 55次下载
    linux<b class='flag-5'>多线程</b><b class='flag-5'>编程</b>开发

    Windows多线程编程

    计算机上的上位机制作工具语言之Windows多线程编程,感兴趣的可以看看。
    发表于 09-01 15:27 0次下载

    什么是多线程编程?多线程编程基础知识

    摘要:多线程编程是现代软件技术中很重要的一个环节。要弄懂多线程,这就要牵涉到多进程。本文主要以多线程编程以及
    发表于 12-08 16:30 1.3w次阅读

    Raspberry Pi安装RetroPie的教程

    RetroPie是一个用于 Raspberry Pi 模拟复古视频游戏的软件库。本教程中,我们将在
    的头像 发表于 08-26 15:26 4137次阅读
    <b class='flag-5'>在</b><b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>上</b>安装RetroPie的教程

    通过Raspberry Pi进行简单的物联网LED控制

    电子发烧友网站提供《通过Raspberry Pi进行简单的物联网LED控制.zip》资料免费下载
    发表于 12-09 10:02 0次下载
    <b class='flag-5'>通过</b><b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>进行简单的物联网<b class='flag-5'>LED</b><b class='flag-5'>控制</b>

    Raspberry Pi通过网络控制LED

    电子发烧友网站提供《Raspberry Pi通过网络控制
    发表于 12-13 09:37 0次下载
    <b class='flag-5'>在</b><b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>上</b><b class='flag-5'>通过</b>网络<b class='flag-5'>控制</b><b class='flag-5'>LED</b>

    通过TwythonRaspberry Pi发推文!(第2部分)

    欢迎来到通过“Twython”Raspberry Pi发推文的第2部分。和上次一样,我们将遵循Ras
    的头像 发表于 03-01 10:19 723次阅读
    <b class='flag-5'>通过</b>Twython<b class='flag-5'>在</b><b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>上</b>发推文!(第2部分)

    【试用报告】RP2040MicroPython环境中多线程编程

    更强大的是,RP2040使用了ARM Cortex M0+,既然是的,那么我们就可以BPI-Pico-RP2040运行
    的头像 发表于 04-18 09:15 5467次阅读

    通过USB对Raspberry Pi进行编程

    电子发烧友网站提供《通过USB对Raspberry Pi进行编程.zip》资料免费下载
    发表于 06-30 10:24 0次下载
    <b class='flag-5'>通过</b>USB对<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>进行<b class='flag-5'>编程</b>

    mfc多线程编程实例

    (图形用户界面)应用程序的开发。在这篇文章中,我们将重点介绍MFC中的多线程编程多线程编程软件开发中非常重要,它可以实现程序的并发执行
    的头像 发表于 12-01 14:29 1502次阅读

    socket 多线程编程实现方法

    现代网络编程中,多线程技术被广泛应用于提高服务器的并发处理能力。Socket编程是网络通信的基础,而将多线程技术应用于Socket
    的头像 发表于 11-12 14:16 339次阅读