SIM800C GSM AT COMMAND如何以编程方式上传.amr音频文件

时间:2019-07-06 12:35:59

标签: file-upload filepath gsm at-command sim800

我拼命尝试将一些音频文件上传到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命令无法向我指定仅考虑目标的源文件的路径,因此我不知道如何做到这一点,我觉得那是行不通的。

更新:


从文档中

enter image description here enter image description here

在这里,他们提到了用于读取操作的data参数,因此您可以获取读取的数据。 但是对于写操作,没有这样的事情,所以我很困惑。

2 个答案:

答案 0 :(得分:1)

我认为您提到的post是正确的。在App note,第13页中,还有一个示例。

因此,在您的程序中,假设您有一个本地文件〜/ tts0.amr,大小为5030个字节, (tts2.amr是调制解调器内部的文件名)

  1. 将文件〜/ tts0.amr读取到内存变量中,例如用于检查的amr_data;
  2. 发送“ AT + FSWRITE = tts2.amr,0,5030,10”到调制解调器,等待“>”而不是“ OK”;
  3. 将amr_data写入调制解调器,就像上面的步骤一样;
  4. 如果大小匹配,调制解调器应立即返回“ OK”。

答案 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);
                });
             });
            }
        });     
    });

});