无线网卡模块
WIFI物联网模块UART通信协议
一、 WIFI远程控制模块的功能
通过wifi的远程控制模块,我们将所有远程控制的功能,进行全部封装,其中包括WIFI连接、云服务器平台连接,控制终端软件的定制开发,用户认证检查,网络数据传输稳定性涉及等等;而用户相关的数据,只需通过UART接口,进行传递获取。
Pad控制终端Android
云服务器1云服务器2云服务器n
太阳能热水器太阳能热水器太阳能热水器太阳能热水器太阳能热水器
下面进行将分别对功能部分进行简单描述
1、WIFI连接
该模块采用wifi连接方式,wifi的SSID以及PSK配置通过我们的开发的android ios软件
进行配置,模块获取到配置信息之后,自动与wifi AP建立连接,当AP异常,重启等时,
模块可以显示自动重连等功能,保证数据连接的稳定。
1、 与云服务器连接
WIFI连接成功之后,自动选择连接到云服务器平台,等待用户控制和相关的功能
2、 控制终端软件(iphone android)配置部分
配置部分,包括了模块的WIFI SSID PSK的配置,本地局域网设备的自动搜索,添加到
用户的管理列
。
3、 控制终端控制功能
控制终端能通过本地局域网控制和远程控制,并根据实际的用户网络实现自动切换。
控制过程中,局域网优先原则,如果控制终端和设备在同一个网段,通过本地局域网
控制。
4、 设备的登录认证
在设计过程中,设备的安全认证,与用户使用的WIFI网络安全相结合的方式,用户通
过自身的WIFI局域网的认证之后,可以自动搜索和控制本局域网的设备。
认证的加密是通过WIFI的SSID和PSK以及随机32位数值,自动生成。
通信协议流程:
控制终端(iphone 云服务器平台/本地局UARTWIFI远程控制模块热水器设备android)域网
控制终端,发送命令通过本地局域网或者云服务器平台,将请求命令转给控制模块,而模块通过UART接口从太阳能热水器设备中获取相应的结果,然后返回给控制终端。
二、 模块的硬件接口规范
如图上所示为模块的尺寸安装图,做为测试,可以首先只需要连接VCC GND TXD RXD引脚。
接口说明:
V3.3 设备为模块供电接口,电压为3.3V
GND 地线
RESET_KEY 对模块复位的外部引脚,通过持续10s的高电平,可以将模块的配置全部复位,推荐的电路连接如下,通过按键与VCC相连,这样用户长按键10s可以将模块的所有配置复位。
R 模块的读信号,UART数据从设备到模块(如果5V的话,推荐电阻分压或者串联电阻10K电阻的方式)
T 模块的写信号,UART 数据从模块到设备
L 为指示灯,可以直接通过一个电阻与LED灯相连,指示模块的工作状态。
LED快速闪烁,表示处于WIFI配置状态,LED慢速闪烁,处于连接WIFI状态,LED灯常亮,表示已经正常连接
另外没有标识的管脚,用来固定,必须悬空。
硬件功耗指标:
待机功耗:11.4mA
WIFI发送功耗: IEEE802.11b 266mA IEEE802.11g 198mA 接收功耗: 106mA
如果是5V转3V,推荐使用LDO ASM1117
三、WIFI物联网模块和设备状态 模块状态用来表示模块的网络连接状态,状态枚举类型如下(默认可以定义为MODULE_CONNECTING):
enum module_status_e
{
MODULE_CONFIG, //模块处于配置状态,提示用户使用APP配置连接网络
MODULE_CONNECTING, //模块正在连接配置的WIFI网络
MODULE_WIFI_LINK, //模块已经正常连接到WIFI 路由器,
//但是未与云服务器建立连接,只能本地控制,无法远程控制
MODULE_CLOUD_LINK, //正常连接到云服务器,可以本地和远程控制
};
同时考虑设备的UART,可能由于某种原因处于busy状态,因此模块没法正常与设备通信,因此定义设备的状态。
注意:模块默认情况下认为设备处于READY状态,设备可以通过UART接口来修改其所处的状态。该产品,不需要处理这个功能。
enum device_status_e
{
DEVICE_READY, //设备ready接受模块的命令
DEVICE_BUSY, //设备busy,无法接收模块的命令,请等待设备ready,
//注意设备不能长时间处于busy状态,这样可能导致远程控制由于等待超时,而配置失败
};
同时添加设备对模块的复位操作,该复位操作会将模块的所有配置信息,包括WIFI网络配置信息复位,使用户重新配置网络接口。
同时模块提供时间查询和6
节的存储空间,可以用于设备的查询和一些数据的读写。
四、UART接口规范
模块与主设备的连接通过TTL电平的UART传输方式,连接信号: GND TXD RXD VCC(3.3).
串口通信波特率配置:9600,校验位 NONE 数据位 8 停止位 1。 模块发送命令之后,应该在200ms得到response,否则上层会判为超时。
下面将UART之间通信的规范:
下面定义通信的协议:
1、 协议头
typedef struct stream_head_t
{
UINT32 magic_code; //Start data for frame. Let’s define as 0x5a5aa5a5;
UINT16 checksum; // checksum等于头和数值的累加
//To check whether data stream is right. It’s the checksum for both head and data
UINT16 type; //Define command type.
UINT32 len; //Define data stream len.
} stream_head_t
2、 具体的协议内容
/*定义远程控制命令*/
enum remote_command_e
{ /*用户定义命令接口*/
GET_STATUS, /*获取状态请求*/
GET_STATUS_RES,
/*返回设备的配置和状态信息*/
SET_CONFIG, /*设置设备的配置*/
SET_CONFIG_RES,
/*返回设备的配置和状态信息*/
/*其他用户命令*/
/*下面的命令定义模块
的通用接口,处理模块与设备之间的状态*/
MODULE_RESET = 1000, //1000以下保留给USER Define的命令
/*将模块配置复位, DEVICE -> MODULE, 无数据部分*/
MODULE_RES,
/*模块确认收到命令, MODULE -> DEVICE,无数据部分*/
DEVICE_READY,
/*配置设备处于ready状态,可以接收module命令,DEVICE->MODULE,
模块会MODULE_RES确认收到命令*/
DEVICE_BUSY,
/*配置设备处于busy状态,不能接收module命令,DEVICE->MODULE,
模块会MODULE_RES确认收到命令*/
MODULE_STATUS,
/*发送模块的状态给DEVICE, MODULE -> DEVICE, 发送的参数为enum的设备状态值,长度为32bits,(4个字节)*/
};
3. checksum的计算
/*Get the data checksum*/
首先设置checksum的值为0,然后将uart 头和data内容,相加得到的值
UINT16 uartcsum(uart_head_t *uart_head, UINT8 *data, int len) {
UINT16 csum_cal = 0xbeaf;
int i;
UINT8 *tmp = (UINT8 *)uart_head;
uart_head->checksum = 0;
for(i = 0; i < sizeof(uart_head_t); i++)
{
csum_cal += tmp[i];
}
for(i = 0; i < len; i++)
{
csum_cal += data[i];
}
return csum_cal;
}
五、 通用的系统命令详解 1、 模块的复位
模块的网络配置复位,通过UART,或者硬件引脚实现。
设备->模块
A5 A5 5A 5A 98 C1 E8 03 00 00 00 00 /*MODULE_RESET*/ 主控设备发送复位命令给模块
模块接收到复位命令之后,返回:
A5 A5 5A 5A 99 C1 E9 03 00 00 00 00 MODULE_RES 模块响应主控设备发送的命令
2、 模块的状态 MODULE_STATUS
模块状态命令,模块,主设备
A5 A5 5A 5A A0 C1 EC 03 04 00 00 00 00 00 00 00 //设备进入配置状态 A5 A5 5A 5A A1 C1 EC 03 04 00 00 00 01 00 00 00 //设备进入连接AP状态
A5 A5 5A 5A A2 C1 EC 03 04 00 00 00 02 00 00 00 //已经连接到AP,可以本地控制
A5 A5 5A 5A A3 C1 EC 03 04 00 00 00 03 00 00 00 //已经正常连接到云服务,可以远程控制
3、 DEVICE状态更新
DEVICE可能处于BUSY状态无法接收数据,通过发送命令更新。
Module会保持DEVICE的状态,默认为READY。
DEVICE发送给MODULE之后,MODULE会返回确认命令MODULE_RES。
A5 A5 5A 5A 9A C1 EA 03 00 00 00 00 DEVICE_READY 主控设备ready
A5 A5 5A 5A 9B C1 EB 03 00 00 00 00 DEVICE_BUSY 主控设备忙
模块返回:
A5 A5 5A 5A 99 C1 E9 03 00 00 00 00 MODULE_RES 模块响应主控设备发送的命令
六、 用户定义命令