“12.2:初步实现esp8266处理响应数据,暂不完善。”
This commit is contained in:
39
README.md
39
README.md
@@ -21,21 +21,21 @@
|
||||
创建了LED状态灯、Wi-Fi初始化、向子节点传输数据、从子节点接收数据、MQTT上发、MQTT下发6个任务。<br>
|
||||
|
||||
### 二、自定义传输协议:
|
||||
自定义传输协议仿照了ModBus传输协议,其完善性相比有欠缺,但是可满足非大型项目的基本使用。在自定义传输协议中,使用十六进制数字进行传输,分别由网关节点和子节点。
|
||||
自定义传输协议仿照了ModBus传输协议,其完善性相比有欠缺,但是可满足非大型项目的基本使用。在自定义传输协议中,使用十六进制数字进行传输,分别由网关节点和子节点。<br>
|
||||
**1、节点:**<br>
|
||||
*规则:*
|
||||
**规则:**
|
||||
子节点的传输协议主要分为帧头、传感器ID、传感器数据、执行器ID、执行器指令和帧尾。其中,帧头(也是节点ID),用于声明自己是哪个节点上发的数据;传感器ID,用于声明自己是什么传感器;传感器数据,如DHT11温湿度数据;执行器ID也是同理,用于声明自己是什么执行器;执行器指令,一般是0或1,0为关、1为开,用于在执行网关节点下发的控制指令后的返回结果,告诉网关节点是开了还是关了,是否成功,若失败了是什么原因;最后一个是帧尾,为帧头倒写,添加帧头和帧尾的目的是在网关接收多个节点的数据是验证其数据是否完整,不会被其他上传的数据打断。<br>
|
||||
*节点ID:*
|
||||
**节点ID:**
|
||||
D1为子节点1,D2为子节点2,以此类推。<br>
|
||||
*传感器ID:*
|
||||
**传感器ID:**
|
||||
EA为DHT11温湿度传感器,EB为MQ2烟雾浓度传感器、EC为火焰传感器、ED为光敏传感器。<br>
|
||||
*传感器数据:*
|
||||
**传感器数据:**
|
||||
如17、35:17为温度数据、35为湿度数据,将其转化为10进制,分别为23℃、湿度53%。<br>
|
||||
*执行器ID:*
|
||||
**执行器ID:**
|
||||
FA为LED灯、FB为小风扇、FC为加湿器、FD为蜂鸣器、FE为舵机、FF为加热片。<br>
|
||||
*执行器指令*
|
||||
**执行器指令**
|
||||
0为关、1为开。<br>
|
||||
*帧尾:*
|
||||
**帧尾:**
|
||||
D1倒过来就是1D,以此类推。<br>
|
||||
|
||||
| 目标地址 | 目标信道 | 帧头(也是节点ID) | 传感器ID | 传感器数据 | 执行器ID | 执行器指令 | 帧尾(为帧头倒写) |
|
||||
@@ -43,10 +43,9 @@ D1倒过来就是1D,以此类推。<br>
|
||||
| 03 E9 | 17 | D1 | EA | 17 35 | FA | 01 | 1D |
|
||||
|
||||
**2、网关:**
|
||||
*规则:*
|
||||
网关的传输协议主要分为帧头、执行器ID、执行器指令和帧尾。其中,帧头也是节点ID,用于声明控制的是哪个节点的设备;执行器ID,同理一般是0或1,用于声明控制的是哪个设备;执行器指令用于声明执行器是开还是关;最后一个是帧尾,为帧头倒写。
|
||||
*节点ID、执行器ID与上面相同。*
|
||||
*执行器指令:*
|
||||
**规则:**
|
||||
网关的传输协议主要分为帧头、执行器ID、执行器指令和帧尾。其中,帧头也是节点ID,用于声明控制的是哪个节点的设备;执行器ID,同理一般是0或1,用于声明控制的是哪个设备;执行器指令用于声明执行器是开还是关;最后一个是帧尾,为帧头倒写。*节点ID、执行器ID与上面相同。*<br>
|
||||
**执行器指令:**
|
||||
一共有两种,一种是常规的0和1,另外一种是温控模式,用于控制温度范围,若超过这个范围就会触发执行器的指令。温控模式默认常开,控制字为02,后面跟的是温控的数据,也就是限定的温湿度数值,如17 20 35 50,就是温度在23~26度之间,湿度在53%~80%之间。
|
||||
|
||||
*常规模式*
|
||||
@@ -73,12 +72,12 @@ void vTask(void *<参数>);
|
||||
```c
|
||||
TaskHandle_t xTaskHandler;
|
||||
xTaskCreate(
|
||||
(TaskFunction_t ) vTask,
|
||||
(char * ) "<定义一个任务名称>",
|
||||
(configSTACK_DEPTH_TYPE) 1024,
|
||||
(void * ) NULL, (若有参数则写参数名称)
|
||||
(UBaseType_t ) <优先级,数字越大优先级越高>
|
||||
(TaskHandle_t * ) &xTaskHandler);
|
||||
(TaskFunction_t ) vTask,
|
||||
(char * ) "<定义一个任务名称>",
|
||||
(configSTACK_DEPTH_TYPE) 1024,
|
||||
(void * ) NULL, (若有参数则写参数名称)
|
||||
(UBaseType_t ) <优先级,数字越大优先级越高>
|
||||
(TaskHandle_t * ) &xTaskHandler);
|
||||
```
|
||||
- 启动任务调度函数:
|
||||
```c
|
||||
@@ -95,8 +94,8 @@ QueueHandle_t xQueueHandler;
|
||||
- 创建队列:
|
||||
```c
|
||||
xQueueHandler = xQueueCreate(
|
||||
(UBaseType_t) <队列的长度,单位字节>,
|
||||
(UBaseType_t) <每个数据的大小>);
|
||||
(UBaseType_t) <队列的长度,单位字节>,
|
||||
(UBaseType_t) <每个数据的大小>);
|
||||
```
|
||||
- 发送队列,也就是将数据存入队列,等待接收,接收时长从0到portMAX_DELAY,如下所示。
|
||||
```c
|
||||
|
||||
Reference in New Issue
Block a user