ESP8266 WiFi物联网智能插座—上位机和下位机通信协议

目录

1、配置节点协议

2、控制节点继电器开关协议

3、节点周期上报数据协议

4、升级节点协议

5、重启节点


本项目自定义了一套上位机和下位机通信协议,协议并不复杂,包含:配置节点、控制节点继电器开关、节点周期上报数据、升级节点和重启节点功能。

在讲解通信协议前,需要先了解下位机的4种运行模式,在不同的运行模式下,上位机可以对下位机有不同的功能权限,如下图所示:

  • 只有在运行模式下,上位机才可以切换到其他几种模式,其他模式无法执行切换模式操作。
  • 只有在运行模式下,上位机才可以控制继电器开关,其他模式无法控制继电器。

1、配置节点协议

配置节点是配置节点的ID、硬件版本、软件版本、出厂时间等信息,只有节点处于运行模式下发配置节点指令才有效。上位机界面如下所示:

配置节点前需要先下发指令将节点从运行模式到配置模式,默认上电后,节点处于运行模式,协议如下所示:

下位机软件定义数据结构如下所示:

```cpp // WiFi接收数据帧,控制切换模式

pragma pack(1)

typedef struct receivedatamodet { uint8t devicehead; // 数据帧头:0XA0+功能码(FUNCTIONID3),A款产品智能插座 uint16t devicelen; // 数据包总长度 uint16t deviceid; // 节点ID 0X0001~0XFFFE char softwareversion[15]; // 软件版本 SMARTSWA11.0 A款产品软件1.0版本 char hardwareversion[15]; // 硬件版本 SMARTHWA11.0 A款产品硬件1.0版本 uint8t switchmode; // 切换模式 0:运行模式,1:配置模式,2:节点升级,3:节点重启 uint16t crc; // 校验位 }ReceiveDataMode_t;

pragma pack()

```

节点接收到切换模式指令,处理完成后,回复ACK响应,协议如下所示:

下位机软件定义数据结构如下所示:

```cpp // WiFi发送数据帧,节点响应状态

pragma pack(1)

typedef struct sendstatet { uint8t devicehead; // 数据帧头:0XA0+功能码(FUNCTIONID2),A款产品智能插座 uint16t devicelen; // 数据包总长度 uint16t deviceid; // 节点ID 0X0001~0XFFFE char softwareversion[15]; // 软件版本 SMARTSWA11.0 A款产品软件1.0版本 char hardwareversion[15]; // 硬件版本 SMARTHWA11.0 A款产品硬件1.0版本 uint8t stateid; // 功能码+响应码(0:响应成功,1:响应失败) uint16t crc; // 校验位 }SendState_t;

pragma pack()

```

此时,节点处于配置模式下,可以接收上位机下发的配置指令,协议如下所示:

下位机软件定义数据结构如下所示:

```cpp // WiFi接收数据帧,更新节点配置参数

pragma pack(1)

typedef struct receiveconfigt
{ uint8t deviceoldhead; // 数据帧头:0XA0+功能码(FUNCTIONID4),A款产品智能插座 uint16t devicelen; // 数据包总长度 uint16t deviceoldid; // 节点ID 0X0001~0XFFFE uint8t deviceconfigtype; // 0:默认配置,配置信息为后面的参数,1:恢复出厂设置,后面的参数均无效,可以为空 uint8t devicenewhead; // 需要更新的数据帧头 uint16t devicenewid; // 需要更新的节点ID 0X0001~0XFFFE char softwareversion[15]; // 软件版本 SMARTSWA11.0 A款产品软件1.0版本 char hardwareversion[15]; // 硬件版本 SMARTHWA11.0 A款产品硬件1.0版本 char releasetime[10]; // 出厂时间 2023-01-01 uint16t uploadcycle; // 节点数据上传服务器周期时间,单位秒 uint16t samplecycle; // 节点采样周期时间(电参采样),单位毫秒 char wifissid[64]; // WiFi SSID char wifipassword[64]; // WiFi密码 char serverip[64]; // 服务器IP/网址 uint16t serverport; // 服务器端口 uint16t crc; // 校验位 }ReceiveConfigt;

pragma pack()

```

节点接收到配置指令,处理完成后,回复ACK响应,协议如下所示:

下位机软件定义数据结构如下所示:

```cpp // WiFi发送数据帧,节点响应状态

pragma pack(1)

typedef struct sendstatet { uint8t devicehead; // 数据帧头:0XA0+功能码(FUNCTIONID2),A款产品智能插座 uint16t devicelen; // 数据包总长度 uint16t deviceid; // 节点ID 0X0001~0XFFFE char softwareversion[15]; // 软件版本 SMARTSWA11.0 A款产品软件1.0版本 char hardwareversion[15]; // 硬件版本 SMARTHWA11.0 A款产品硬件1.0版本 uint8t stateid; // 功能码+响应码(0:响应成功,1:响应失败) uint16t crc; // 校验位 }SendState_t;

pragma pack()

```

2、控制节点继电器开关协议

上位机下发指令控制节点继电器开关,上位机界面如下所示:

只有节点处于运行模式下发控制节点继电器开关指令才有效,协议如下所示:

下位机软件定义数据结构如下所示:

```cpp // WiFi接收数据帧,控制继电器

pragma pack(1)

typedef struct receivedatacontrolt { uint8t devicehead; // 数据帧头:0XA0+功能码(FUNCTIONID5),A款产品智能插座 uint16t devicelen; // 数据包总长度 uint16t deviceid; // 节点ID 0X0001~0XFFFE char softwareversion[15]; // 软件版本 SMARTSWA11.0 A款产品软件1.0版本 char hardwareversion[15]; // 硬件版本 SMARTHWA11.0 A款产品硬件1.0版本 uint8t relaystate; // 继电器开/关状态 0:继电器关闭,1:继电器开启 uint16t crc; // 校验位 }ReceiveDataControl_t;

pragma pack()

```

节点接收到控制继电器指令,处理完成后,回复ACK响应,协议如下所示:

下位机软件定义数据结构如下所示:

```cpp // WiFi发送数据帧,节点响应状态

pragma pack(1)

typedef struct sendstatet { uint8t devicehead; // 数据帧头:0XA0+功能码(FUNCTIONID2),A款产品智能插座 uint16t devicelen; // 数据包总长度 uint16t deviceid; // 节点ID 0X0001~0XFFFE char softwareversion[15]; // 软件版本 SMARTSWA11.0 A款产品软件1.0版本 char hardwareversion[15]; // 硬件版本 SMARTHWA11.0 A款产品硬件1.0版本 uint8t stateid; // 功能码+响应码(0:响应成功,1:响应失败) uint16t crc; // 校验位 }SendState_t;

pragma pack()

```

3、节点周期上报数据协议

节点处于运行模式会周期上报数据,上位机界面如下所示:

协议如下所示:

下位机软件定义数据结构如下所示:

```cpp // WiFi发送数据帧,节点数据

pragma pack(1)

typedef struct senddatat { uint8t devicehead; // 数据帧头:0XA0+功能码(FUNCTIONID1),A款产品智能插座 uint16t devicelen; // 数据包总长度 uint16t deviceid; // 节点ID 0X0001~0XFFFE char softwareversion[15]; // 软件版本 SMARTSWA11.0 A款产品软件1.0版本 char hardwareversion[15]; // 硬件版本 SMARTHWA11.0 A款产品硬件1.0版本 char releasetime[10]; // 出厂时间 2023-01-01 char runtime[12]; // 负载有效运行时间 时-分-秒:123456-01-01 uint16t uploadcycle; // 节点数据上传服务器周期时间,单位秒 uint16t samplecycle; // 节点采样周期时间(电参采样),单位毫秒 uint8t relaystate; // 继电器开/关状态 0:继电器关闭,1:继电器开启 float voltage; // 电压 float current; // 电流 float power; // 功率 float electricity; // 电量 uint16t crc; // 校验位 }SendData_t;

pragma pack()

```

上位机接收到周期上报数据协议不做响应。

4、升级节点协议

配置节点前需要先下发指令将节点从运行模式到升级模式,上位机界面如下所示:

默认上电后,节点处于运行模式,协议如下所示:

 下位机软件定义数据结构如下所示:

```cpp // WiFi接收数据帧,控制切换模式

pragma pack(1)

typedef struct receivedatamodet { uint8t devicehead; // 数据帧头:0XA0+功能码(FUNCTIONID3),A款产品智能插座 uint16t devicelen; // 数据包总长度 uint16t deviceid; // 节点ID 0X0001~0XFFFE char softwareversion[15]; // 软件版本 SMARTSWA11.0 A款产品软件1.0版本 char hardwareversion[15]; // 硬件版本 SMARTHWA11.0 A款产品硬件1.0版本 uint8t switchmode; // 切换模式 0:运行模式,1:配置模式,2:节点升级,3:节点重启 uint16t crc; // 校验位 }ReceiveDataMode_t;

pragma pack()

```

节点接收到切换模式指令,回复ACK响应,协议如下所示:

下位机软件定义数据结构如下所示:

```cpp // WiFi发送数据帧,节点响应状态

pragma pack(1)

typedef struct sendstatet { uint8t devicehead; // 数据帧头:0XA0+功能码(FUNCTIONID2),A款产品智能插座 uint16t devicelen; // 数据包总长度 uint16t deviceid; // 节点ID 0X0001~0XFFFE char softwareversion[15]; // 软件版本 SMARTSWA11.0 A款产品软件1.0版本 char hardwareversion[15]; // 硬件版本 SMARTHWA11.0 A款产品硬件1.0版本 uint8t stateid; // 功能码+响应码(0:响应成功,1:响应失败) uint16t crc; // 校验位 }SendState_t;

pragma pack()

```

此时,节点处于升级模式下,会上传此时的升级IP和端口,然后跳转升级功能,,协议如下所示:

下位机软件定义数据结构如下所示:

```cpp // WiFi发送升级IP和端口

pragma pack(1)

typedef struct sendupdatastatet { uint8t devicehead; // 数据帧头:0XA0+功能码(FUNCTIONID6),A款产品智能插座 uint16t devicelen; // 数据包总长度 uint16t deviceid; // 节点ID 0X0001~0XFFFE char softwareversion[15]; // 软件版本 SMARTSWA11.0 A款产品软件1.0版本 char hardwareversion[15]; // 硬件版本 SMARTHWA11.0 A款产品硬件1.0版本 char updataip[64]; // 升级IP/网址 uint16t updataport; // 升级端口 uint16t crc; // 校验位 }SendUpdata_t;

pragma pack()

```

5、重启节点

重启节点前需要先下发指令将节点从运行模式到重启模式,上位机界面如下所示:

默认上电后,节点处于运行模式,协议如下所示:

 下位机软件定义数据结构如下所示:

```cpp // WiFi接收数据帧,控制切换模式

pragma pack(1)

typedef struct receivedatamodet { uint8t devicehead; // 数据帧头:0XA0+功能码(FUNCTIONID3),A款产品智能插座 uint16t devicelen; // 数据包总长度 uint16t deviceid; // 节点ID 0X0001~0XFFFE char softwareversion[15]; // 软件版本 SMARTSWA11.0 A款产品软件1.0版本 char hardwareversion[15]; // 硬件版本 SMARTHWA11.0 A款产品硬件1.0版本 uint8t switchmode; // 切换模式 0:运行模式,1:配置模式,2:节点升级,3:节点重启 uint16t crc; // 校验位 }ReceiveDataMode_t;

pragma pack()

```

节点接收到切换模式指令,先回复ACK响应,然后就会重启,协议如下所示:

下位机软件定义数据结构如下所示:

```cpp // WiFi发送数据帧,节点响应状态

pragma pack(1)

typedef struct sendstatet { uint8t devicehead; // 数据帧头:0XA0+功能码(FUNCTIONID2),A款产品智能插座 uint16t devicelen; // 数据包总长度 uint16t deviceid; // 节点ID 0X0001~0XFFFE char softwareversion[15]; // 软件版本 SMARTSWA11.0 A款产品软件1.0版本 char hardwareversion[15]; // 硬件版本 SMARTHWA11.0 A款产品硬件1.0版本 uint8t stateid; // 功能码+响应码(0:响应成功,1:响应失败) uint16t crc; // 校验位 }SendState_t;

pragma pack()

```

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44079197

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值