4G
一、引言
本指南所演示的是 Air8101 模块通过外挂 Air780EPM 模块实现 4G 联网的功能。
二、准备硬件环境
参考:硬件环境清单,准备以及组装好基本硬件环境。
2.1 Air8101 核心板
2.2 Air780EPM V1.2开发板
三、准备软件环境
参考:Air8101 软件环境清单,准备好软件环境。
1. 烧录工具:参考 Luatools 工具使用说明;
2. Air8101 需要烧录的固件和脚本文件:
内核固件:https://docs.openluat.com/air8101/luatos/firmware/
脚本文件:demo/air8101_air780epm_4G/air8101_air780epm_4g_master
3. Air780EPM 需要烧录的固件和脚本文件:
内核固件:https://docs.openluat.com/air780epm/luatos/firmware/version/
脚本文件:demo/air8101_air780epm_4G/air8101_air780epm_4g_slave
4. LuatOS 运行所需要的 lib 文件:使用 Luatools 烧录时,勾选 添加默认lib
选项,使用默认 lib 脚本文件。
准备好软件环境之后,接下来查看如何烧录项目文件到 Air8101 开发板和如何烧录项目文件到 Air780EPM 开发板,将本篇文章中演示使用的项目文件烧录到 Air8101 核心板和 Air780EPM 开发板中。
四、常用 API 接口介绍
本文仅介绍程序中使用到的 API 接口,详细接口说明请查看:LuatOS 库函数开发手册 - 合宙模组资料中心。
4.1 airlink 相关 API 接口介绍
全部 airlink 相关 API 接口介绍可参考:airlink,本文只着重介绍代码中用到的 API 接口。
airlink.init()
初始化 AirLink
airlink.start(mode)
启动 AirLink
airlink.ready()
判断是否就绪
airlink.sdata(data)
发送自定义数据
4.2 netdrv 相关 API 接口介绍
全部 netdrv 相关 API 接口介绍可参考:netdrv,本文只着重介绍代码中用到的 API 接口。
在使用 netdrv 相关接口时,也用到了 socket 的一些常量,可自行点击 socket 进行了解。
netdrv.setup(id, tp, opts)
初始化指定 netdrv 设备
netdrv.ipv4(id, addr, mark, gw)
设置或读取 ipv4 地址
netdrv.napt(id)
开启或关闭 NAPT
五、硬件资料及接线说明
5.1 硬件资料说明
Air8101 实现 4G 上网的硬件资料可参考:https://docs.openluat.com/air8101/luatos/hardware/design/4gnet/ 。
5.2 Air8101 与 Air780EPM 接线说明
下列表格为 SPI0 的接线说明,本次测试使用 SPI0 接法进行演示。
5.2 Air8101 实物接线图
5.3 Air780EPM 实物接线图
Air780EPM开发板必须使用1.2版本的(不带以太网)。
六、整体功能演示
6.1 功能概述
1. Air8101 外挂 Air780EPM 实现 4G 联网。
2. Air8101 与 Air780EPM 数据信息互传。
3. Air8101 实现 4G 联网后进行 HTTP GET 请求。
6.2 源码
源码获取链接:https://gitee.com/openLuat/LuatOS/tree/master/module/Air8101/demo/air8101_air780epm_4G
6.3 演示
6.3.1 代码实现
由于本文需要用到的代码内容过多,大家可通过链接跳转到仓库代码中查看,本文只展示 Air8101 和 Air780EPM 的主要功能代码。
Air8101 主要功能代码
下列为
network_and_http.lua
文件中代码内容。
--[[
本功能模块演示的内容为:
1. 初始化网络,使得Air8101可以外挂Air780EPM实现4G联网功能
2. Air8101发送数据信息给Air780EPM
3. HTTP GET请求任务,测试Air8101的网络连接情况
4. 订阅airlink的SDATA事件,打印收到的信息
]]
-- 初始化网络,使得Air8101可以外挂Air780EPM实现4G联网功能
sys.taskInit(function()
-- sys.wait(500)
-- 初始化airlink
airlink.init()
-- 创建桥接网络设备
log.info("创建桥接网络设备")
netdrv.setup(socket.LWIP_USER0, netdrv.WHALE)
-- 启动底层线程, 主机模式
airlink.start(0)
-- 配置IPv4地址
netdrv.ipv4(socket.LWIP_USER0, "192.168.111.1", "255.255.255.0", "192.168.111.2")
end)
-- Air8101发送数据信息给Air780EPM
sys.taskInit(function()
socket.sntp() -- 设置网络时间同步
while 1 do
-- 发送给对端设备
local data = rtos.bsp() .. " " .. os.date()
log.info("发送数据给对端设备", data, "当前airlink状态", airlink.ready())
airlink.sdata(data)
sys.wait(1000)
end
end)
-- HTTP GET请求任务,测试Air8101的网络连接情况
sys.taskInit(function()
-- sys.waitUntil("IP_READY")
--等待6000毫秒(6秒),确保网络连接已经建立,再执行后续操作
sys.wait(6000)
-- 创建一个无限循环,不断执行HTTP请求
while 1 do
sys.wait(500)
-- 发起一个HTTP GET请求
local code, headers, body = http.request("GET", "https://httpbin.air32.cn/bytes/2048", nil, nil, {adapter=socket.LWIP_USER0,timeout=3000}).wait()
-- 打印HTTP请求的结果,包括响应码code和响应体长度#body
log.info("http", code, body and #body)
end
end)
-- 订阅airlink的SDATA事件,打印收到的信息
sys.subscribe("AIRLINK_SDATA", function(data)
log.info("收到AIRLINK_SDATA!!", data)
end)
Air780EPM 主要功能代码
下列为
network_airlink.lua
文件中代码内容。
--[[
本功能模块演示的内容为:
1. 初始化网络,使得Air8101可以外挂Air780EPM实现4G联网功能
2. Air780EPM发送数据信息给Air8101
3. 订阅IP_READY事件,打印收到的信息
4. 订阅airlink的SDATA事件,打印收到的信息
]]
dnsproxy = require ("dnsproxy")
-- 初始化网络,使得Air8101可以外挂Air780EPM实现4G联网功能
sys.taskInit(function()
sys.wait(100)
-- 初始化airlink
airlink.init()
-- 创建桥接网络设备
log.info("创建桥接网络设备")
netdrv.setup(socket.LWIP_USER0, netdrv.WHALE)
-- 启动底层线程, 从机模式
airlink.start(1)
-- 配置IPv4地址
log.info("配置IPv4地址")
netdrv.ipv4(socket.LWIP_USER0, "192.168.111.2", "255.255.255.0", "192.168.111.1")
sys.wait(100)
-- 等待IP_READY事件
sys.waitUntil("IP_READY", 10000)
-- 设置NAPT
netdrv.napt(socket.LWIP_GP)
-- 设置DNS代理
dnsproxy.setup(socket.LWIP_USER0, socket.LWIP_GP)
end)
-- Air780EPM发送数据信息给Air8101
sys.taskInit(function()
while 1 do
-- 发送给对端设备
local data = rtos.bsp() .. " " .. os.date()
log.info("发送数据给对端设备", data, "当前airlink状态", airlink.ready())
airlink.sdata(data)
sys.wait(1000)
end
end)
-- 订阅IP_READY事件,打印收到的信息
sys.subscribe("IP_READY", function(id, ip)
log.info("收到IP_READY!!", id, ip)
end)
-- 订阅airlink的SDATA事件,打印收到的信息
sys.subscribe("AIRLINK_SDATA", function(data)
log.info("收到AIRLINK_SDATA!!", data)
end)
6.3.2 程序烧录
1. 参考第二、三章节完成硬件与软件环境搭建。
2. 参考如何烧录项目文件到 Air8101 开发板和如何烧录项目文件到 Air780EPM 开发板分别烧录对应程序代码。
6.3.3 现象复现
下图为Air780EPM日志输出截图。
下图为Air8101日志输出截图。
七、总结
通过该指南,用户可以很方便进行测试和使用 Air8101-4G 上网功能。