編集#2:だから何だと思いますか、私はもうすぐそこにいます!プログラミングに関する限り、私は最後の問題と思われるものに直面しています。これは実際には非常に興味深いことです。問題は、次のコード、私の JavaScript 関数にあります。私は通常、非常に簡単に解決できると思われる問題について投稿することはありませんが、ここで何が起こっているのか本当にわかりません。
問題は、更新機能の最初の状態にあるようです。alert('hey'); という行を参照してください。? その行を消去すると、なんらかの理由でアクション関数に何も送信されません。Arduinoやコンソールにも...何も起こりません。私がそれを呼ぶのが好きなように、それは絶対に魅力的です。何も思いつきません。おそらく、alert() が arduino の出力を読み取るために必要な何らかの遅延を作成したのではないかと思いましたが、setTimeout で遅延を作成しても、何も起こりません。それは信じられないです。
もう一度だけ: アラートがなければ、アクション関数は呼び出されません。関数が呼び出された場合に何かを出力するようにして確認しました。何も印刷されません。呼ばれていないだけです。しかし、アラートを使用すると、関数が呼び出され、arduino が LED をオンにします。
説明はありますか?これが私のコードです:
function update(command=0) {
// if command send it
if (command!=0) {
$.getJSON('/action?command='+command);
alert('hey');
}
// read no matter what
$.getJSON('/read', {}, function(data) {
if (data.state != 'failure' && data.content != '') {
$('.notice').text(data.content);
$('.notice').hide().fadeIn('slow');
setTimeout(function () { $('.notice').fadeOut(1000); }, 1500);
}
setTimeout(update, 5000);
});
}
update();
Arduino を制御するために、任意のコンピューターからアクセスできる Web インターフェイスを作成しようとしています。私は近づいています。私の問題の 1 つは、次のコードを使用して、ボタンを押して Arduino にコマンドを送信すると、Arduino がそれを取得し ( LEDが設定どおりに点滅します)、メッセージを送信し、Pythonスクリプトが取得することです。データは表示されますが、正しく表示されません。文字列に一部の文字が欠落しておりindex.html
、期待どおりに返されません。
基本的に、ボタンが押されると関数が呼び出され、結果が生成された関数とは別の関数で関数の結果を返す必要があります。
コードは次のとおりです。
# -*- coding: utf-8 -*-
import cherrypy, functools, json, uuid, serial, threading, webbrowser, time
try:
ser = serial.Serial('COM4', 9600)
time.sleep(2)
ser.write('1')
except:
print('Arduino not detected. Moving on')
INDEX_HTML = open('index.html', 'r').read()
def timeout(func, args = (), kwargs = {}, timeout_duration = 10, default = None):
class InterruptableThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.result = default
def run(self):
self.result = func(*args, **kwargs)
it = InterruptableThread()
it.start()
it.join(timeout_duration)
if it.isAlive():
return it.result
else:
return it.result
def get_byte(useless):
return ser.read().encode('Utf-8')
def json_yield(command):
@functools.wraps(command)
def _(self, command):
if (command == 'Turn the LED on'):
ser.write('2')
time.sleep(2)
print('wrote to port')
print('ok, ok')
try:
m = ''
while 1:
print('reading...')
byte = timeout(get_byte, ('none',), timeout_duration = 5)
if byte == '*' or byte == None: break
m = m + byte
content = m
time.sleep(1)
return json.dumps({'state': 'ready', 'content':content})
except StopIteration:
return json.dumps({'state': 'done', 'content': None})
return _
class DemoServer(object):
@cherrypy.expose
def index(self):
return INDEX_HTML
@cherrypy.expose
@json_yield
def yell(self):
yield 'nothing'
@cherrypy.expose
@json_yield
def command(self):
yield 'nothing'
if __name__ == '__main__':
t = threading.Timer(0.5, webbrowser.open, args=('http://localhost:8080',))
t.daemon = True
t.start()
cherrypy.quickstart(DemoServer(), config='config.conf')