Micropython基于ESP32的多线程开发

本文学习如何使用ESP32开发板来进行多线程的开发。
环境

        ESP32 + Thonny IDE

单任务

        我们先来看看单任务单线程,从上到下依次执行,先是每隔1秒打印1个1,然后是每隔1秒打印1个2
import time
 
for i in range(3):
    print("1")
    time.sleep(1)
    
for i in range(3):
    print("2")
    time.sleep(1)
输出为
Micropython基于ESP32的多线程开发

多任务

        我们再来看看多任务,多任务感觉上去程序可以同时执行多个不同的代码,例如多个while循环同时执行。
import _thread
import time
import sys
import machine
 
def test1(*args, **kwargs):
    for i in range(3):
        print("1")
        time.sleep(1)
 
def test2(*args, **kwargs):
    for i in range(3):
        print("2")
        time.sleep(1)
 
# 此处创建2个线程
thread_1 = _thread.start_new_thread(test1, (1,))
thread_2 = _thread.start_new_thread(test2, (2,))
说明:_thread.start_new_thread
第1个参数,函数的引用,理解为线程要到哪里执行代码
第2个参数,元组,要给线程执行函数的实参,必须是元组
第3个参数(可有可无),命名参数,给线程执行函数的实参。如:1=9。
输出为:
Micropython基于ESP32的多线程开发

MicroPython中的多线程

        我们可以使用_thread来在ESP32中开发多进程的代码。如下:
import _thread
import time
import sys
import machine
 
# ---------- 这是一个线程要执行的代码 ------------
def test1(*args, **kwargs):
    while True:
        print("1")
        time.sleep(1)
 
# ---------- 这是另一个线程要执行的代码 ------------
def test2(*args, **kwargs):
    while True:
        print("2")
        time.sleep(1)
 
# ---------- 这里创建线程 ------------
thread_1 = _thread.start_new_thread(test1, (1,))
thread_2 = _thread.start_new_thread(test2, (2,))
 
# ---------- 这是主线程要执行的代码 ------------
while True:
    print("3")
    time.sleep(1)

运行结果:
Micropython基于ESP32的多线程开发

六、建议

        在ESP开发板中,如果不是必须不建议使用多线程,因为我们的开关板存储和执行性能有限,多线程会带来大的开销,所以开发过程中我们要合理的安排。
————————————————
原文链接:https://blog.csdn.net/zhusongziye/article/details/128063353
- 本文内容来自网络,如有侵权,请联系本站处理。

2024-02   阅读(1280)   评论(0)
 标签: 创客 ESP32 MicroPython

涨知识
IMU

IMU(Inertial Measurement Unit),即惯性测量单元,用于测量物体三轴姿态角(或角速率)以及加速度。

评论:
相关文章
【ESP32 C++教程】Unit7-2:OLED显示屏

本节主要讲解OLED显示屏的使用和Display类及派生类的介绍及使用。


【ESP32 C++教程】Unit7-1:四位7段式数码管

本节主要讲解用TM1650来驱动四位7段式数码管模块的显示使用。


【ESP32 C++教程】Unit6-4:资源互斥访问

本节主要讲解FreeRTOS任务间如何使用互斥对象来实现资源互斥访问。


ESP32 Guru Meditation Error报错定位分析

在ESP32的开发,经常会有系统崩溃一直重启的情况,那么如何快速定位出现异常的代码呢?


【ESP32 C++教程】Unit6-3 FreeRTOS任务间通信

本节主要讲解FreeRTOS任务间如何使用消息队列、事件组和二进制信号量进行通信。


【ESP32 C++教程】Unit6-2 FreeRTOS多任务

本节主要讲解Task类,FreeRTOS多任务的使用。


【ESP32 C++教程】Unit6-1 定时器

本节主要讲解Timer类,FreeRTOS定时器的使用。


【ESP32 C++教程】Unit5-2 执行器件之舵机

本节主要讲解舵机驱动类和用按键控制舵机。


【ESP32 C++教程】Unit5-1 执行器件之继电器

本节主要讲解执行器件类型和用按键控制继电器。


【ESP32 C++教程】Unit4-3 红外接收和遥控

本小节主要讲解红外接收和遥控器件,以及遥控操作LED。