| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 学习太极创客 — ESP8226 (十二)ESP8266 多任务处理 -> 正文阅读 |
|
[嵌入式]学习太极创客 — ESP8226 (十二)ESP8266 多任务处理 |
资料链接:http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-c/esp8266-tips/ticker/ ESP8266 在运行过程中,只能一条线式的依次执行任务。但是我们在开发物联网项目时,可能需要 ESP8266 在执行某一任务的过程中,还能处理其它任务。比如,我们使用 ESP8266 来控制电机运行的同时,还需要定时检查某一个引脚上连接按钮有没有被用户按下。 为了解决以上问题,我们可以使用 Ticker 库来解决这一问题。 ESP8266 多任务处理 – Ticker 库使用说明Ticker 库并不是 Arduino 的第三方库,无需安装。 1、Ticker 库基本操作程序功能:开发板通过 PWM 控制 LED 灯产生呼吸灯效果的同时,通过串口发送信息。
程序说明: 利用 Ticker 库,我们可以让 ESP8266 定时调用某一个函数。 通过示例程序,我们可以看到,ESP8266 将会每隔一秒钟通过串口监视器输出一次信息。我们是通过语句ticker.attach(1, sayHi) 来实现这一操作的。 该语句中的 attach 函数有两个参数。第一个参数可控制调用函数的时间间隔,单位是秒。这里的数字 1 说明 ESP8266 将会每隔一秒钟调用一次函数。那么具体调用哪一个函数呢?这个函数名称正是通过第二个参数来限定的。也就是名称为 sayHi 的函数。该函数将会让 ESP8266 定时通过串口监视器输出一次信息。信息内容是“Hi”后面跟一个数值。这个数值是为了标注 sayHi 函数被调用了多少次。 2、停止定时执行函数假设,我们只想让 sayHi 这个函数执行有限的次数,又应该如何处理呢? 当 Ticker 定时调用某一函数执行到一定次数后,我们可以使用detach 函数来停止定时调用函数。在操作上,只需要在 sayHi 这个函数中添加 if 语句即可,示例如下。
运行结果如下, 3、向定时调用函数传递参数我们可以向 Ticker 库定时调用的函数来传递参数。不过要注意的是,传递参数的数量只能是一个。 请注意:attach函数所能传递的参数最多只有一个。另外该参数仅能是以下类型中的一种:char, short, int, float, void *, char *。 如下面示例程序所示,语句 ticker.attach(1, sayHi, 8) 有 3 个参数。其中第三个参数就是向定时调用的sayHi函数所传递的参数。
运行结果如下, 示例4. 利用多个Ticker对象让ESP8266处理多任务我们可以建立多个 Ticker 对象,让多个 Ticker 对象来实现 ESP8266 的多任务处理。 如下实例程序所示,我们通过语句 Ticker buttonTicker;来建立第二个 Ticker 对象。 然后再使用 buttonTicker.attach_ms(100, buttonCheck) 来实现第二个 Ticker 对象的任务处理。 这里我们使用了 attach_ms 函数,该函数与 attach 函数功能相似,唯一区别是 attach 函数的时间单位是秒,而 attach_ms 的时间单位是毫秒。也就是说,这条语句将会让 ESP8266 每隔 100 毫秒执行一次 buttonCheck 函数。
示例5. 使用”计数器”来控制 ESP8266 定时执行较复杂的函数Ticker 定时调用的函数必须要“短小精悍”。比如以上一系列的示例程序中,我们仅仅让 Ticker 定时调用函数执行简单的串口数据输出,以及很基本的运算。事实上,在使用 Ticker 库时,定时调用函数必须要很快的执行完毕。否则会产生难以预料的问题。 这就产生了一个问题。假如我们需要 ESP8266 定时执行的操作较为复杂,这该如何是好呢?
这个程序运行有问题,总是会导致异常而自动重启。 这个程序与视频中所使用的库的版本不一样,我这里使用的版本是3.0.2,
所以要想让程序正常运行,其中一个的解决方法就是重新安装 2.6.3 版本的库,然后不加上 WiFiClient client; 这个对象。 后来,经过尝试,发现将 WiFiClient client; 定义在 HTTPClient httpClient; 的前面,程序运行就不会出现任何问题了,所以不用重新安装库了(上面程序已改正过来)。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 0:41:42- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |