①webブラウザに表示させたボタンをクリックすることでGPIOを入出力する(LEDを点灯消灯)
②GPIOの入力状態(スイッチでLEDを点灯消灯)をwebブラウザにリアルタイムに表示する
上記の動作を同一プロセスで実現したく、threadingを使用して試みました。
しかし下記のようなエラーとなり、うまく動きませんでした。
Traceback (most recent call last):
File "threadgpio.py", line 74, in <module>
thread1 = threading.Thread(target=sendMessage, args=((client, server)))
NameError: name 'client' is not defined
def sendMessage(client, server1):
def receivedMessage(client, server2, message):
上記のコールバック関数の引数を、threadに渡せてないようです。
どのようにすれば引数をthreadに渡すことができるでしょうか。
python
1#!/usr/bin/env python 2# coding:utf-8 3from websocket_server import WebsocketServer 4from time import sleep 5import RPi.GPIO as GPIO 6import subprocess 7import threading 8from threading import Thread 9 10 11GPIO.setmode(GPIO.BCM) 12GPIO.setup(14, GPIO.OUT) 13GPIO.setup(27, GPIO.IN, GPIO.PUD_DOWN) 14 15 16def sendMessage(client, server1): 17 18 while True: 19 if GPIO.input(27) == 0: 20 21 #print("LED消灯中") 22 time.sleep(0.1) 23 server1.send_message_to_all("LED消灯中") 24 25 26 elif GPIO.input(27) == 1: 27 28 #print("LED点灯中") 29 time.sleep(0.1) 30 server1.send_message_to_all("LED点灯中") 31 32server1 = WebsocketServer(9002, host="192.168.43.57") 33server1.set_fn_new_client(sendMessage) 34server1.run_forever() 35 36def receivedMessage(client, server2, message): 37 print(message) 38 39 try: 40 41 if message == 'led_on': 42 GPIO.output(14, True) 43 44 45 elif message == 'led_off': 46 GPIO.output(14, False) 47 48 49 except KeyboardInterrupt: 50 GPIO.cleanup() 51 52server2 = WebsocketServer(9001, host="192.168.43.57") 53server2.set_fn_message_received(receivedMessage) 54server2.run_forever() 55 56thread1 = threading.Thread(target=sendMessage, args=((client, server))) 57thread2 = threading.Thread(target=receivedMessage, args=((client, server, message))) 58thread1.start() 59thread2.start() 60thread1.join() 61thread2.join()
html
1<html> 2<head> 3 <script src="http://code.jquery.com/jquery-latest.min.js"> 4 </script> 5 <meta charset="UTF-8"> 6 <script> 7 $(function(){ 8 var ws1 = new WebSocket("ws://192.168.43.57:9001/"); 9 var ws2 = new WebSocket("ws://192.168.43.57:9002/"); 10 var ws3 = new WebSocket("ws://192.168.43.57:9003/"); 11 12 $('#btn1').on('click', function () { 13 if($('#btn1').text() == "OFF") { 14 $('#btn1').text("ON") 15 ws1.send('led_on'); 16 } else { 17 $('#btn1').text("OFF") 18 ws1.send('led_off'); 19 } 20 }); 21 22 ws2.onmessage = function (message) { 23 //('#test').append(message.data); 24 if (message.data == 'LED点灯中') { 25 $('#test').css('background-color', 'red'); 26 } else { 27 $('#test').css('background-color', 'black'); 28 } 29 }; 30 31 $('#btn2').on('click', function () { 32 ws1.send('csv出力'); 33 34 }); 35 36 ws1.onmessage = function (message) { 37 ('#test').append(message.data); 38 39 }; 40 }); 41 42 </script> 43 <style> 44 #btn1{ 45 width: 500px; 46 height: 100px; 47 font-size: 80px; 48 } 49 50 #test{ 51 display: inline-block; 52 background-color: black; 53 height:100px; 54 width:100px; 55 border-radius:50%; 56 margin-right: 500px; 57 margin-bottom: 100px; 58 margin-top: 10px; 59 } 60 61 #name{ 62 width: 500px; 63 height: 70px; 64 font-size: 60px; 65 } 66 67 #btn2{ 68 width: 500px; 69 height: 100px; 70 font-size: 80px; 71 } 72 </style> 73</head> 74<body> 75 <button id="btn1">OFF</button> 76 <div id="name">LED状態</div> 77 <div id="test"></div> 78 <button id="btn2">csv出力</button> 79</body> 80</html>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/30 11:08
2021/08/30 11:28 編集
2021/08/30 12:46