4G 模组的 FTP 应用:技术科普

众所周知FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端,今天我将为大家带来一场4G 模组的 FTP 应用技术科普:

以低功耗模组Air780E核心板为例。

1、FTP 概述

FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。

其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于 FTP 服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。

默认情况下FTP协议使用TCP端口中的20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。

2、演示功能概述

本文教你4G模组使用LuatOS开发4G通信中FTP网络协议的应用。

本教程实现的功能定义是:

使用 Air780E核心板下载Air780的LuatOS 示例代码中ftp的例程进行验证,例程流程为:

● 登录FTP服务器

● 用 ftp.command 操作 ftp 服务器目录

● ftp.pull 下载文件

● ftp.push 上传文件

● FTP 客户端关闭

3、硬件环境

3.1 Air780E核心板

使用Air780E核心板:

此核心板的详细使用说明参考:Air780E 产品手册 中的 << 开发板 Core_Air780E 使用说明 VX.X.X.pdf>>,写这篇文章时最新版本的使用说明为:开发板 Core_Air780E 使用说明 V1.0.5.pdf ;核心板使用过程中遇到任何问题,可以直接参考这份使用说明 pdf 文档。

3.2 SIM卡

中国大陆环境下,可以上网的sim卡,一般来说,使用移动、电信、联通的物联网卡或者手机卡都行;

3.3 PC电脑

WINDOWS 系统,其他暂无特别要求;

3.4 数据通信线

USB 数据线,暂无特别要求;

4、软件环境

4.1 Luatools工具

要想烧录LuatOS固件到4G模组中,需要用到的调试工具:Luatools

详细使用说明参考:
Luatools工具使用说明:
https://docs.openluat.com/Luatools/

Luatools工具集具备以下几大核心功能:

  • 一键获取最新固件:自动连接服务器,轻松下载最新的模组固件。

  • 固件与脚本烧录:便捷地将固件及脚本文件烧录至目标模组中。

  • 串口日志管理:实时查看模组通过串口输出的日志信息,并支持保存功能。

  • 串口调试助手:提供简洁的串口调试界面,满足基本的串口通信测试需求。

Luatools下载之后, 无需安装, 解压到你的硬盘,点击 Luatools_v3.exe 运行,出现如下界面,就代表 Luatools 安装成功了.

4.2 准备需要烧录的代码

首先要说明一点:脚本代码, 要和固件的 soc 文件一起烧录。

4.2.1 烧录的底层固件文件

底层 core 下载地址:LuatOS 固件版本下载地址

图片

Air780E的底层固件在Luatools解压后目录的: 
LuatOS-SoC_V1112_EC618_FULL.soc

图片

4.2.2 烧录的脚本代码

首先要下载Air780的LuatOS示例代码到一个合适的项目目录。
示例代码网站: 
https://gitee.com/openLuat/LuatOS-Air780E

下载流程参考下图:

图片

图片

下载的文件解压,找到 LuatOS-Air780E-master\demo\ftp\main.lua,如图:

图片

4.3 烧录步骤

4.3.1 正确连接电脑和4G模组电路板

使用带有数据通信功能的数据线,不要使用仅有充电功能的数据线;

4.3.2 识别4G模组的 boot 引脚

在下载之前,要用模组的 boot 引脚触发下载, 也就是说,要把4G模组的 boot 引脚拉到 1.8v,或者直接把 boot 引脚和 VDD_EXT 引脚相连。我们要在按下BOOT 按键时让模块开机,就可以进入下载模式了。

具体到Air780E开发板:

1、当我们模块没开机时,按着 BOOT 键然后长按 PWR 开机。

2、当我们模块开机时,按着 BOOT 键然后点按重启键即可。

4.3.3 识别电脑的正确端口

判断是否进入 BOOT 模式:模块上电,此时在电脑的设备管理器中,查看串口设备, 会出现一个端口表示进入了 boot 下载模式,如下图所示:

图片

当设备管理器出现了 3 个连续数字的 com 端口,并且每个数字都大于 4,这时候, 硬件连接上就绪状态,恭喜你,可以进行烧录了!

4.3.4 用 Luatools 工具烧录
  • 新建项目

首先,确保你的 Luatools 的版本,大于等于 3.0.6 版本的。

在 Luatools 的左上角上有版本显示的,如图所示:

图片

Luatools 版本没问题的话, 就点击 LuaTOols 右上角的“项目管理测试”按钮,如下图所示:

图片

这时会弹出项目管理和烧录管理的对话框,可以新建一个项目,如下图:

图片

  • 开始烧录

选择 780E 板子对应的底层 core 和刚改的 main.lua 脚本文件。下载到板子中。

图片

点击下载后,我们需要进入 boot 模式才能正常下载。

图片

如果没进入 boot 模式会出现下图情况:

图片

当我们模块没开机时,按着 BOOT 键然后长按 PWR 开机,进入下载。

当我们模块开机时,按着 BOOT 键然后点按重启键即可。可以进入下载,如图:

图片

图片

5、API 说明

5.1 ftp.login(adapter,ip_addr,port,username,password)

FTP 客户端

参数

传入值类型解释

int

适配器序号, 只能是:
socket.ETH0, socket.STA, socket.AP
如果不填,
会选择平台自带的方式,
然后是最后一个注册的适配器

string

ip_addr 地址

string

port 端口,默认 21

string

username 用户名

string

password 密码

bool/table

是否为 ssl 加密连接,默认不加密,
true 为无证书最简单的加密,table 为有证书的加密
server_cert 服务器 ca 证书数据
client_cert 客户端 ca 证书数据
client_key 客户端私钥加密数据
client_password 客户端私钥口令数据

返回值

返回值类型解释

bool/string

成功返回 true 失败返回 string

例子

ftp_login = ftp.login(nil,"xxx")

5.2 ftp.command(cmd)

FTP 命令

参数

传入值类型解释

string

cmd 命令 目前支持:
NOOP SYST TYPE PWD MKD
CWD CDUP RMD DELE LIST

返回值

返回值类型解释

string

成功返回 true 失败返回 string

例子

// 空操作,防止连接断掉

print(ftp.command("NOOP").wait())

// 报告远程系统的操作系统类型

print(ftp.command("SYST").wait())

// 指定文件类型

print(ftp.command("TYPE I").wait())

// 显示当前工作目录名

print(ftp.command("PWD").wait())

// 创建目录

print(ftp.command("MKD QWER").wait())

// 改变当前工作目录

print(ftp.command("CWD /QWER").wait())

// 返回上一层目录

print(ftp.command("CDUP").wait())

// 删除目录

print(ftp.command("RMD QWER").wait())

// 获取当前工作目录下的文件名列表

print(ftp.command("LIST").wait())

// 删除文件

print(ftp.command("DELE /1/12222.txt").wait())

5.3 ftp.pull(local_name,remote_name)

FTP 文件下载

参数

传入值类型解释

string

local_name 本地文件

string

remote_name 服务器文件

返回值

返回值类型解释

bool/string

成功返回 true 失败返回 string

例子

ftp.pull("/1222.txt","/1222.txt").wait()

5.4 ftp.push(local_name,remote_name)

FTP 文件上传

参数

传入值类型解释

string

local_name 本地文件

string

remote_name 服务器文件

返回值

返回值类型解释

bool/string

成功返回 true 失败返回 string

例子

ftp.push("/1222.txt","/1222.txt").wait()

5.5 ftp.close()

FTP 客户端关闭

参数

返回值

返回值类型解释

bool/string

成功返回 true 失败返回 string

例子

ftp.close().wait()

5.6 ftp.debug(onoff)

配置是否打开 debug 信息

参数

传入值类型解释

boolean

是否打开 debug 开关

返回值

返回值类型解释

nil

无返回值

例子

6、实现流程

  • 打开 FTP 服务器。记录地址,端口号,用户名,密码等必要信息。

  • 改 DEMO,将登录中的地址,端口号,用户名,密码等必要信息修改为自己服务器的。

  • 登录 ftp 服务器(ftp 服务器用 vsftpd)

  • 等待登录成功

  • 执行自己的命令

6.1 例程

示例代码如下:

图片

7、总结

本文档主要介绍4G通信中FTP通信的应用。结合例程讲解了FTP基本原理,介绍了FTP主要API,旨在最简单的上手Air780的LuatOS的 FTP开发。

8、常见问题

8.1 关于不支持主动模式

模块 ftp 默认是被动模式,不支持主动模式,无法设置主动模式,公网下要想模块正常连接服务器,服务器肯定不能设置为主动模式,否则哪家模块都不能用。

8.2 ftp服务器用vsftpd

ftp的服务器用vsftpd。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/884083.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PAT甲级-1074 Reversing Linked List

题目 题目大意 给一个链表的头结点和总节点个数&#xff0c;以及k。每k个节点的链表都要翻转。 思路 链表可以用一个结构体数组来存储&#xff0c;先遍历一遍&#xff0c;过滤掉不在链表中的节点。然后将过滤好的节点放入res数组中&#xff0c;每k个元素用一次reverse()&…

go语言gin框架平滑关闭——思悟项目技术2

目录 前言 直接关闭的缺陷 平滑关闭的使用场景 例子 思悟项目&#xff1a; golang qq邮件发送验证码——思悟项目技术1 前言 平滑关闭&#xff08;graceful shutdown&#xff09;是指在停止服务时&#xff0c;能够让现有的连接、任务或者操作优雅地完成&#xff0c;而不是…

44-RK3588s调试 camera-engine-rkaiq(rkaiq_3A_server)

在RK3588s平台上调试imx415 camera sensor 过程中&#xff0c;已经识别到了camera sensor ID&#xff0c;并且可以拿到raw图和isp处理后的图像&#xff0c;但是isp处理后的图像偏绿&#xff0c;来看查看后台服务发现rkaiq_3A_server没有运行&#xff0c;然后单独运行rkaiq_3A_s…

Python 变量在函数中的作用域

什么是局部变量&#xff1f; 作用范围在函数内部&#xff0c;在函数外部无法使用 什么是全局变量&#xff1f; 在函数内部和外部均可使用 如何将函数内定义的变量声明为全局变量&#xff1f; 使用global关键字&#xff0c; global变量 练习&#xff1a; 演示局部变量 #…

【jvm】jvm对象都分配在堆上吗

目录 1. 说明2. 堆上分配3. 栈上分配&#xff08;逃逸分析和标量替换&#xff09;4. 方法区分配5. 直接内存&#xff08;非堆内存&#xff09; 1. 说明 1.JVM的对象并不总是分配在堆上。2.堆是JVM用于存储对象实例的主要内存区域&#xff0c;存在一些特殊情况&#xff0c;对象…

百数功能更新——表单提交支持跳转到外部链接并支持传参

百数的表单外链功能允许用户将表单以链接的形式分享给外部用户&#xff0c;外部用户无需登录或加入团队即可访问并填写表单。 本次更新的表单提交后跳转指定链接的功能&#xff0c;在支持跳转内部链接的基础上&#xff0c;支持用户在完成表单填写并提交后&#xff0c;自动跳转…

C++笔记---可变参数模板

1. 简单介绍与基本语法 可变参数模板是指模板的类型参数列表的的参数个数可变。 C11支持可变参数模板&#xff0c;也就是说支持可变数量参数的函数模板和类模板&#xff0c;可变数目的参数被称为参数包&#xff0c;存在两种参数包&#xff1a; 模板参数包&#xff1a;表示零或…

BSV区块链为供应链管理带来效率革命

​​发表时间&#xff1a;2024年10月10日 供应链管理是众多行业的重中之重&#xff0c;它确保了商品能够从制造商处顺畅地传递到消费者手中。然而&#xff0c;传统的供应链管理面临着许多挑战&#xff0c;包括缺乏透明度、延误、欺诈和协调上的低效率等等。 BSV区块链技术的出…

Linux基础(七):Linux文件与目录管理

Linux文件与目录管理 1.目录与路径1.1 cd1.2 pwd1.3 mkdir1.4 rmdir1.5 ls1.6 cp1.7 rm1.8 mv 2.可执行文件路径的变量&#xff1a;$PATH3.从字符串中获取目录名称和文件名称4.文件内容读取4.1 cat与tac4.2 nl4.3 more和less4.4 head与tail4.5 od 5 使用touch来改变文件的时间6…

C语言初阶:十一.代码调试技巧

❤欢迎各位大佬访问&#xff1a;折枝寄北-CSDN博客折枝寄北擅长C语言初阶,等方面的知识,折枝寄北关注python,c,java,qt,c语言领域.https://blog.csdn.net/2303_80170533?typeblog❤文章所属专栏https://blog.csdn.net/2303_80170533/category_12794764.html?spm1001.2014.300…

CMake知识点

参考&#xff1a; https://zhuanlan.zhihu.com/p/661284252 cmake使用教程&#xff08;实操版&#xff09;-CSDN博客 【CMake】CMake从入门到实战系列&#xff08;二&#xff09;——实例入手&#xff0c;讲解CMake的基本流程_cmake创建一个可执行目标的过程-CSDN博客 一、…

【Java多线程】5 Java中的并发工具

第五部分&#xff1a;Java 中的并发工具 Java 提供了多种并发工具类&#xff0c;帮助开发者更好地管理和控制多线程的执行。这些工具类主要位于 java.util.concurrent 包中&#xff08;可点击跳转拓展一&#xff09;&#xff0c;提供了比传统的 synchronized 更强大和灵活的并…

什么是aps排产管理软件?aps排产管理软件有什么用?最详细解释!

近几年&#xff0c;APS排产管理软件特别火&#xff0c;很多制造业企业都在谈论和使用它。不过&#xff0c;因为信息太多太杂&#xff0c;我们平时接收到的往往都是零零碎碎的介绍&#xff0c;很难全面了解它。所以&#xff0c;今天这篇文章就来给大家做个整合&#xff0c;把APS…

微信小程序25__实现卡片变换

先看效果图 实现代码如下&#xff1a; <view class"page" style"filter:hue-rotate({{rotation}}deg)"><view class"prev" catchtap"toPrev">《《《</view><view class"next" catchtap"toNext&q…

vue项目中如何在路由变化时增加一个进度条

在 Vue.js 项目中&#xff0c;使用路由&#xff08;如 Vue Router&#xff09;时&#xff0c;为了提升用户体验&#xff0c;你可能会想要在路由变化时显示一个进度条。这可以通过多种方式实现&#xff0c;其中一种流行的做法是使用第三方库&#xff0c;如 vue-loading-bar 或 n…

4款专业音频在线剪辑工具帮你开启创意之路。

音频在线剪辑工具能够为我们提供很大的便利&#xff0c;对于不管是专业的音乐制作人还是音频创作爱好者来说&#xff0c;都能借助一些音频编辑工具来充分发挥自己的创意。所以这一次&#xff0c;我要给大家介绍几个专业方便的音频剪辑工具。 1、福昕音频在线 直达链接&#x…

JK触发器(Quartus与Modelsim联合仿真)

JK触发器由于其灵活的逻辑功能&#xff0c;被广泛应用于数字电路设计中&#xff0c;如计数器、寄存器、序列信号发生器等。它可以通过改变J和K的输入来实现不同的逻辑操作&#xff0c;使得设计更加简洁高效。 在数字电子技术中&#xff0c;JK触发器的真值表是理解其工作原理和设…

Redis高频面试题

一、Redis有什么好处? 高性能:Redis是一个基于内存的数据存储系统,相比于传统的基于磁盘的数据库系统,它能够提供更高的读写性能。支持丰富的数据类型:Redis支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等,这使得它可以用于多种不同的应用场景。持久化:Re…

K8s 容器的定向调度与亲和性

K8s 集群节点 CPU 使用率高&#xff01;内存溢出&#xff08;OOM&#xff09;&#xff01;宕机&#xff01;导致大量微服务瘫痪怎么办&#xff1f;可能是调度策略没做好&#xff0c;看完这篇文章掌握提高集群稳定性的管理诀窍。 Kubernetes&#xff08;K8s&#xff09;是一个开…

Javaweb 实验7 JSP内置对象II实现购物车

实验七 JSP内置对象II 目的&#xff1a; 掌握JSP内置对象的使用。理解JSP的作用域掌握session&#xff0c;application对象的使用 实验要求&#xff1a; 完成实验题目要求提交实验报告&#xff0c;将代码和实验结果页面截图放入报告中 实验过程&#xff1a; 一、结合之前…