①webブラウザに表示させたボタンをクリックすることでGPIOを入出力する(LEDを点灯消灯)
②GPIOの入力状態(スイッチでLEDを点灯消灯)をwebブラウザにリアルタイムに表示する
上記を実現するために、色々調べ、実験してきて、以下のコードにたどり着きました。
python
1testgpio.py 2#!/usr/bin/env python 3# coding:utf-8 4from websocket_server import WebsocketServer 5from time import sleep 6import RPi.GPIO as GPIO 7import time 8import subprocess 9 10cmd = [("/home/pi/dev/flask/websocket/testsub.py")] 11proc = subprocess.Popen(cmd) 12 13 14GPIO.setmode(GPIO.BCM) 15GPIO.setup(14, GPIO.OUT) 16GPIO.setup(27, GPIO.IN, GPIO.PUD_DOWN) 17 18def receivedMessage(client, server, message): 19 print(message) 20 21 if message == 'led_on': 22 GPIO.output(14, True) 23 server.send_message_to_all("Hello world! This is Raspberry Pi!") 24 25 elif message == 'led_off': 26 GPIO.output(14, False) 27 else: 28 print("Unknown Message: {}".format(message)) 29 30server = WebsocketServer(9001, host="192.168.43.57") 31server.set_fn_message_receiv 32
python
1testsub.py 2#!/usr/bin/env python 3# coding:utf-8 4from websocket_server import WebsocketServer 5from time import sleep 6import RPi.GPIO as GPIO 7import time 8 9GPIO.setmode(GPIO.BCM) 10GPIO.setup(14, GPIO.OUT) 11GPIO.setup(27, GPIO.IN, GPIO.PUD_DOWN) 12 13while True: 14 if GPIO.input(27) == 0: 15 16 print("LED消灯中") 17 time.sleep(1) 18 server = WebsocketServer(9001, host="192.168.43.57") 19 server.send_message_to_all("LED消灯中") 20 21 22 elif GPIO.input(27) == 1: 23 print("LED点灯中") 24 time.sleep(1) 25 server = WebsocketServer(9001, host="192.168.43.57") 26 server.send_message_to_all("LED消灯中") 27
html
1<html> 2<head> 3 <script src="http://code.jquery.com/jquery-latest.min.js"> 4 </script> 5 <script> 6 $(function(){ 7 var ws = new WebSocket("ws://192.168.43.57:9001/"); 8 $('#btn').on('click', function () { 9 if($('#btn').text() == "OFF") { 10 $('#btn').text("ON") 11 ws.send('led_on'); 12 } else { 13 $('#btn').text("OFF") 14 ws.send('led_off'); 15 } 16 }); 17 18 ws.onmessage = function (message) { 19 $('#test').append(message.data); 20 $('#test').css('background-color', 'red'); 21 }; 22 }) 23 </script> 24 <style> 25 #btn{ 26 width: 500px; 27 height: 200px; 28 font-size: 100px; 29 } 30 #test{ 31 display: inline-block; 32 height:40px; 33 width:1000px; 34 font-size: 40px; 35 margin-right: 500px; 36 margin-bottom: 100px; 37 margin-top: 10px; 38 } 39 #name{ 40 width: 500px; 41 height: 70px; 42 font-size: 60px; 43 margin-top: 50px; 44 } 45 </style> 46</head> 47<body> 48 <button id="btn">OFF</button> 49 <div id="name">メッセージ</div> 50 <div id="test"></div> 51 52</body> 53</html> 54
しかし、以下のエラーが出力されます。
Traceback (most recent call last):
File "/home/pi/dev/flask/websocket/testsub.py", line 19, in <module>
server = WebsocketServer(9001, host="192.168.43.57")
File "/usr/local/lib/python2.7/dist-packages/websocket_server/websocket_server.py", line 123, in init
TCPServer.init(self, (host, port), WebSocketHandler)
File "/usr/lib/python2.7/SocketServer.py", line 420, in init
self.server_bind()
File "/usr/lib/python2.7/SocketServer.py", line 434, in server_bind
self.socket.bind(self.server_address)
File "/usr/lib/python2.7/socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 98] Address already in use
①は実現できておりますが、②がどうしても実行できません。
上記エラーの解決、もしくはそもそもの正しい実現方法などのご意見を頂けないでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/31 10:53
2021/07/31 11:23
2021/08/01 07:38
2021/08/01 08:43
2021/08/01 09:31
2021/08/01 10:06
2021/08/01 10:32