SIM800C GSM AT COMMAND 如何以编程方式上传 .amr 音频文件
SIM800C GSM AT COMMAND How to upload .amr audio file programmatically
我正在拼命尝试将一些音频文件上传到 SIM800C 的内存中,到目前为止这是我能够做的,但是上传的文件似乎无效,并且没有播放任何声音。但是 AT+FSLS=C:\
我可以看到文件在那里。
以下是我使用的 AT 命令:
AT+FSCREATE=tts2.amr
AT+FSWRITE=tts2.amr,0,5030,10
AT+FSLS=C:\
我制作了一个 nodeJS 程序来完成这项工作,但我对任何其他适用于 linux 的语言开放。
modem.executeCommand('AT+FSCREATE=tts2.amr',(result) => { log.debug(result); });
modem.executeCommand('AT+FSWRITE=tts2.amr,0,5030,10',(result) => { log.debug(result); });
modem.executeCommand('AT+FSLS=C:\',(result) => { log.debug(result); });
如果你想知道我已经看过这个,它对 OP 和我都没有帮助。
我还看到 this post but it doesnt suit to me, because it uses a tool (AmrFile Download.exe) 手动完成这项工作,我需要以编程方式完成。我想如果那个工具可以做到,我也可以,一定有办法,但还没有找到...
真正让我烦恼的是文件是如何从我的计算机中找到的,甚至在加载它之前就读取了它的内容。
我将音频文件 tts2.amr
保存在与 nodejs 脚本相同的目录中,因为 AT 命令显示我无法为它只考虑目标的源文件指定路径,所以我不知道如何做了,我觉得这样不行
更新:
来自文档:
这里他们提到了一个data
读取操作的参数,所以你可以得到读取的数据。
但是对于写操作没有这样的东西,所以我很困惑。
我觉得 you mentioned is right. In App note,第13页,也有例子。
所以在你的程序中,假设你有一个本地文件 ~/tts0.amr,大小为 5030 字节,
(tts2.amr 是调制解调器内的文件名)
- 读取文件
~/tts0.amr
到内存变量,例如amr_data
;
- 发送
AT+FSWRITE=tts2.amr,0,5030,10
到调制解调器,等待>
而不是OK
;
- 写
amr_data
到调制解调器,就像上面的步骤一样;
- 如果尺寸匹配,调制解调器现在应 return
OK
。
通过使用@ximingr 的回答,我想出了这段工作正常的代码。
var fs= require("fs");
let serialportgsm = require('serialport-gsm');
let modem = serialportgsm.Modem();
let serialport = serialportgsm.serialport;
serialportgsm .list((err, result) => {
// console.log(result);
})
let options = {
baudRate: 115200,
dataBits: 8,
stopBits: 1,
parity: 'none',
rtscts: false,
xon: false,
xoff: false,
xany: false,
autoDeleteOnReceive: true,
enableConcatenation: true,
incomingCallIndication: true,
incomingSMSIndication: true,
pin: '',
customInitCommand: '',
logger: console
}
modem.open('COM11', options);
modem.on('open', data => {
modem.initializeModem(function(p) {
fs.readFile('tts2.amr', function(err,amr_data) {
if(!err) {
let fsize= fs.statSync('tts2.amr').size;
modem.executeCommand('AT+FSCREATE=C:\User\tts2.amr',(result) => { log.debug(result); });
modem.executeCommand('AT+FSWRITE=C:\User\tts2.amr,0,'+fsize+',100',(result) => {
modem.port.write(amr_data);
});
});
}
});
});
});
我正在拼命尝试将一些音频文件上传到 SIM800C 的内存中,到目前为止这是我能够做的,但是上传的文件似乎无效,并且没有播放任何声音。但是 AT+FSLS=C:\
我可以看到文件在那里。
以下是我使用的 AT 命令:
AT+FSCREATE=tts2.amr
AT+FSWRITE=tts2.amr,0,5030,10
AT+FSLS=C:\
我制作了一个 nodeJS 程序来完成这项工作,但我对任何其他适用于 linux 的语言开放。
modem.executeCommand('AT+FSCREATE=tts2.amr',(result) => { log.debug(result); });
modem.executeCommand('AT+FSWRITE=tts2.amr,0,5030,10',(result) => { log.debug(result); });
modem.executeCommand('AT+FSLS=C:\',(result) => { log.debug(result); });
如果你想知道我已经看过这个
我还看到 this post but it doesnt suit to me, because it uses a tool (AmrFile Download.exe) 手动完成这项工作,我需要以编程方式完成。我想如果那个工具可以做到,我也可以,一定有办法,但还没有找到...
真正让我烦恼的是文件是如何从我的计算机中找到的,甚至在加载它之前就读取了它的内容。
我将音频文件 tts2.amr
保存在与 nodejs 脚本相同的目录中,因为 AT 命令显示我无法为它只考虑目标的源文件指定路径,所以我不知道如何做了,我觉得这样不行
更新:
来自文档:
这里他们提到了一个data
读取操作的参数,所以你可以得到读取的数据。
但是对于写操作没有这样的东西,所以我很困惑。
我觉得
所以在你的程序中,假设你有一个本地文件 ~/tts0.amr,大小为 5030 字节, (tts2.amr 是调制解调器内的文件名)
- 读取文件
~/tts0.amr
到内存变量,例如amr_data
; - 发送
AT+FSWRITE=tts2.amr,0,5030,10
到调制解调器,等待>
而不是OK
; - 写
amr_data
到调制解调器,就像上面的步骤一样; - 如果尺寸匹配,调制解调器现在应 return
OK
。
通过使用@ximingr 的回答,我想出了这段工作正常的代码。
var fs= require("fs");
let serialportgsm = require('serialport-gsm');
let modem = serialportgsm.Modem();
let serialport = serialportgsm.serialport;
serialportgsm .list((err, result) => {
// console.log(result);
})
let options = {
baudRate: 115200,
dataBits: 8,
stopBits: 1,
parity: 'none',
rtscts: false,
xon: false,
xoff: false,
xany: false,
autoDeleteOnReceive: true,
enableConcatenation: true,
incomingCallIndication: true,
incomingSMSIndication: true,
pin: '',
customInitCommand: '',
logger: console
}
modem.open('COM11', options);
modem.on('open', data => {
modem.initializeModem(function(p) {
fs.readFile('tts2.amr', function(err,amr_data) {
if(!err) {
let fsize= fs.statSync('tts2.amr').size;
modem.executeCommand('AT+FSCREATE=C:\User\tts2.amr',(result) => { log.debug(result); });
modem.executeCommand('AT+FSWRITE=C:\User\tts2.amr,0,'+fsize+',100',(result) => {
modem.port.write(amr_data);
});
});
}
});
});
});