ESP8266 AT指令集开发实例(WeMos D1开发板)
来源:互联网 发布:不用手机注册淘宝账号 编辑:程序博客网 时间:2024/06/03 16:59
- 前言
- ATCmd库
- 介绍
- 功能
- 下载
- 安装
- ATCmd使用说明
- 类和方法
- ATCommand AT指令集
- CommandItem 指令项
- CommandParameter 指令参数
- 实例
- 示例代码
- 创建命令项
- 解析AT指令
- 返回结果
- 类和方法
前言
本文将以WeMos D1开发板
为例,赋予开发板解析AT指令的功能。
本实例中所有代码在WeMos开发板中均能正常执行,理论上兼容NodeMCU及其他基于ESP8266的开发板。
ATCmd库
介绍
ATCmd是物联网硬件设备库TyphaSeed中用以处理AT指令的C++库,旨在帮助开发者轻松实现开发板对AT指令的定义与解析执行。
功能
- 创建AT指令集
- 动态向AT指令集中添加指令项
- 灵活的为指令项添加回调函数
- 自动匹配指令
- 便捷获取附带参数
下载
下载Libraries - ATCmd v0.9.0
:
https://github.com/landriesnidis/TyphaSeed/archive/0.9.0.zip
查看最新版本(名称为: Libraries - ATCmd
的最新版本):
https://github.com/landriesnidis/TyphaSeed/releases
安装
下载zip,将文件解压至到Arduino指定的目录中,这个指定的目录在分不同的平台而定:
- 在Windows平台一般是”My Documents\Arduino\libraries”
- 在mac平台一般是”Documents/Arduino/libraries”
- 在Linux平台一般是”sketchbook”目录下的libraries
ATCmd使用说明
类和方法
ATCommand AT指令集
- 添加指令项
void addCommandItem(CommandItem& item);
- 添加指令项数组
void addCommandItems(CommandItem items[], int count);
- 解析AT指令(返回值中以”
\r
“作为结束符)
String parse(String strCmd);
CommandItem 指令项
- 回调函数类型
typedef std::function
<String(CommandParameter)>
CommandFunc;
- 构造函数
CommandItem(String strName, CommandFunc func);
CommandItem(const char * cpName, CommandFunc func);
- 执行回调函数
String execute(CommandParameter param);
- 获取命令名称
String& getName();
CommandParameter 指令参数
- 构造函数
CommandParameter(String& strParam);
- 获取参数个数
uint8_t count();
- 获取第index个参数项
String get(uint8_t index);
实例
接下来将以ATCmd库中附带的示例代码AT指令控制板载LED (AT_LED.ino)
进行演示和讲解(基于WeMos D1开发板)。
示例代码
#include <ATCommand.h>ATCommand atc;//初始化AT指令集void initATCommands(){ //定义一个测试指令,示例:AT+TEST=1,2,3... CommandItem cmdTest("TEST", [](CommandParameter param)->String{ Serial.printf("parameter count : %d\n", param.count()); for (int i = 0; i < param.count(); i++){ Serial.printf("arg%d=%s\n", i, param.get(i).c_str()); } return "OK"; }); //定义一个控制板载LED的指令,示例:AT+LED=0 或 AT+LED=1 CommandItem cmdLED("LED", [](CommandParameter param)->String{ if (param.count() != 1){ return "ERROR"; } //获取第0位参数 String arg0 = param.get(0); if (arg0.equals("0")){ digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW } else if (arg0.equals("1")){ digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) } else{ return "ERROR"; } return "OK"; }); atc.addCommandItem(cmdTest); atc.addCommandItem(cmdLED);}//接收来自串口的数据void receiveDataFromSerial(){ static String temp_s = ""; char temp_c; if (!Serial) return; while (Serial.available() > 0) { temp_c = char(Serial.read()); //单字节读取串口数据 if (temp_c == '\r') { //判断是否为终止符 Serial.println(atc.parse(temp_s).c_str()); temp_s = ""; } else { temp_s += temp_c; } delay(2); }}// the setup function runs once when you press reset or power the boardvoid setup() { //打开串口 Serial.begin(115200); Serial.println("\nStart"); // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT); //初始化AT指令集 initATCommands();}// the loop function runs over and over again forevervoid loop() { //接收串口数据 receiveDataFromSerial(); delay(100);}
创建命令项
使用CommandItem 创建命令项,在构造函数中为其设定关键字和回调函数:
CommandItem 命令项变量名称("命令关键字", [](CommandParameter param)->String{ //需要执行的执行代码 //…… return "返回结果(字符串)"; });
解析AT指令
使用ATCommand的parse()方法解析字符串类型的AT指令并获得字符串类型的返回值:
String result = ATCommand对象.parse("AT指令");
返回结果
输入:AT+LED=1
输出:+LED:OK
输入:AT+LED=0
输出:+LED:OK
输入:AT+TEST
输出:
parameter count : 0
+TEST:OK
输入:AT+TEST=1,2,3
输出:
parameter count : 3
arg0=1
arg1=2
arg2=3
+TEST:OK
- ESP8266 AT指令集开发实例(WeMos D1开发板)
- 利用docker部署esp8266、nodemcu、wemos d1的开发环境
- esp8266开发板WeMos的arduino开发环境搭建
- ESP8266使用AT指令开发示例
- Arduino--基础(四)--weMos D1 ESP8266模块的使用
- AT指令短信开发集
- ESP8266 AT指令
- AT指令开发经验
- ESP8266玩转AT指令
- ESP8266 物联网开发 -- 4,AT命令进行项目开发
- WeMos D1 R2使用笔记
- WeMos D1 GPIO引脚定义
- WeMos D1 GPIO引脚定义
- ESP8266开发
- esp8266开发
- 基于AT指令开发短信程序
- 基于AT指令开发短信程序
- C# 利用AT指令开发短信功能
- AI的伦理与道德
- 实现上移下移 置顶置底效果
- 浅谈数组
- 下载网页视频而不需要通过迅雷等软件 (基于python3 方法简单迅速)
- 自定义控件三部曲之绘图篇(七)——Paint之函数大汇总
- ESP8266 AT指令集开发实例(WeMos D1开发板)
- Nutz 设计模式应用 --- 工厂方法
- 面试感悟----一名3年工作经验的程序员应该具备的技能
- POJ 刷题系列:1503 Integer Inquiry
- 测试
- Flatten Binary Tree to Linked List:二叉树变更结构
- 图像增强—空域滤波,椒盐噪声/高斯噪声 均值滤波器/中值滤波器
- SGD BGD MBGD各种梯度下降的处理方式
- C#:C高精度算法移植