开启MicroPython多线程模式

  • MicroPython官方版本对多线程的支持
  • 修改后的MicroPython多线程示例
  • 代码运行效果

MicroPython官方版本对多线程的支持

MicroPython官方版本尝试对 多线程 的支持,但是目前的支持只停留在非常初级的阶段,离真正可用还是有一段距离。在尝试增加多线程的支持过程中踩坑无数,不过最后总算成功实现所需要的功能。

修改后的MicroPython多线程示例

多线程的基础上增加了线程锁和信号量的支持:

from umachine import Pin
import utime
import _threadlock = _thread.allocate_lock()
semp = _thread.allocate_semephare()

定义4个用户线程,分别是信号量演示线程/i2c演示线程/LED演示线程和MQTT消息发布线程:

def sem_thread():while True:semp.pend()print('sem_thread run')def i2c_thread():while True:print('i2c_thread read 0x57')i2c0.readfrom_mem(0x57, 0, 4)utime.sleep(10)print('i2c_thread read 0x5f')i2c0.readfrom_mem(0x5f, 0x9a, 6)utime.sleep(10)#_thread.exit()def led_thread(time_):while True:print('led_thread on')led0.value(1)utime.sleep(time_)print('led_thread off')led0.value(0)utime.sleep(time_)semp.post()def mqtt_thread(time_):while True:lock.acquire()print('mqtt_thread message 1')mqtt.publish('/home/bedroom/lamp', 'led on')mqtt.publish('/home/bedroom/speaker', 'music off')utime.sleep(time_)print('mqtt_thread message 2')mqtt.publish('/home/bedroom/lamp', 'led off')mqtt.publish('/home/bedroom/speaker', 'play music')utime.sleep(1)print('mqtt_thread message 3')mqtt.publish('/smart_home/bedroom/window', 'close window')utime.sleep(time_)lock.release()#_thread.exit()

MQTT消息订阅回调函数和连接成功回调函数:

def callback_on_connect(userdata, flags, rc):mqtt.subscribe('/home/bedroom/msgbox', 0)def callback_on_message(userdata, message):print(message)mqtt.publish('/home/bedroom/air', 'air turn on')

Wi-Fi连接到AP的Python代码(自己写的ATWINC1500 MicroPython库):

from winc1500 import WLAN
wlan = WLAN(STA_IF)
wlan.connect('KSLINxxxxxx', 'xxxxxxxxx', AUTH_WPA_PSK)

MQTT的连接和订阅(参考前面回调函数):

from winc1500 import MQTT
mqtt = MQTT(MQTT_CLIENT)
mqtt.username_pw_set('winc_mp_mqtt', '')
mqtt.on_connect(callback_on_connect)
mqtt.on_message(callback_on_message)
mqtt.connect('iot.eclipse.org', 1883, 30)

最后是开始启动线程的操作

_thread.start_new_thread(led_thread, (2,))
_thread.start_new_thread(i2c_thread, ())
_thread.start_new_thread(sem_thread, ())
_thread.start_new_thread(mqtt_thread,(3,))while True:pass

代码运行效果

补充:MicroPython代码运行在Microchip SAMV71-XULT+ATWINC1500(Wi-Fi模组)

开启MicroPython多线程模式相关推荐

  1. 单线程和多线程的区别_谷歌下载东西超慢?开启Chrome多线程下载,下载速度提升10倍+...

    用谷歌浏览器下载速度慢,浏览器采用的是单线程下载,"一人难敌四手"的浏览器自然斗不过多线程了.所以说浏览器想要提高下载速度,就得采用多线程的下载方式,不过到目前为止,Chrome多 ...

  2. c++多线程模式下的socket编程(线程池实现)

    socket 编程可以说是一个基本的技术掌握,而多个客户端向服务端发送请求又是一个非常常见的场景,因此多线程模式下的socket编程则显得尤为常见与重要. 本文主要利用线程池的技术,来实现多线程的模式 ...

  3. 爬虫之selenium开启无界面模式

    绝大多数服务器是没有界面的,selenium控制谷歌浏览器也是存在无界面模式的(又称之为无头模式) 开启无界面模式的方法 实例化配置对象 options = webdriver.ChromeOptio ...

  4. 拼多多员工爆料:拼多多开启硬核模式!午休减半!每月工作300小时!千万别来拼多多!...

    请点击上面 一键关注! 业内一向以加班著称的拼多多工作模式又有新变化了! 一个拼多多员工发帖爆料:拼多多开启硬核模式,午休减半,每月工作300小时.真诚呼吁:劝告各位不要来这种公司了! 网友们都表示& ...

  5. OPPO R9s在哪里开启Usb调试模式的完美步骤

    就在我们使用pc通过数据线连接到安卓手机的时候,如果手机没有开启Usb调试模式,pc则没办法成功读到我们的手机,如果遇到此情况我们需要找处理方法将手机的Usb调试模式开启,如下内容我们记录一下OPPO ...

  6. 装完Windows 7后开启硬盘AHCI模式的方法

    装完Windows 7后开启硬盘AHCI模式的方法 在windows 7中修改sata接口AHCI模式前需要修改注册表,否者修改后重启会蓝屏. 注册表项:HKEY_LOCAL_MACHINE\Syst ...

  7. 多线程模式之MasterWorker模式

    多线程模式之MasterWorker模式 Master-Worker模式的核心思想是,系统由两类进程协作工作:Master进程和Worker进程.Master进程负责接收和分配任务,Worker进程负 ...

  8. mysql严格模式 报错_代码一上传服务器就报错-尝试开启 MySQL 严格模式

    先前遇到过一个非常奇怪的问题,写 MySQL 数据库的 web 程序的时候,在自己本机环境下跑的好好的,一上传到远程服务器环境上,就各种报错,各种异常.一般来讲,问题的根源多半是环境差异导致的,且大概 ...

  9. 天气模式_江西现罕见持续阴雨寡照天气 市民开启“花式吐槽”模式

    雨夜中的江西省南昌市红谷滩新区.(2月12日摄) 王剑 摄 雨夜中的江西省南昌市红谷滩新区.(2月12日摄) 王剑 摄 中新网南昌2月19日电 (赵冠男 记者王剑)19日,中国南方在阴雨天气中迎来&q ...

最新文章

  1. linux运维基础篇 unit14
  2. python怎样定义一个数组_Python创建数组
  3. MyBatis动态SQL,写SQL更爽
  4. 大学计算机一级计算机应用试题及答案,大学生计算机应用基础试题及答案
  5. python共享单车案例分析_python分析数据分析项目:共享单车租用情况影响因素探索分析...
  6. Tomcat学习总结(14)—— Tomcat常见面试题
  7. matlab进行动力吸振器设计,动力吸振器的参数设计和动力学分析
  8. vue3新增Teleport组件
  9. 结构体第一个成员是结构体,则为父结构体首地址demo(六)
  10. android 呼吸灯权限_Android 呼吸灯效果
  11. Linux中eclipse配置Maven,eclipse maven选项怎么配置settings
  12. 备战数学建模34-BP神经网络预测2
  13. PDF Expert for Mac(PDF阅读器) 2.4.29最新中文激活版
  14. html 模拟鼠标移动,如何在网页端用js模拟鼠标移动点击等操作
  15. 如何实现高效的室内定位和追踪?
  16. 【二】[详细]针孔相机模型、相机镜头畸变模型、相机标定与OpenCV实现
  17. Ubuntu 16.04+1080Ti机器学习基本环境配置【转】
  18. 【程序员股民系列】如何用python, pandas, numpy, matplotlib绘制每日行业成交额图
  19. 东秦OJ_1841: 超级密码
  20. Python 文件命名引发的module has no attribute错误

热门文章

  1. 说说对亚马逊小创业者的一些建议吧
  2. 完全卸载 tunnelblick
  3. 【含源码】这套Spring Cloud项目牛逼了
  4. more exceptional c++简要笔记
  5. 使用html记笔记,如何用前端的方式记笔记
  6. ben we_MysticXiye:若不能以WE的前缀继续前行 请无愧于自己就好
  7. Ubuntu16.04, 安装vncserver (tightvnc) 连接服务器
  8. 光模块和光纤如何区分单模,多模
  9. php简单在线考试系统
  10. 葵花宝典(关于数据库面试题)