我是靠谱客的博主 务实手套,最近开发中收集的这篇文章主要介绍移远EC20 4G模块LTE开发板三网通模块 MQTT阿里云物联网STM32代码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 

usb转tdl  

 ath 挂断

22点评,要接转送帽

AT+QGPSLOC? gps定位

AT+QGPS=1通过命令启动 启动好之后 505还没有启动 516 还没有定位好,

 新版本数据模块,带电瓶转换芯片 效果会更好一些,专用的di芯片,单独把他tdl 1.8v转换成3.3v或者5.5v 供外部单片机接线

硬件测试,需要把数据模块卡插好,

识别三个窜口, at口 拨号口  tps口?

at口

ati 打印版本信息

 所有的模块都要看两件事情,一个是卡状态,一个是信号质量满格是31,AT+CREG? 注册状态 注册到基站,注册到基站之后模块与附近的基站进行连接进行  

ATD88206255 拨号,ATH挂断

 

发短信测试????

发短信   1A 16进制发送

中文短信, 

长度为23字节的短信, 

 

手机号码,默认补一个F  两两颠倒的 如果你要发短信,就把这个改成自己的就可以了,

 不要发送新行 不要HEX发送,要求非常严格,多一个字节少一个字节 多一个字符少一个字符,都会错的发送过去 发1A不需要回车 打勾HEX发送,因为这个时候是16进制

 他是一个gbo的编码8个字节,8个16进制,表示4个汉字

2g 3g 4g 5g都是一样的 没什么差别 默认只支持英文,如果你想支持中文,需要521b表示‘ 创’字

2个16进制 2个字节来表示 一个汉字

收短信,  0没短信 1没短信,

配置一下,收到短信直接把短信输出, 

会直接把短信输出出来,我们这个 中文短信 gbo的编码

要切换到英文模式

再发一条, 

 也可以给这个模块拨打电话测试,

来电显示 配置 输出手机号码 

 删除短信,

 把数据发送服务器,还可以做定位????

 切换到29接收

 GPRMC 注释 讲解 也可以通过串口com30 来获取gps的信息

 gps定位29发送, 可以通过30口获取信息,也是串口获取的一个方式,时间 经度 维度信息 

通过耳机可以听得到,读取文字信息,只会朗读

 直接返回了错误,一会用电信卡来测试一下,因为他需要查询到他的基站库,

选lte

 gprs的收发,

 配置完之后就可以打电话了,

我们就可以识别到 能收到电话  按键1 -49 按键2 

 每一个编码他都有  输出的是10进制

gprs可以把数据进行透传模式,通过一条命令就可以了,因为他通过测试的时候,一定要注意卡的信号质量,一定是ok的,才可以做这个步骤,

 

 

他是阿里云,创建一个tcp server  可以发送命令建立一个连接,

 连接上之后就可以发送数据了,发1234  这样的话,这个板子就跟我们的服务器建立了一个叫tcp的一个连接 他用的是第一个通道 AT+QIOPEN=1 ,0

退出????

 

再发ATI就可以了, 

关闭tcp通道=0就关闭了, 如果你退出了以后,你还要建立连接,你好要给他发关闭  刚刚你只是退出了一个tcp 你要给他关闭 不然他里面的通道还在,你只是模块退出了,没有给他关闭也不行,所以要给他关闭tcp通道=0就关闭了 关闭了之后你还可以做下一个操作,当然也可以给他,如果模块要重启的话,也可以通过这个命令来给他重启AT+QPOWD 

还可以再进行建立一个连接,

这是0通道, 

 他就会关闭这个通道 这个时候就可以循环进行对模块的操作 可以切换透传 对AT命令的一个切换

Http必须要保证信号质量,

卡状态,就是说你做 什么操作都要查询他的卡状态 at+cpin?然后设置一下环境的PDP 

然后设置http反馈头信息,然后查询激活状态

 

 如果激活了,我们就发完成激活就好了,如果没激活的话就发AT+QLACTY? 激活状态=1

连接完之后就可以发网址了,需要21个字节 url长度

 

发过去网址之后, 我们就可以给他读取,获取网页状态

 超时是80秒,能获取的话 返回是一个200

 这是一个作为网页的一个get一个方式,就是能把数据提交到服务器的一个方式,我们推荐的方法是做一个tcp 的数据传输,

我们get以后没有给他read  那我们read一下

 就可以把网页的信息给他读取下来,

发送命令需要加回车 发送新行  其他的不用

这样就可以实现get的一个提交 比如说

这样一个http网页的一个数据 

 ip138限制比较少,基本上给他读取出来了,百度做的比较严格,防止灌入被人入侵,所以做的比较严格

再看一下我们电信卡,

先看卡状态,必须ok

 第二步注册到基站如果没有注册基站 你的板子相当于砖块 所以没有用,不能通讯,0,1   0,5 或者1,1  1,5

 

看他的信号,如果你的信号质量太差的话,他有可能会做一些一系列的失败,比如说信号很差的情况下,不能打电话,

 看一下基站定位,说明我们电信可以做基站定位的,因为电信的每一个基站都纳入了基站定位的定位库里面,所以的话,他就可以做基站定位

USB口跟串口的切换,在接串口的时候, 有些功能 他串口是没有的,首先板子现在是usb口,那我们先拔掉,换成串口,需要做USB口跟串口的转换,通过这个把他切换到串口上去

232 httl都可以 上电 先换移动卡,我知道他的号码,我们在我的电脑看一下串口,是串口5

 打开串口调试工具,

 

比如说我们打电话过去, 首先要看sim卡状态 和信号质量  拨号  拨通后串口没有反应,那usb有反应,所以我们需要把串口的功能通过命令进行配置,命令就可以把他转换过来,????是三个 串口1,usbat usbmodem 

先查询一下, 

这个查询不了,因为没有在usb上做操作, 

配置成功后我们在打电话看一下 

4g模块的拨号测试,可以接入电脑做拨号测试,也可以接入嵌入式系统,比如说我们的Android,liunx win 7 8  win10 xp wce系统,都是可以做一个tcp的拨号测试

首先拔掉网线,想把设备做成无线模块,来带动我们的pc上网  插卡之后看卡状态和信号质量,

注册状态, 

信号质量 

打开网络中心 设置新的连接 拨号连接 

 

 

 

 com31 波特率115200

linux的拨号,嵌入式的一个拨号,他usb主要看他usb 是串口的,他usb 虚拟出的串口本身做一个调试,他有两种接口,一种是usb 转串口,一种是qmi的一个单纯的usb的一个通讯 这个速度是非常高的 上网速度跟手机一样

4g模块,通过外部的单片机驱动4g模块来通过4g模块把数据上传到服务器,和接收服务器的一个数据

那我们准备一个单片机的对角系统,这就是一个stm32的单片机,他就是对角系统的,无非是把排针排座引出来 ,这边是4g模块,我们要把4g模块接入到

这里,这里M_T 和M_R是本身模块的dtl,是默认的dtl,模块引出来的dtl,模块V_T和 V_R是经过传化的dtl 一般用于5v的单片机  

首先我需要把代码下载到板子里面去,

打开代码 

串口1uart_init是给电脑进行通讯的 看他的调试信息  串口2是接我们4g模块的 串口3是给客户用的

插入缓存器,比如说我们先把我们的ip地址 修改一下我们的ip地址和端口号 

也就是说我们发送到我们的电脑上面来, 电脑ip地址是 125.77.81.253

先建立好连接,然后下载

看一下缓存器的配置

 

 

 下载????,上电 stm32在上电的状态下才会进行下载 板子进行上电 上电完看一下我们下载的代码是否是ok的,第一步看串口1的输出信息是什么?默认单片机的串口是com3

 

我们先调单片机 单片机要确保他是ok的 我们看一下他的输出信息,这是单片机的调试口 串口1 他有信息

 接下来看这个模块的串口,我们把信息下载完了之后就可以拔掉了 通过我们这个usb的dtl的三根线 比如说我们  收 和发 和tnd 接到我们的串口2,这个是板子的串口2

接入到我们的 gnd 绿色的,收和发发和收两两接入一下接到我们的usb的tdl

单片机复位一下看是否有信息 

单片机的两个串口 串口1是用来调试的,串口2是用来跟电脑进行 串口1 串口2 都有信息,当然串口3也有信息,但是我们没有用到串口3 这样确保我们单片机是ok的 输出正确的字符串,

首先串口3是接到电脑上,他打印是单片机初始化成功, 串口2输出atd信息,不是乱码 所以这个单片机调试就ok了 调试单片机成功后 我们来调试4g模块

4g模块也是接到这里来,首先我们要保证4g模块灯闪烁,

我们先接d是6角  v_t v_r 接第6角和3 4角  jnd接黄线 只要d接错了,其他的两根线随意接 如果没信息的话就返接一下就可以了,我们调试一下模块看一下是否有信息,

命令模块有信息反馈, 黄色的是jnd,蓝色的是tx-d接到板子的r 绿色的是rx-d tdxi去usb上的tbxi rx-d接到板子上的t接好之后,我们要看模块哪几个信息呢?首先看他的卡状态,卡状态ok的话 模块成功一半,再看一下注册状态

再看一下信号质量 

 

都非常的好  首先保证了这个单片机的串口通的,保证模块的串口通的 卡状态 信号质量都是ok也是通的 我们可以接到单片机,也就是默认的他的串口,先测试一下

无非就是往上挪一排  

看他的信号质量,也是注册的非常成功, 直接接到模块的tdl口。注意模块要先启动 黄灯闪烁代表启动 那我们做了测试时候 我们就可以进行连接了 通过单片机的tdl 串口来接到我们的这个板子的4g模块的串口,那我们就可以巴在这个短路骂了 巴在这个串口线,然后我们就可以对他进行接线

首先我们绿色的是gnb

这两根我给他顺便接上

 还有一个线可以接也可以不接 这个vccmcu他是外部的单片机的一个参考电平 

可以接 也可以不接, vcc 3.3v 给单片机上电,单片机要接到usb转串口这边来 

com7关掉, 看一下单片机的串口信息,我们给单片机板子复位  单片机初始化成功,

 这个时候表明他们之间通讯是没有成功的,你看单片机发送AT没有返回ok 发送ATE0过去也没有返回ok 那我们有可能这两根线接错了,这个单片机的收和发接错了 

 黄色和橙红色对调一下  单片机的收和发接错了 3和4角对调试一下 复位一下模块试一下 他是成功的,他就一直在服务器进行发数据

 

他就一直发送数据过来了, 服务器发数据给板子,板子也可以发数据给服务器 首先我们关闭掉板子 4g模块,vcc给他拔掉,直接三根线 一个是tx rx jnd 接到单片机上面来,

 三根线分别供电 接下来给4g模块直接上电,这个时候单片机发送数据是没有返回ok的,这个时候我们等待4g模块启动,等他启动了,已经启动了,我们就可以对他进行控制了 已经连接到服务器 数据发送过来了

他是不断的发送我们这个网址

 也可以用默认的串口,比如说我拔掉这个线,拔掉 3和4 我们重新给板子上电,我们要等 这个板子给他启动 黄灯闪烁 黄灯闪烁了 那么我给他接好线,

板子一样的给他进行 复位,这个是模块默认的串口,一样的他服务器也会过来, 双向进行数据的传输  1.单片机调试  串口的调试 2模块的调试 tdl电平的调试 3.将两个板子连接起来 通过三根线 通过串口的收 发 和jnd给他连接起来,然后把代码下进去 实现服务器的收发数据

单片机来驱动4g模块 单片机用的是瑞桥系统,比如说PA3他是串口2  PA3和PA2 他是那个stm32的一个串口2 来接到我们的4g模块上面去,

比如说改一个发送内容,

 比如说改一个ip地址  端口号改成55555

 编译 下载一下,我们接到单片机上面来 接入到单片机 然后进行下载,

下载完后,板子上电,灯闪烁表明  模块已经启动了,接线

 启动好一个端口,tcp是55555

 单片机给他复位一下,看一下单片机的串口信息

 模块断电 上电,清除窗口,

 这就是我们4g单片机的驱动,

代码有:主文件main   按键文件 key  led驱动文件   串口2 usart2   串口3 usart3 和5110液晶显示的一个文件,我们没有用到  led, key也没有用到,客户都可以自己根据情况使用,

delay是一个延时函数, sys是系统的一个输出函数, usart是串口1函数,串口3没有用到  串口2用到了,串口1用到了,

默认为库函数???? 

 ec20收发命令的函数 通过串口2 跟模块进行收发数据 通过模块发送数据,

首先我们给板子初始化数据, NTVTC  Seafiguration初始化板子   delay init初始化延时函数

初始化串口1 串口2  串口3 ,串口3没有用到,客户可以自己进行使用,波特率随便自己设置就可以了,9600 和115200都可以

LCD5110_Init的一个显示函数,这个我们没有接,看串口信息,看调试信息就可以了,

接下来,比如说串口的一个,液晶屏的初始化,

下面是 串口1  串口2 串口3 分别给他打印调试信息, 来检测我们单片机是否是正常的一个状态,只要单片机 只要串口1 串口2分别有信息打印出来,那我们单片机的调试就完成了

模块调试我们直接接到tiuctpl直接接到我们tdl电平,给他发送at命令,然后返回ok,比如说卡状态,信号质量ok的话, 我们模块就调试成功了,这个一定要去调试,不然的话,你的模块和单片机里面到底是什么状态,

接下来是模块的初始化,模块比如说给他发送AT他返回OK 我们表明连接成功, ATEO关闭回显, 查询卡状态 查询 注册状态,反馈0,1 表明我们确定我们跟基站信息做了一个连接,判断我们查询状态之后 判断激活状态,

我们需要给模块做一个激活,如果反馈1 表明模块终端入网

接下来查询一下激活后的模块的ip地址

等待模块启动成功,反馈的是终端入网成功 +CGATT:1, 反馈的TT:1

我们可以单独发送给模块,

AT+QICLOSE=O 表明是要关闭通道,比如说我们之前有过一个连接我们要对他进行关闭 关闭我们的通道,比如通道0 我们就关闭通道0 他的状态 不然的话,下次你再连接的时候就会失败,

85行这个是客户需要改动的, 一个是ip地址,注意他的双引号 是以结束,端口比如说是55555 注意逗号 隔开来,不要多一个少一个,就会出现问题,

进行连接成功之后,我们反馈我们连接状态,反馈我们连接到服务器,连接到服务器的时候我们就不断的发送心跳 网址

 给服务器,服务器如果下发数据 我们收到下发数据的话,我们就给他打印出来 所以我们把数据发送到服务器,服务器可以把数据下发到我们的板子,我们板子通过串口 stm32板子通过串口给他打印出来

4G模块MQTT阿里云物联网平台搭建和调试

ip地址可以用阿里云的ip地址 通过 tcp跟服务器做透平传输 

 编译完之后可以通过j-link下载到单片机里面去,

可以看到 有这个  就可以下载了

这样 单片机串口1 就可以输出调试信息,串口2 可以用来接我们的4g模块,我们用单片机的stm32 s103 串口2 来接4g模块,可以看里面的串口输出信息,串口来接到我们电脑里面可以看一下他的调试信息,这样通过usb转tdl 接到我们电脑里面, 我们在设备管理器里面看到有com3

 

 就是我们usb转tdl 单片机 串口1的输出信息,我们可以复位一下看一下他的串口信息,

这就是我们单片机已经灌好程序了, 

接下来 单片机与模块进行连接 单片机的串口2 三根线,

链接

的话把 这个拔掉后,首先有个绿色的他是jmd  黄色的是单片机的rx 接到模块的tx 红色的是单片机的tx 接到模块的rx

接好之后,我们看一下输出信息, 复位一下我们单片机,这样就连上了,连上之后 服务器还没创建,所以他就失败了,我们登录到服务器

建立一个端口为1001的服务器

 这个时候再次复位一下,这个时候服务器连上了,数据就一直发过来

这就是阿里云服务器,通过这个 单片机来采集数据,然后通过这个4g模块,通过串口接到这个4g模块,无线的把这个数据发送到这个服务器上,

接下来,你可能没有这个服务器,需要弄成网页的这种形式,就是说当你数据量很多的时候,你可能需要一台服务器,然后搭建一个自己的网页平台 就是物联网的一个平台,然后把数据存放到自己的服务器,这样你就不会因为别人的平台的因素干扰来导致 不会因为别人的干扰,比如说别人平台没有用的导致数据丢失,如果说你数据量不是很大的话呢,你完全可以用别人现成的平台,比如说别人做好的网页平台,把这个数据给存进去,

接下来我们讲另一个平台阿里云物联网开发平台 打开我们浏览器 输入阿里云物联网平台网址 登录

登录到阿里云物联网平台,可以看到 阿里云物联网平台,说白了 我们就不用刚刚那个服务器了,服务器主要走的是tcp udp  http mqtt 主要走这些协议 相当于后台的一个系统,相当于自己搭建的一个服务器,那这个相当于别人已经做好的一个网页平台 你只要把数据存放到他的网页就可以了,说白了他是数据库的一个形式,比如说你有台灯 是一个产品, 风扇是一个产品, 设备的话呢

比如说 你有红台灯  白台灯 蓝台灯   产品有空调 风扇 电冰箱,

比如说我们现在做一款 环境采集数据的产品,我们可以创建一个产品,比如说我们创建一个产品叫

 建立添加设备,选择我们产品,添加设备,点击设备 属于环境这个产品,环境比如说是水务管理,

 添加一个设备,他就会产生产品的密钥 ,产品名称 和设备密钥

 这个要复制下来,后面要用到

是什么产品 产品底下的哪个设备 ,设备的密钥 你要接入进来你要给我密钥 这三个就完全可以接入到我们的这个阿里云物联网平台

水务设备未激活,表示设备一次都没有连接上,只要连接过一次就会显示在线,离线,

设备topic列表,topic他是 通过接口,比如说通过get方式可以下发数据,可以订阅比如说订阅到SHUIWU/user/get  比如说有数据下发的话,他会通过topic列表来把数据下发下去,比如说设备需要发布数据的时候可以通过第一个topic列表来把数据发上来,比如还有其他的方式 set  post  还有其他的订阅方式,还有update更新的一个方式,还有错误的一个更新,错误的一个检测,主要用到的有第一个 上发,和最后一个下发,运行状态,这边有一些数据库,有一些数据,

pm2.5 声音分贝 光照度 湿度  还可以定义一些新的,

功能定义里面可以添加湿度   地理位置等等这些,可以添加一些新的功能

 室内温度可以改一下他的值,默认是 -40~55

 在线调试,刷一下 虚拟设备,数据看他能不能过去 float 2.0 int 发2 

推送成功 会有一串 

 一些标准的协议,然后存到网页的后台,网页后台把数据存到数据库,这个时候有数据他显示在线状态,

 

运行状态, 就可以看到我们刚刚发送的数据,这样的话表示我们这个测试,测试表示他是成功的,实时监控我们可以看到这个数据, 日志服务里面可以看到刚刚下发的数据

 数据分析,把数据进行管理和开发 边缘计算  开发服务,通过iot studio 行业服务  视频服务

8.4G模块通过STM32发送MQTT协议数据到阿里云物联网平台

如何通过板子,通过mqtt协议把数据发送到物联网平台里面,设备里面看到环境这边,水务运行状态,自己发送的数据

测试:打开代码,需要改三个东西,第一个是产品的密钥

第二个是设备产品的名称,第三个设备的密钥,

 弄好之后,进行编译一下,程序下载到单片机里面,

 通过魔法棒这边,我们的stm32是8m的,

 j-link是128k的 现在有一个问题,问题是板子没有给他供电,通过给板子供电,debug可以看到数字,

 可以下程序,选单片机先看他的串口1   串口2 跟模块进行通讯,通过单片机的串口1,来监测串口发送来的信息,串口2 跟这个模块来进行通讯,单片机串口2 我们接好了,通过三根线,这个绿色的jnd, 黄色的是单片机的rx  红色是单片机的tx接模块的rx 三根线,接串口2, 接下来看单片机的串口 单片机串口 这个时候有个com3 我们看 com的信息输出,

 模块上电,等待模块灯的一个闪烁,表示他启动,启动我们开始检测卡状态,信号质量,这个时候质检成功,准备发数据,

indoortemp室内温度 是2, 运动状态  设备检测到的运行状态,水务这个设备,通过这个串口 发送出来,室内温度  地理位置 这个是上发, 当然也有下发,通过最后一个get方式来发送信息,

 发送111信息,通过板子打印出来,

 数据通过整理,可以提交外部的手机app,也可以提交到自己的软件开发, 通过设备信息来接入到我们设备里面,接收到服务器来获取我们的数据,也可以通过阿里云的在线开发平台, web可视化平台,移动可视化平台,服务开发

9.4G模块STM32通过MQTT协议发送代码讲解

数据一直发送服务器,我们上报数据肯定很快1秒钟一次,一直发送,如果你要下发 需要注意一下,我们一直上发他占用比较多的时间 时序 和系统资源 所以下发的时候,你要多发几次,这一讲我们讲一下他的代码讲解,

mqtt手册,首先他必须第一步首先发送AT+QMTCFG配置命令,如果这个返回ok就可以,如果他不反回ok 表示你的模块不支持,发的时候要注意,不要多发也不要少发,如果发错的话,他也会返回错误,它里面有什么参数?首先 阿里云的一个版本,当然他有其他的一个命令,发送到比如说自己搭建的阿里云服务器 自己搭建的一个mqtt服务器也可以,有人他在自己的系统里面搭建mqtt服务器也可以发过去,那这里我们用他这个阿里云物联网的服务器 第一个参数表示阿里云 然后他的一个id 也就是  他其实mqtt是基于tcp tcp也有这个ip 所以mqtt也有,然后 产品的key  设备名称, 加密钥,这是第一个命令 

 第二个是open命令,open是打开一个连接,那我们代码里面 分别可以看得到,这些其他的我们在上一讲讲过的,比如说一些串口输出

波特率可以改9600 也可以改115200 这是串口3 

串口2是跟模块通讯,串口1是接到电脑上的一个信息,

MTC29302PWRKEYA控制29302电源,这个我们可以不用,

RESET4G():复位4g电源也可以不用

R5485Send Data(cx,8) 485的一些数据的话呢,这边也可以不用

然后直接进入初始化,初始化完了之后,就是进入到这个 通过这个函数来连接 我们阿里云服务器

 

 刚刚我们说过 我们第一个配置 他的三个信息,

然后就是open 的时候,我们选择阿里云服务器的一个网址 我们id也是0

第一个也是0,这个也是网址也叫域名, 第二个是端口,端口一般 是1883 一般mqtt是1883

第三个,比如说我们有多次连接,我们可以通过close+他的id,所以一开始我们可以从代码里面可以先给他close 防止多次打开,

接下来还有一个conn 就是连接了,连接这边我们有用到,

前面connid是0,后面是设备名称, 也就是我们连接哪个设备就可以了,

这参数也有, 就是id为这个名称 client clientID username password可以不要 接下来配置 打开连接都做完了之后,就可以配置订阅

 

订阅完 比如上面有数据的话呢, 就会发下来,订阅的话,我们先配置一个id,msgID topic 然后是否有qos1或0,那么我们在代码里面可以看到qos 是0   %s/ %s/user/get 是topic列表,第一个是id 0, 1是msgID, 我们通过topic列表可以下发数据 

 订阅做好了之后就要发数据了,

发送数据时pub

 发送室内温度IndoorTerpeTature,这个是产品里功能定义有一个IndoorTerpeTature 是一个标识符,

 

在配置AAAT+CREG的时候一定要等于0 ,所以我们判断的时候一定要“0,1” 或者 “0,5” 如果是“1,1” 或者 “1,5” 会判断不成功,所以我们所有模块一开始都会检测卡状态,初始状态 和信号质量,如果都成功,可以看他的ip地址的注册信息,如果注册信息有了

 检测到PDP已经激活了,发送关闭128行 和注销129行  之前的一些命令,

 取消订阅????

例子,比如说配置命令????  配置到阿里云aliauth  然后是open  QMTCONN连接,

QMTSUB订阅

接收数据, ????

给他关闭????

 

ssl加密的????协议,cfg先配置加密,

 

发送数据,数据,我们通过 val  1-614一直到现在614

 都是通过++一直发送,直到6500等于0,从1开始发,一直发送到阿里云平台,

移远EC20 4G模块LTE开发板三网通模块 MQTT阿里云物联网STM32代码

最后

以上就是务实手套为你收集整理的移远EC20 4G模块LTE开发板三网通模块 MQTT阿里云物联网STM32代码的全部内容,希望文章能够帮你解决移远EC20 4G模块LTE开发板三网通模块 MQTT阿里云物联网STM32代码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部