#pragma pack(1)
typedef struct receive_config_t
{
uint8_t device_old_head; // 数据帧头:0XA0+功能码(FUNCTION_ID4),A款产品智能插座
uint16_t device_len; // 数据包总长度
uint16_t device_old_id; // 节点ID 0X0001~0XFFFE
uint8_t device_config_type; // 0:默认配置,配置信息为后面的参数,1:恢复出厂设置,后面的参数均无效,可以为空
uint8_t device_new_head; // 需要更新的数据帧头
uint16_t device_new_id; // 需要更新的节点ID 0X0001~0XFFFE
char software_version[15]; // 软件版本 SMART_SW_A1_1.0 A款产品软件1.0版本
char hardware_version[15]; // 硬件版本 SMART_HW_A1_1.0 A款产品硬件1.0版本
char release_time[10]; // 出厂时间 2023-01-01
uint16_t upload_cycle; // 节点数据上传服务器周期时间,单位秒
uint16_t sample_cycle; // 节点采样周期时间(电参采样),单位毫秒
char wifi_ssid[64]; // WiFi SSID
char wifi_password[64]; // WiFi密码
char server_ip[64]; // 服务器IP/网址
uint16_t server_port; // 服务器端口
uint16_t crc; // 校验位
}ReceiveConfig_t;
#pragma pack()
节点接收到配置指令,处理完成后,回复ACK响应,协议如下所示:
![](https://img-blog.csdnimg.cn/0fe1ce13c2d5414db84804af913da4c9.png)
下位机软件定义数据结构如下所示:
// WiFi发送数据帧,节点响应状态
#pragma pack(1)
typedef struct send_state_t
{
uint8_t device_head; // 数据帧头:0XA0+功能码(FUNCTION_ID2),A款产品智能插座
uint16_t device_len; // 数据包总长度
uint16_t device_id; // 节点ID 0X0001~0XFFFE
char software_version[15]; // 软件版本 SMART_SW_A1_1.0 A款产品软件1.0版本
char hardware_version[15]; // 硬件版本 SMART_HW_A1_1.0 A款产品硬件1.0版本
uint8_t state_id; // 功能码+响应码(0:响应成功,1:响应失败)
uint16_t crc; // 校验位
}SendState_t;
#pragma pack()
## 2、控制节点继电器开关协议
上位机下发指令控制节点继电器开关,上位机界面如下所示:
![](https://img-blog.csdnimg.cn/8dd64f2bdf4143db8ee6ca1c7d4375cf.png)
只有节点处于运行模式下发控制节点继电器开关指令才有效,协议如下所示:
![](https://img-blog.csdnimg.cn/f44caba61e8640339465e1