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   阅读(611)   评论(0)
 标签: maker ESP32 MicroPython

涨知识
PWM

PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过调节占空比的变化来调节信号、能量等的变化。

评论:
相关文章
小鹏物联网 MicroPython 智能浇花方案

相信很多人都有把绿植给养死的经历,可能是浇水过多、忘记浇水、较长时间不在家不能浇水等,本文介绍一种可以灵活定制的智能浇花方案。


MicroPython 开发ESP32应用之线程介绍及实例分析

MicroPython 在 ESP32 上支持线程(Thread)功能,通过_thread模块实现。线程允许程序并发执行多个任务,适合处理需要同时运行的场景,例如传感器数据采集和网络通信。


盛思发布掌控板3.0

掌控板3.0升级了主控,还主打AI。带有双麦克风阵列,增加了音频解码芯片,板载了一个1W喇叭,还把之前的单色屏幕换成了1.47寸的彩色屏幕,有更多的可玩性。


ESP32 MicroPython采集模拟传感器数值

使用了 MicroPython 库,通过 定时器(Timer) 和 ADC(模数转换器) 功能来实时读取传感器数据。使用定时器可以实现高精度、非阻塞、低资源消耗的周期性任务,保证实时性和可靠性,特别适用于嵌入式系统中的多任务处理和低功耗场景。


ESP32 使用DAC模拟输出完成两路呼吸灯

ESP32的DAC函数可以实现真正的模拟输出。


在 ESP32 上使用 LEDC (PWM)

ESP32 没有Arduino输出 PWM 的 analogWrite(pin, value) 方法,取而代之的 ESP32 有一个 LEDC 来实现PWM功能。


MicroPython PWM类

machine.pwm是MicroPython中用于控制PWM输出的模块之一,它提供了一些方法和属性,用于设置和控制PWM输出的频率、占空比等参数,从而实现对各种应用场景的控制。


Micropython Pin类

Pin 类是 machine 模块下面的一个硬件类,用于对引脚的配置和控制,提供对 GPIO 的操作方法。


MicroPython SPI类

MicroPython的SPI是一个用于进行串行外设接口总线协议的类。


ESP32 使用 MicroPython:I2C 总线

本文以一个简单的例程帮助大家在 MicroPython 下使用 I2C

搜索
小鹏STEM教研服务

专属教研服务系统,助您构建STEM课程体系,打造一站式教学环境。