2019-3-20 16:26:30 [显示全部楼层]
2231浏览
查看: 2231|回复: 1

[ESP32系列教程] ESP32 MicroPython教程:向线程函数传递参数

[复制链接]
简介

本篇教程的目的主要是说明在MicroPython中如何向线程函数传递参数。有关创建线程的介绍请参见此篇先前的帖子:ESP32 MicroPython教程:创建线程
测试使用的是DFRobot的ESP-WROOM-32设备,该设备集成在FireBeetle ESP32开发板中。使用的MicroPython IDE是uPyCraft

代码

本教程代码与上一篇有关MicroPython线程的帖子非常相似。首先需要导入_thread模块(https://docs.pycom.io/chapter/firmwareapi/micropython/_thread.html),以提供与线程相关的功能。
  1. import _thread
复制代码
然后,我们将声明thread函数。在本例中,我们将指定其接收两个输入参数,第一个参数是线程函数描述,第二个参数是一个计数器。
  1. def threadFunction(description, count):
  2. ## Thread function code
复制代码
这个线程函数的逻辑非常简单。我们将先打印出线程描述参数,然后通过循环每次打印一条消息。循环的迭代次数等于线程函数的第二个参数(计数器值)。
  1. def threadFunction(description, count):
  2.   print(description)
  3.   i = 0
  4.   while i < count:
  5.     print("Iteration: " + str(i) )
  6.     i=i+1
复制代码
在前篇帖子中介绍过,当函数返回时,线程就会退出。

最后,我们将调用_thread模块(https://www.programiz.com/python-programming/tuple)的start_new_thread函数,以启动线程。第一个参数接收的是我们之前定义的线程函数,第二个参数则是一个包含函数参数的元组。

因此,根据定义,元组的第一个元素是一个描述字符串,第二个元素则是一个计数器。本例中,我们将计数器设为5,表示循环共有5次迭代,但是您也可以使用不同的数值。
  1. _thread.start_new_thread(threadFunction, ("Thread test function", 5))
复制代码
完整的源代码如下所示。
  1. import _thread
  2. def threadFunction(description, count):
  3.   print(description)
  4.   i = 0
  5.   while i < count:
  6.     print("Iteration: " + str(i) )
  7.     i=i+1
  8. _thread.start_new_thread(threadFunction, ("Thread test function", 5))
复制代码
测试代码

将代码上传到ESP32并运行即可对代码进行测试。代码执行之后,您将在MicroPhthon控制台上看到类似图1的输出结果,其中包括线程描述字符串以及循环每次迭代的输出。正如预料,线程函数执行了5次循环迭代,每次迭代打印一条消息。


1esp32-micropython-passing-arguments-to-thread.png
图1 - 脚本代码输出结果。

注:本文作者是Nuno Santos,他是一位和蔼可亲的电子和计算机工程师,住在葡萄牙里斯本 (Lisbon)。
他写了很多有关ESP32、ESP8266的有用的教程和项目。

查看更多ESP32/ESP8266教程和项目,请点击 : ESP32教程汇总贴

gada888  版主

发表于 2019-3-21 13:50:51

学一哈
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2021 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail