シリアルポートを介してラズベリーパイに接続されたマイクロプロセッサで構成されるシステムがあります。ラズベリー pi は node-serialport を使用して node.js を実行し、Web ベースのユーザー インターフェイスを提供します。
Web インターフェイス経由で serialport に書き込もうとすると、マイクロコントローラから応答が返るまでに長い遅延 (10 秒から数分) が発生することがよくあります。つまり、serialport.write が何らかの形で遅れているということです。(エラーは表示されず、ポートも閉じられません..)これは、6番目のシリアルポート書き込みの後にかなり一貫して発生します..ブラウザをリロードすると、7番目のリクエストまで正常に動作します..
これは、node.js でシリアルポートを開いてデータをプッシュするためのルーチンです。
var myPort = new SerialPort("/dev/ttyAMA0", {
baudrate: 38400,
parser: serialport.parsers.readline("\n")
});
app.post('/sendtoavr', function(req, res) {
myPort.write(req.body.cmd);
});
myPort.on('close', function(err) {
console.log('node-serialport closed!!!');
});
myPort.on('error', function(err) {
console.log('node-serialport error!!!');
});
そして、http post リクエストを rpi に送信するためのこの jquery ルーチン:
$("#btnSearchTempSensors").click(function() {
var strCMD = String.fromCharCode(84) + String.fromCharCode(83) + String.fromCharCode(13);
$.post('/sendtoavr', {cmd: strCMD});
});
Chrome でネットワーク コンソールを見ると、http ポスト リクエストがすぐに送信されるように見えます。ssh 経由で minicom 経由でコマンドをマイクロコントローラに送信すると、まったく問題はありません。
したがって、node-serialport または node.js が疑われますが、さらに掘り下げるにはどうすればよいですか?
誰でもアイデアはありますか?