2014-04-19 64 views
3

我需要通過串口COM1端口連接PC的GSM設備發送短信。NodeJS:通過串口連接的GSM設備發送短信

我雖然能夠接收短信,但當我試圖發送短信時,另一方根本沒有收到短信。當我嘗試通過超級終端連接GSM設備併發送命令發送短信時,它工作正常。以下是我的代碼:

var SerialPort = require("serialport").SerialPort 
    var serialPort = new SerialPort("COM1", { 
     baudrate: 9600, dataBits: 8, parity: 'none', stopBits: 1, flowControl: false, xon : false, rtscts:false, xoff:false, xany:false, buffersize:0 
    }); 

    serialPort.on("open", function() { 
    console.log('Serial communication open'); 
      serialPort.write("AT+CMGF=1"); 
      serialPort.write('\r'); 
      delay(10); 
      serialPort.write("AT+CNMI=2,2,0,0,0"); 
      serialPort.write('\r'); 
      delay(10); 
     serialPort.on('data', function(data) { 
      gsm_message_sending(serialPort, "S", "1111111111"); //valid number only 
    }); 
}); 

function gsm_message_sending(serial,message,phone_no) 
{ 
    serial.write("AT+CMGF=1"); 
    delay(100); // a simple for loop 
    serial.write("AT+CNMI=2,2,0,0,0"); 
    serial.write('\r'); 
    delay(200); 
    serial.write("AT+CMGS=\"+91"); 
    serial.write(phone_no); 
    serial.write('"') 
    serial.write('\r'); 
    serial.write(message); 
    //Now I have to send two time consecutively Ctrl+Z or char - 26 
    //I am assuming that maybe cause of below code SMS are not being send 
    // Method 1 : 
    // serial.write(String.fromCharCode(26)) 
    //serial.write(String.fromCharCode(26)) 
    //Method 2 
    //serial.write(Buffer([0x1A])); 
    //serial.write(Buffer([0x1A])); 
    //serial.write('^z'); 
    //serial.write('^z'); 
} 

我不知道我在做什麼錯或爲什麼短信不出去?

+0

嘗試刪除你的阻塞延誤,創建一個命令(行)發送隊列,並建立從這個隊列讀取併發送的100ms超時(或任何你想要的長度)。我不知道你在使用這個同步延遲,但它可能會阻塞你的串口庫。另外,安裝虛擬串行端口實用程序,以便可以捕獲應用程序與硬件之間的通信,以便更輕鬆地進行調試。 – Brad

+0

我評論了所有的延遲,延遲是一個簡單的for循環計數器的參數通過。不幸的是,它仍然沒有解決。我覺得我無法發送CTRL + Z到串口 - 可能是這個問題 – Prakash

+0

你的'Buffer([0x1a])'方法是正確的。再次,如果不能看到線路上發生了什麼,就很難調試。使用虛擬串行端口驅動程序。 – Brad

回答

0

你的腳本

var SerialPort = require("serialport").SerialPort 
var serialPort = new SerialPort("/dev/ttyUSB0", { 
    baudrate: 9600, dataBits: 8, parity: 'none', stopBits: 1, flowControl: false, xon : false, rtscts:false, xoff:false, xany:false, buffersize:0 
}); 

serialPort.on("open", function() { 
    console.log('Serial communication open'); 
    serialPort.write("AT^SYSCFG=13,1,3FFFFFFF,2,4"); 
    serialPort.write('\r'); 
    serialPort.on('data', function(data) { 
     console.log("Received data: " + data); 
    }); 
    gsm_message_sending(serialPort, "test2", "<you phone number>"); 
}); 

function gsm_message_sending(serial, message, phone_no) { 
    serial.write("AT+CMGF=1"); 
    serial.write('\r'); 
    serial.write("AT+CMGS=\""); 
    serial.write(phone_no); 
    serial.write('"') 
    serial.write('\r'); 
    serial.write(message); 
    serial.write(Buffer([0x1A])); 
    serial.write('^z'); 
} 

作品完美的我與E3131調制解調器。 正如你所看到的,我改了一下劇本,使其只發一個短信,並打印消息:

Received data: AT^SYSCFG=13,1,3FFFFFFF,2,4 
Received data: 
OK 

Received data: AT+CMGF=1 
Received data: 
OK 

Received data: AT+CMGS=" 
Received data: 0671358943 
Received data: " 
Received data: 
> 
Received data: test2 
Received data: 
Received data: ^z 
Received data: 
+CMGS: 28 

OK 
0

嘗試:在Ubuntu

sudo nodejs yourfilejs.js 

如果沒有sudo會引發錯誤 '權限被拒絕'