【单片机】有人 WH-LTE-7S1 4G cat1 模块,HTTPD模式,字符串传输,文件传输。GPRS模块连接服务器教程。

上一篇文章:https://qq742971636.blog.csdn.net/article/details/132571592

在上一篇文章里,已经通过TCP 长链接进行服务器与Cat1 GPRS 模块进行双向通信。已经能够满足一般需求了,已经顺利打通物联网开发的基本通信能力。

那么这一篇文章里,将使用其HTTPD协议通信能力,完成HTTP字符串传输、文件传输。

这篇文章是我辛苦尝试出来的,所以文章里的一些代码、软件 请到这里fufei下载:http://dt3.8tupian.net/2/28880a53b1688.pg3。【似乎第一篇文章的内容已经完全够用了,这篇文章吧,如果你要进行下去,就权当是请作者喝咖啡了】

1、配置模块为HTTPD模式 POST字符串传输

HTTP POST 请求的好处就是,一次一次的,不用长连接了。

方法同第一篇文章。在这个USR-CAT1版本下,依旧:

1、打开串口。默认是115200.
2、可以点一下进入通信状态,这个模块初始化是连接到有人的服务器的,所以上电后会连接他们的服务器。收到字符串WH-LTE-7S1,或者别的字符串,可能是开机提示。这里点两下进入通信状态相当于让软件或者模块进入一种工作状态。
3、进入配置状态。点一下就好了,如果收到error的提示,就是点多了,这个时候可以先点两下进入通信状态。
4、点击获取。
5、改成HTTPD模式,如图里面那样去配置即可。
6、设置并保存。这个时候就写入模块了,模块会自动重启。
7、会看到重启后的字符串。
9、写一个字符串。
10、点击发送。【发送一次就会断开,服务器会收到这个POST请求,同时服务器也返回信息给4G cat1 模块,表示通信成功,可以看到图里的就是通信成功的样子。】

【配置完成后,这个模块下次上电就默认是这个配置,不用重复配置,这一点非常nice,不用写那么复杂的单片机指令去】

在这里插入图片描述

服务器运行的python脚本,在这里第一篇文章安装的fastapi起到作用:


请在服务器运行 run1.py, run1.py在fufei压缩包里,下载后解压,传到服务器上。
有人的技术支持不懂这个,这全靠自己做实验得到的,如果是新手玩家,根本玩不动这个。
fastapi程序需求,你不能更改run1.py这个文件的名字,要改就需要改里面的程序以配套。

这样服务器即可收到发送的字符串信息。

2、配置模块为HTTPD模式 GET请求

GET是透传协议,简单得多:
在这里插入图片描述

服务器代码:

请执行资料包里的 run2.py

3、下载服务器的文件

服务器代码

服务器代码会接收post请求,返回给客户端一个特定的文件。

请在服务器执行资料包里的 run3.py

模块

模块发送格式

需要注意到,模块发送支持的content-type似乎只有:“text/html"和"text/plain”。

"text/html"表示HTML(Hypertext Markup Language)格式的文本内容,用于呈现富文本和网页。它包含HTML标记和结构,可以通过浏览器渲染为具有样式、图像和交互性的网页。

"text/plain"表示纯文本格式的文本内容,仅包含纯文本字符,没有任何样式、图像或特殊的格式化。它通常用于简单的文本文件、日志、纯文本电子邮件等。

这样想来,直接发文件利用这里的HTTPD POST是做不到的,除非模块支持content-type: application/octet-stream。或者是我不清楚这方面,望赐教。这b模块资料全靠猜,没办法。

配置中要注意下图中,过滤HTTP头,这个不要勾选。 可以看到右边是收到服务器传过来的数据的,而且模块将其解析出来了,content-type: application/octet-stream,下面跟的是我服务器创建的一个文件里的内容。

在这里插入图片描述

服务器传回的文件是1.bin,内容是下图这些,可见是传回来了的。
在这里插入图片描述

4、4G cat1 模块上传文件到服务器

如上面第3节所说,本身这个4G cat1 模块支持的POST只有"text/html"和"text/plain"的话,就是只有文本内容,无法有content-type: application/octet-stream这样支持文件的传输功能。

而且我调试的时候,遇到了史诗级障碍,我的这个模块在不断重启,下图是不断重启向串口助手发送的开机信息。这或许是我供电不足导致的,我采用的是台式机5V串口调试模块CH340给这个4G cat1 模块供电。

在这里插入图片描述

这一切似乎是模块里面自带的封装不够完善,模块既然能够建立TCP协议,那么HTTP在TCP之上,我们其实也可以自己去写c代码,建立HTTP的通信,如下面这样:

构建HTTP请求报文:根据HTTP协议规范,在单片机上构建HTTP请求报文。报文包括请求行、请求头和请求体等部分,用于描述客户端希望服务器执行的操作和传递的数据。
发送HTTP请求报文:使用TCP socket相关的发送数据函数将构建好的HTTP请求报文发送到服务器。确保数据发送完整并等待服务器的响应。
接收HTTP响应报文:使用TCP socket相关的接收数据函数从服务器接收HTTP响应报文。根据HTTP协议规范,响应报文包括状态行、响应头和响应体等部分,包含了服务器处理请求后的结果和所返回的数据。
处理HTTP响应:解析接收到的HTTP响应报文,根据需要提取其中的数据或执行相关操作。

但这似乎不是一个轻松的工作量!而且我的模块现在在这个模式下,极其不稳定在不断重启。所以我认为,最稳妥的方式还是直接用TCP长连接,将文件里的内容读取为字符串,然后进行传输。可以与服务器约定一个标志,让服务器进行转存文件,这里实现的后续就自由发挥了,没有服务器代码了。

猜你喜欢

转载自blog.csdn.net/x1131230123/article/details/132587182