私はAJAXに少し新しくシリアルポートを使用しています。常に実行中のwhileループのPythonスクリプトからAJAX経由でHTMLにRS232データを送信しますか?
RS232ポートを介してWebサーバーにデータを送信する測定装置があります。 私のウェブサイトは常に最新のデータを表示しなければなりません。
これを達成するために、私はPyserial APIを備えたPythonスクリプトを使用しています。 測定装置は "I"コマンドで初期化し、 "M"コマンドで測定データを要求する必要があります。
私はAJAXを使用して、このpythonスクリプトをexecコマンドを実行する仲介業者のPHPファイルを250ミリ秒ごとに常時オープンしています。そしてそれは仕事を終わらせます。しかし、私は、接続を何度も何度でもやり直し、python-ajaxコミュニケーションの中間者としてphpを使用することは、非常にばかげたやり方です。
私の質問は、AJAXや他の手段でWebページに常時実行されているwhileループのpythonファイルからデータを送信できるかどうかです。
私のPythonスクリプト:rs232.py
import json
import random
import time
import serial
port = "COM3"
baudrate = 9600
ser = serial.Serial(port, baudrate,bytesize=serial.SEVENBITS,parity=serial.PARITY_EVEN, stopbits=serial.STOPBITS_ONE, timeout=1, xonxoff=True)
if ser.isOpen():
start=1;
cmd="I"
ser.write((cmd +'\r\n').encode())
out = ''
time.sleep(0.08)
while ser.inWaiting() > 0:
out += (ser.read(1)).decode()
cmd="M"
ser.write((cmd +'\r\n').encode())
out = ''
time.sleep(0.08)
while ser.inWaiting() > 0:
out += (ser.read(1)).decode()
if out != '':
my_string=out
ser.close()
new=[x.strip() for x in my_string.split(',')]
x1=float(new[-1])
D = {'x1':x1, 'start': start}
print (json.dumps(D))
マイPHP真ん中の男:rs232.php
<?php
$python="C:\........\python.exe";
$result=json_decode(exec($python.' rs232.py'), true);
$x1=$result['x1'];
$y=array("x1" => $x1);
echo json_encode($y);
?>
そして、私のjavascriptのコード:page.php
$(function() {
var repeat= function(){
$.ajax({
type: "GET",
url: "config/rs232.php",
success: function(data) {
var rs232data=JSON.parse(data);
document.getElementById("militron").innerHTML=rs232data.x1;
}
});
}
setInterval(function(){repeat()}, 250);
});
あなたはflask' 'のようなライブラリを使用してPythonのサーバーをホストすることができます。次に、1つのPythonスクリプトに2つのスレッドがあり、最初は 'pyserial'と通信し、2つ目はサーバーを実行します。もう一つの選択肢は、pythonスクリプトを常にファイルに書き込ませ、PHPでこのファイルを読むことです。あなたのウェブページは静的ですか? HTTPリクエストを使用している場合は、サーバーに 'GET'リクエストを送信し続ける必要があります。 – martianwars
PythonをインストールしたRaspberry Pi 3で動作しているサーバー。このウェブサイトは動的で、PHPを使用してさまざまな入力フォームを呼び出し、数学計算やPOSTデータをSQLデータベースに呼び出します。 私はフラスコに慣れていませんが、時々それについて聞くことを除いて、私は本当に今のところそれを避けたいと思います。ラズベリーに余分な負担をかけないこともプラスです。 私はあなたの2番目の提案が好きです。あなたは私に例をリンクしてもいいし、多分単純なものにしておくためにwhileループで乱数を生成するPythonスクリプトで作ることもできます。 – minibraun
答えを書いた、これはあなたが望んだのでしょうか? – martianwars