跳转至

02 短消息(sms)

作者:沈园园

一、SMS 简介

SMS(短消息服务,Short Message Service)功能主要用于在蜂窝网络中传输短消息。

移动,联通卡不需开通 VOLTE 可以支持短信功能。

在 4G 网络中,短信可以在数据传输的同时进行,不会因数据业务占用网络资源而被延迟或阻塞。

二、演示功能概述

本 demo 演示了 sms 功能。

三、硬件准备

3.1 Air8201工业引擎

使用 Air8201 工业引擎,如下图所示:

点击链接购买:合宙Air8201工业引擎淘宝购买链接

此工业引擎的详细使用说明参考:Air8201 产品手册

3.2 SIM 卡

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

3.3 PC 电脑

请准备一台配备 USB 接口且能够正常上网的电脑。

电脑操作系统为:WIN10以及以上版本的WINDOWS系统。

3.4 数据通信线

USB 数据线.

四、软件环境

4.1 Luatools 工具

要想烧录 LuatOS 固件到 4G 工业引擎中,需要用到合宙的强大的调试工具:Luatools;

详细使用说明参考:Luatools 工具使用说明 .

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

  • 一键获取最新固件:自动连接合宙服务器,轻松下载最新的合宙工业引擎固件.
  • 固件与脚本烧录:便捷地将固件及脚本文件烧录至目标工业引擎中.
  • 串口日志管理:实时查看工业引擎通过串口输出的日志信息,并支持保存功能.
  • 串口调试助手:提供简洁的串口调试界面,满足基本的串口通信测试需求.

Luatools 下载之后, 无需安装, 解压到你的硬盘,点击 Luatools_v3.exe 即可运行.

4.2 准备需要烧录的代码

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

4.2.1 烧录的底层固件文件you

官网下载,底层 core 下载地址:LuatOS 底层 core 注:本 demo 使用如图所示固件

4.2.2 烧录的脚本代码

首先要下载 Air8201 的 LuatOS 示例代码到一个合适的项目目录,示例代码网站: LuatOS-Air8201LuatOS源码

下载流程参考下图:

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

4.2.3 API 说明

五、代码示例介绍

只需要调用 sms.send()函数,填入对方手机号和消息内容即可。

通过设置回调函数。或者订阅发送完成的系统消息,来进行发送完成的处理。

本 demo 的效果是给服务商发短信消息,查询话费信息。

6.1 发送短信

-- 发送短信, 直接调用sms.send就行, 是不是task无所谓
sys.taskInit(function()
    sys.wait(10000)
    -- 中移动卡查短信
    -- sms.send("+8610086", "301")
    -- 联通卡查话费
    sms.send("10010", "101")
end)

6.2 接收短信

接收短信后进入回调函数

-- 接收短信后的回调函数
function sms_handler(num, txt)
    -- num 手机号码
    -- txt 文本内容
    log.info("sms", num, txt, txt:toHex())

    -- http演示1, 发json
    local body = json.encode({phone=num, txt=txt})
    local headers = {}
    headers["Content-Type"] = "application/json"
    log.info("json", body)
    http_post("http://www.luatos.com/api/sms/blackhole", headers, body)
    -- http演示2, 发表单的
    headers = {}
    headers["Content-Type"] = "application/x-www-form-urlencoded"
    local body = string.format("phone=%s&txt=%s", num:urlEncode(), txt:urlEncode())
    log.info("params", body)
    http_post("http://www.luatos.com/api/sms/blackhole", headers, body)
    -- http演示3, 不需要headers,直接发
    http_post("http://www.luatos.com/api/sms/blackhole", nil, num .. "," .. txt)
    -- 如需发送到钉钉, 参考 demo/dingding
    -- 如需发送到飞书, 参考 demo/feishu
end

--------------------------------------------------------------------
-- 接收短信, 支持多种方式, 选一种就可以了
-- 1\. 设置回调函数
--sms.setNewSmsCb(sms_handler)
-- 2\. 订阅系统消息
--sys.subscribe("SMS_INC", sms_handler)
-- 3\. 在task里等着
sys.taskInit(function()
    while 1 do
        local ret, num, txt = sys.waitUntil("SMS_INC", 300000)
        if num then
            -- 方案1, 交给自定义函数处理
            sms_handler(num, txt)
            -- 方案2, 因为这里是task内, 可以直接调用http.request
            -- local body = json.encode({phone=num, txt=txt})
            -- local headers = {}
            -- headers["Content-Type"] = "application/json"
            -- log.info("json", body)
            -- local code, headers, body = http.request("POST", "http://www.luatos.com/api/sms/blackhole", headers, body).wait()
            -- log.info("resp", code)
        end
    end
end)

七、功能验证

成功发送短信。

八、总结

本示例介绍了如何发送短消息服务。

常见问题

1、物联网卡支持短信功能吗?

一般来说,物联网卡是不支持短信功能的,具体需要咨询物联网卡供应商。

2、支持移动、电信,联通卡的短信功能吗?

1,对于电信卡来说,SMS短信功能跟核心库CC(VoLTE通话)是伴生关系,只有支持CC核心库的固件才支持电信卡的SMS短信功能;

2,对于移动/联通卡来说,SMS短信功能合宙所有全网通4G模组都默认支持;

3,对于某些只支持单一运营商的型号,比如只支持移动运营商的Air700ECH/Air700ECT,则相应的也只支持移动卡的SMS短信功能;

4,有些流量卡可能没有开通SMS短信功能,请咨询卡商或运营商确认,无法确认时建议用自己的手机卡测试确认;

5,再次提醒!由于合宙二次开发型号模组支持多种固件版本,使用电信卡SMS短信功能时请务必选择同时支持CC(VoLTE通话)的固件版本;

3、是否支持彩信功能

不支持

4、短信功能发送英文短信、 中文短信,分别怎么发? 发长短信怎么发?

发送英文短信、中文短信、中英文混合短信在可在短信功能部分添加如下log.info语句:

sys.taskInit(function()
    sys.wait(10000)
    -- 中移动卡查短信
    -- sms.send("+8610086", "301")
    -- 联通卡查话费
    sms.send("10010", "101")

    log.info("英文短信",sms.send("num", "TEST"))
    sys.wait(5000)
    log.info("中文短信",sms.send("num", "你好"))
    sys.wait(5000)
    log.info("中英文混合",sms.send("num", "你好test"))

end)

发送长短信可在文本部分填入,最长可发160字节文本。