# GSM Module **Repository Path**: wyj98/GSM-Module ## Basic Information - **Project Name**: GSM Module - **Description**: 服务器运行在FL2440开发板,客户端通过wifi或者网线(如果服务器没网的情况下)socket连接到服务器,服务器运行在安有gprs模块的fl2440开发板,客户端可以请求服务器发短信或者是PPP拨号上网 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2019-07-16 - **Last Updated**: 2021-07-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GSM Module #### 介绍 嵌入式设备:FL2440开发板 嵌入式linux系统:linux 3.0 3G模块:Sim5360E 服务器运行在FL2440开发板,客户端通过wifi或者网线(如果服务器没网的情况下)socket连接到服务器,服务器运行在安有gprs模块的fl2440开发板,客户端可以请求服务器发短信或者是PPP拨号上网,其中通信协议使用 基于字节流的TLV(Tag-Length-Value)格式。 具体通信协议数据格式定义如下: | 报文头 | Tag | Length | Value | CRC16校验和 | | ------------ | ------ | --------------------- | ------- | ----------- | | 1 Byte(0xFD) | 1 Byte | 1 Bytes(Length=n+5) | n Bytes | 2 Bytes | 报文头: 占1个字节,固定为0xFD。用来标志一个报文的开始; Tag: 占1个字节,标准该报文的类型,如登录、控制灯、控制摄像头等报文; Value: 占n字节,报文中payload数据; Length: 数据长度n+5,从报文头开始到CRC16校验和结尾的整个报文长度; CRC16:占2个字节,从报文头开始到数据结尾(Value)所有数据的CRC校验和; 在做控制时,可能存在的报文类型定义如下: | Tag定义 | 说明 | 数据域说明 | 方向 | | ------- | -------- | -------------------------------- | ----------------- | | 0x01 | 登录命令 | 发送的验证密码,默认设为iot@yun | 客户端——>服务器 | | 0x02 | 拨号上网 | 0x00:断开连接 0x01: 拨号上网 | 客户端——>服务器 | | 0x03 | 发送短信 | 手机号码 短信内容 | 客户端——>服务器 | | 0x04 | 发送信号 | Sim当前信号 | 服务器——>客户端 | | ...... | 待定 | TBD | 待定 | 1,登录报文 为防止陌生人连接服务器程序都可以控制实验室的硬件,定义该报文做身份合法性认证。手机APP Socket连上服务器程序后,首先应该发送该报文验证身份,否则Socket服务器端在3s之内没有接受到该内容将会关闭该socket连接。 该报文的内容为: 0xFD 0x01 0x0C 0x69 0x6F 0x74 0x40 0x79 0x75 0x6E 【CRC1 CRC2】 0xFD 报文头 0x01 Tag值为0x01,说明是登录报文 0x0C 数据长度为12字节,从0xFD到CRC2的长度; 0x69 0x6F 0x74 0x40 0x79 0x75 0x6E 密码 iot@yun 的十六进制ASCII值 CRC1 CRC2 两个字节的CRC16值,从0xFD到0x6E的校验和; 2,拨号上网报文 拨号上网报文: 0xFD 0x02 0x06 0x01 【CRC1 CRC2】 断开连接报文: 0xFD 0x02 0x06 0x00 【CRC1 CRC2】 3,发短信报文 发送短信请求报文: 0xFD 0x03 0x1A 0x1B 0x38 0x36 0x31 0x38 0x39 0x33 0x34 0x39 0x33 0x35 0x35 0x35 0x31 0x1B 0x48 0x45 0x4C 0x4C 0x4F 0x1C 【CRC1 CRC2】 0xFD 报文头 0x03 发短信类型 0x1A 报文总的长度2(帧头和类型)+1(长度位)+1(0x1B)+电话号码长度+1(0x1B)+短信长度strlen(sms_message)+1(0x1C)+2(校验和),2+1+1+13+1+5+1+2 = 26 0x1B 标志手机号码开始,后面跟着手机号码,可用区号加手机号码,也可以直接是手机号码 0x38 0x36 86中国的区号 0x31 0x38 0x39 0x33 0x34 0x39 0x33 0x35 0x35 0x35 0x31 手机号码,一个字节代表一位手机号,数字0的ASCII码为0x30,这里的号码是18934935551 0x1B 第二个0x1B标志手机号码结束以及短信内容的开始,后面跟着短信内容,到0x1C ASCII码值处结束 0x48 0x45 0x4C 0x4C 0x4F 短信内容,此处为HELLO 0x1C 标志短信内容结束,短信内容结束标志 【CRC1 CRC2】 两个字节的CRC16值; #### 安装教程 1. make 根据不同的设备需要修改不同的交叉编译器去编译 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0717/173759_5ce31aa4_2171782.png "屏幕截图.png") make编译安装 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0717/173827_846237cb_2171782.png "屏幕截图.png") #### 使用说明 交叉编译后传到板子上运行,开发板与PC电脑连接,使用TCP_Test_Tool连接测试 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0718/105409_015e3aff_2171782.png "屏幕截图.png") 需要指定端口,加参数-d可放至后台运行 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0718/105655_6dc52acc_2171782.png "屏幕截图.png") 一开始会检查SIM卡注册情况,如果没注册上就休眠一段时间再次查询。 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0718/110056_61e3fc63_2171782.png "屏幕截图.png") TLV报文封装后的结果: ![输入图片说明](https://images.gitee.com/uploads/images/2019/0718/110315_5816743c_2171782.png "屏幕截图.png") 接着就用TCP_Test_Tool连接服务器,发送TLV报文 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0718/110659_4731acdf_2171782.png "屏幕截图.png") 发送PPP拨号报文以及发短信报文 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0718/110947_2ffc2463_2171782.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2019/0718/111228_6f06da73_2171782.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2019/0718/111321_66ad4b9f_2171782.png "屏幕截图.png") 隔一段时间会Ping测试一下网络是否还连通着 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0718/111545_4ef90217_2171782.png "屏幕截图.png") 加入半帧的情况 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0718/111723_9d025fce_2171782.png "屏幕截图.png") 服务器端的情况 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0718/111926_22ab460d_2171782.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2019/0718/112026_134a35d9_2171782.png "屏幕截图.png") 发送剩余半帧的PPP断开的TLV报文 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0718/112054_dd875962_2171782.png "屏幕截图.png") 断开连接 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0718/112158_6bdf4998_2171782.png "屏幕截图.png") 收到的短信 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0718/112520_69cd1ecf_2171782.png "屏幕截图.png") #### 关闭 killall -10 module_test 发送SIGUSR1信号关闭程序 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0718/112614_da9977c3_2171782.png "屏幕截图.png")