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字节文本。