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

#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/f44caba61e8640339465e14e1a341958.png)


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



// WiFi接收数据帧,控制继电器
#pragma pack(1)
typedef struct receive_data_control_t
{
uint8_t device_head; // 数据帧头:0XA0+功能码(FUNCTION_ID5),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 relay_state; // 继电器开/关状态 0:继电器关闭,1:继电器开启
uint16_t crc; // 校验位
}ReceiveData_Control_t;
#pragma pack()


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


![](https://img-blog.csdnimg.cn/9f59d05adb804c93aa117c1d69efedce.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()


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


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


![](https://img-blog.csdnimg.cn/e3bdd4fd7adb4fd1a70547548c25b86d.png)


协议如下所示:


![](https://img-blog.csdnimg.cn/13768033ddef4e11a184f42fa2c26b1a.png)


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



// WiFi发送数据帧,节点数据
#pragma pack(1)
typedef struct send_data_t
{
uint8_t device_head; // 数据帧头:0XA0+功能码(FUNCTION_ID1),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版本
char release_time[10]; // 出厂时间 2023-01-01
char run_time[12]; // 负载有效运行时间 时-分-秒:123456-01-01
uint16_t upload_cycle; // 节点数据上传服务器周期时间,单位秒
uint16_t sample_cycle; // 节点采样周期时间(电参采样),单位毫秒
uint8_t relay_state; // 继电器开/关状态 0:继电器关闭,1:继电器开启
float voltage; // 电压
float current; // 电流
float power; // 功率
float electricity; // 电量
uint16_t crc; // 校验位
}SendData_t;
#pragma pack()


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


## 4、升级节点协议


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


![](https://img-blog.csdnimg.cn/35dac0c49e6d45a885546b852fa0d495.png)


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


![](https://img-blog.csdnimg.cn/3e5bbb06eb9a47a2ad630d9cbebc529a.png)


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



// WiFi接收数据帧,控制切换模式
#pragma pack(1)
typedef struct receive_data_mode_t
{
uint8_t device_head; // 数据帧头:0XA0+功能码(FUNCTION_ID3),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 switch_mode; // 切换模式 0:运行模式,1:配置模式,2:节点升级,3:节点重启
uint16_t crc; // 校验位
}ReceiveData_Mode_t;
#pragma pack()


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


![](https://img-blog.csdnimg.cn/460fbc04e0a2479585f03f6961ed31ce.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()


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


![](https://img-blog.csdnimg.cn/f934f046427d447baf754d41da9ceb1e.png)


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



// WiFi发送升级IP和端口
#pragma pack(1)
typedef struct send_updata_state_t
{
uint8_t device_head; // 数据帧头:0XA0+功能码(FUNCTION_ID6),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版本
char updata_ip[64]; // 升级IP/网址
uint16_t updata_port; // 升级端口
uint16_t crc; // 校验位
}SendUpdata_t;
#pragma pack()


## 5、重启节点


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


![](https://img-blog.csdnimg.cn/60762674791a4d1bb1a79523432d874b.png)


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


![](https://img-blog.csdnimg.cn/3e5bbb06eb9a47a2ad630d9cbebc529a.png)


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



// WiFi接收数据帧,控制切换模式
#pragma pack(1)
typedef struct receive_data_mode_t
{
uint8_t device_head; // 数据帧头:0XA0+功能码(FUNCTION_ID3),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 switch_mode; // 切换模式 0:运行模式,1:配置模式,2:节点升级,3:节点重启
uint16_t crc; // 校验位
}ReceiveData_Mode_t;

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

15557164692)]

[外链图片转存中…(img-G5BKGyVh-1715557164693)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值