授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力。希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石。。。

QQ技术互动交流群:ESP8266&32 物联网开发 群号622368884,不喜勿喷

一、你如果想学基于Arduino的ESP8266开发技术

一、基础篇

  1. ESP8266开发之旅 基础篇① 走进ESP8266的世界
  2. ESP8266开发之旅 基础篇② 如何安装ESP8266的Arduino开发环境
  3. ESP8266开发之旅 基础篇③ ESP8266与Arduino的开发说明
  4. ESP8266开发之旅 基础篇④ ESP8266与EEPROM
  5. ESP8266开发之旅 基础篇⑤ ESP8266 SPI通信和I2C通信
  6. ESP8266开发之旅 基础篇⑥ Ticker——ESP8266定时库

二、网络篇

  1. ESP8266开发之旅 网络篇① 认识一下Arduino Core For ESP8266
  2. ESP8266开发之旅 网络篇② ESP8266 工作模式与ESP8266WiFi库
  3. ESP8266开发之旅 网络篇③ Soft-AP——ESP8266WiFiAP库的使用
  4. ESP8266开发之旅 网络篇④ Station——ESP8266WiFiSTA库的使用
  5. ESP8266开发之旅 网络篇⑤ Scan WiFi——ESP8266WiFiScan库的使用
  6. ESP8266开发之旅 网络篇⑥ ESP8266WiFiGeneric——基础库
  7. ESP8266开发之旅 网络篇⑦ TCP Server & TCP Client
  8. ESP8266开发之旅 网络篇⑧ SmartConfig——一键配网
  9. ESP8266开发之旅 网络篇⑨ HttpClient——ESP8266HTTPClient库的使用
  10. ESP8266开发之旅 网络篇⑩ UDP服务
  11. ESP8266开发之旅 网络篇⑪ WebServer——ESP8266WebServer库的使用
  12. ESP8266开发之旅 网络篇⑫ 域名服务——ESP8266mDNS库
  13. ESP8266开发之旅 网络篇⑬ SPIFFS——ESP8266 Flash文件系统
  14. ESP8266开发之旅 网络篇⑭ web配网
  15. ESP8266开发之旅 网络篇⑮ 真正的域名服务——DNSServer
  16. ESP8266开发之旅 网络篇⑯ 无线更新——OTA固件更新

三、应用篇

  1. ESP8266开发之旅 应用篇① 局域网应用 ——炫酷RGB彩灯
  2. ESP8266开发之旅 应用篇② OLED显示天气屏
  3. ESP8266开发之旅 应用篇③ 简易版WiFi小车

四、高级篇

  1. ESP8266开发之旅 进阶篇① 代码优化 —— ESP8266内存管理
  2. ESP8266开发之旅 进阶篇② 闲聊Arduino IDE For ESP8266配置
  3. ESP8266开发之旅 进阶篇③ 闲聊 ESP8266 Flash
  4. ESP8266开发之旅 进阶篇④ 常见问题 —— 解决困扰
  5. ESP8266开发之旅 进阶篇⑤ 代码规范 —— 像写文章一样优美
  6. ESP8266开发之旅 进阶篇⑥ ESP-specific APIs说明

1. 前言

    Ticker是Arduino Core For ESP8266 内置的一个定时器库,这个库用于规定时间后调用函数。

2. Ticker库

    Ticker的功能非常简单,就是规定时间后调用函数。所以读者可以发现本章节非常简短,可以快速了解使用。
    老规矩,先上一个博主总结的百度脑图:

总体上,根据功能可以把方法分为两大类:

  • 定时器管理方法;
  • 定时器启用方法;

2.1 定时器管理方法

2.1.1 detach() —— 停止Ticker

函数说明:

/**
 * 停止Ticker
 */
void detach();

2.1.2 active() —— Ticker是否激活状态

函数说明:

/**
 * Ticker是否激活状态
 * @return bool true表示ticker启用
 */
bool active();

2.2 定时器启用方法

2.2.1 once() —— xx秒后只执行一次

函数说明:

/**
 * xx秒后只执行一次
 * @param seconds 秒数
 * @param callback 回调函数
 */
void once(float seconds, callback_function_t callback);

/**
 * xx秒后只执行一次
 * @param seconds 秒数
 * @param callback 回调函数
 * @param arg 回调函数的参数
 */
void once(float seconds, void (*callback)(TArg), TArg arg)

callback_function_t定义如下:

typedef std::function<void(void)> callback_function_t;

2.2.2 once_ms() —— xx毫秒后只执行一次

/**
 * xx毫秒后只执行一次
 * @param seconds 秒数
 * @param callback 回调函数
 */
void once_ms(float seconds, callback_function_t callback)

/**
 * xx毫秒后只执行一次
 * @param seconds 秒数
 * @param callback 回调函数
 * @param arg 回调函数的参数
 */
void once_ms(uint32_t milliseconds, void (*callback)(TArg), TArg arg);

2.2.3 attach() —— 每隔xx秒周期性执行

函数说明:

/**
 * 每隔xx秒周期性执行
 * @param seconds 秒数
 * @param callback 回调函数
 */
void attach(float seconds, callback_function_t callback);

/**
 * 每隔xx秒周期性执行
 * @param seconds 秒数
 * @param callback 回调函数
 * @param arg 回调函数的参数
 */
void attach(float seconds, void (*callback)(TArg), TArg arg)

2.2.4 attach_ms() —— 每隔xx毫秒周期性执行

函数说明:

/**
 * 每隔xx毫秒周期性执行
 * @param seconds 秒数
 * @param callback 回调函数
 */
void attach_ms(float seconds, callback_function_t callback);

/**
 * 每隔xx毫秒周期性执行
 * @param seconds 秒数
 * @param callback 回调函数
 * @param arg 回调函数的参数
 */
void attach_ms(uint32_t milliseconds, void (*callback)(TArg), TArg arg)

注意点:

  • 不建议使用Ticker回调函数来阻塞IO操作(网络、串口、文件);可以在Ticker回调函数中设置一个标记,在loop函数中检测这个标记;
  • 对于arg,必须是 char, short, int, float, void, char 之一;

3. 实例

3.1 实例1

实例说明
    板载LED 0.3s 慢闪,然后 0.1s快闪,最后常亮;
源码

/**
 * 代码功能:板载LED开始0.3秒闪,然后快闪,最后常亮
 */

#include <Ticker.h>

Ticker flipper;

int count = 0;

void flip() {
  int state = digitalRead(LED_BUILTIN);  // get the current state of GPIO1 pin
  digitalWrite(LED_BUILTIN, !state);     // set pin to the opposite state

  ++count;
  // 当翻转次数达到20次的时候,切换led的闪烁频率,每隔0.1s翻转一次
  if (count == 20) {
    flipper.attach(0.1, flip);
  }
  // 当次数达到120次的时候关闭ticker
  else if (count == 120) {
    flipper.detach();
  }
}

void setup() {
  //LED_BUILTIN 对应板载LED的IO口
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);

  //每隔0.3s 翻转一下led状态
  flipper.attach(0.3, flip);
}

void loop() {
}

注意点:

  • LED_BUILTIN并没有看到我们代码中哪里有定义到,其实这个是根据每个板子的不同写在不同的配置文件的。详情请查阅:

各位读者可以查阅源码中的位置,就会发现有很多常用的板子(博主这里使用到的NodeMcu)。

3.2 实例2

实例说明
    板载LED 来回快速闪烁
源码

#include <Ticker.h>

Ticker tickerSetHigh;
Ticker tickerSetLow;

void setPin(int state) {
  digitalWrite(LED_BUILTIN, state);
}

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(1, LOW);

  // 每隔25ms调用一次 setPin(0)
  tickerSetLow.attach_ms(25, setPin, 0);

  // 每隔26ms调用一次 setPin(1)
  tickerSetHigh.attach_ms(26, setPin, 1);
}

void loop() {
}

4. 总结

本篇章非常简单,就是一个Ticker定时器的使用,请读者快速翻阅;

最新文章

  1. 信息系统实践手记6-JS调用Flex的性能问题一例
  2. 普通B/S架构模式同步请求与AJAX异步请求区别(个人理解)
  3. codeforces 493A. Vasya and Football 解题报告
  4. Java设计模式-策略模式(strategy)
  5. Html页面插入flash代码
  6. spring mvc后台接收中文乱码
  7. sqlite3API函数
  8. [js高手之路]html5 canvas教程 - 1px问题以及绘制坐标系网格
  9. 主席树(BZOJ2653)
  10. 通过Django Channels设计聊天机器人WEB框架
  11. Hadoop 生产配置文件V2
  12. windows 服务中托管asp.net core
  13. robot_framework环境搭建
  14. Fedora-Workstation-netinst-x86_64-27-1.6系统之无法使用中文解决办法
  15. C#如何使用SqlCacheDependency
  16. WTL汉化版
  17. .NET Core 使用 Kestrel
  18. 20170720 Celery 异步任务处理到Sql Server 发生死锁
  19. hdu1796 How many integers can you find 容斥原理
  20. SQL - 先安装SQL2008 R2后安装AD导致无法正常登陆数据库(无法启动MSSQLSERVER)

热门文章

  1. 集群某节点DataNode服务无法启动解决(报java.net.BindException:Address already in use错误)
  2. [Spark] 05 - Spark SQL
  3. 自己动手实现智能家居之树莓派GPIO简介(Python版)
  4. 美化H标签
  5. CDH6.3.0 - Cloudera Enterprise 6 Release Guide 安装准备篇
  6. Python学习笔记整理总结【Django】:中间件、CSRF、缓存
  7. opencv边缘检测-拉普拉斯算子
  8. DP动态规划———LCS最长公共子序列
  9. cat命令显示文件指定行
  10. 织梦DEDE分类信息实现联动筛选(支持多条件多级选项)解决方案