我拼命尝试将一些音频文件上传到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); });
如果您想知道我是否已经看到过这个post,但对OP和我都没有帮助。
我也见过this post,但是它不适合我,因为它使用tool(AmrFile Download.exe)来手动完成这项工作,因此我需要以编程方式进行。我以为如果该工具可以做到,那一定可以,但是还没有找到...
真正困扰我的是如何从计算机中找到文件,甚至在加载文件之前先读取文件的内容。
我将音频文件tts2.amr
保留在与nodejs脚本相同的目录中,因为AT命令无法向我指定仅考虑目标的源文件的路径,因此我不知道如何做到这一点,我觉得那是行不通的。
更新:
从文档中
在这里,他们提到了用于读取操作的data
参数,因此您可以获取读取的数据。
但是对于写操作,没有这样的事情,所以我很困惑。
答案 0 :(得分:1)
我认为您提到的post是正确的。在App note,第13页中,还有一个示例。
因此,在您的程序中,假设您有一个本地文件〜/ tts0.amr,大小为5030个字节, (tts2.amr是调制解调器内部的文件名)
答案 1 :(得分:0)
通过使用@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);
});
});
}
});
});
});