<p>스위치를 누르면 눌린 스위치 정보가 컴퓨터 서버로 메세지가 오게 되어 있는데요</p> <p>스위치 하나 누르면 여러개 스위치에서 신호를 보냅니다..</p> <p>눌린 스위치에서만 동작을 해야하는데</p> <p>왜 여러 스위치에서 신호를 보내는 걸까요...?</p> <p> </p> <p> </p> <p> </p> <p> </p> <div style="color:#cccccc;background-color:#1f1f1f;font-family:Consolas, 'Courier New', monospace;font-size:14px;line-height:19px;white-space:pre;"> <div> <span style="color:#c586c0;">from</span> pythonosc.osc_server <span style="color:#c586c0;">import</span> AsyncIOOSCUDPServer </div> <div> <span style="color:#c586c0;">from</span> pythonosc.udp_client <span style="color:#c586c0;">import</span> SimpleUDPClient </div> <div> <span style="color:#c586c0;">from</span> pythonosc.dispatcher <span style="color:#c586c0;">import</span> Dispatcher </div> <div> <span style="color:#c586c0;">import</span> RPi.GPIO <span style="color:#c586c0;">as</span> GPIO </div> <div> <span style="color:#c586c0;">import</span> datetime </div> <div> <span style="color:#c586c0;">import</span> asyncio </div> <div> <span style="color:#6a9955;"># import orjson</span> </div> <div> <span style="color:#c586c0;">import</span> time </div> <br><div>SWITCHES <span style="color:#d4d4d4;">=</span> [<span style="color:#b5cea8;">13</span>, <span style="color:#b5cea8;">19</span>, <span style="color:#b5cea8;">29</span>, <span style="color:#b5cea8;">33</span>, <span style="color:#b5cea8;">40</span>]</div> <div>RELAY <span style="color:#d4d4d4;">=</span> [<span style="color:#b5cea8;">11</span>, <span style="color:#b5cea8;">12</span>, <span style="color:#b5cea8;">15</span>, <span style="color:#b5cea8;">16</span>]</div> <div>STATUS <span style="color:#d4d4d4;">=</span> {<span style="color:#ce9178;">'s0'</span>: <span style="color:#b5cea8;">0</span>, <span style="color:#ce9178;">'s1'</span>: <span style="color:#b5cea8;">0</span>, <span style="color:#ce9178;">'s2'</span>: <span style="color:#b5cea8;">0</span>, <span style="color:#ce9178;">'s3'</span>: <span style="color:#b5cea8;">0</span>, <span style="color:#ce9178;">'s4'</span>: <span style="color:#b5cea8;">0</span>, <span style="color:#ce9178;">'r0'</span>: <span style="color:#b5cea8;">0</span>, <span style="color:#ce9178;">'r1'</span>: <span style="color:#b5cea8;">0</span>, <span style="color:#ce9178;">'r2'</span>: <span style="color:#b5cea8;">0</span>, <span style="color:#ce9178;">'r3'</span>: <span style="color:#b5cea8;">0</span>}</div> <div> <span style="color:#6a9955;"># STATUS_LIST = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # s0-4, r0-3</span> </div> <div>SERVER_IP <span style="color:#d4d4d4;">=</span><span style="color:#ce9178;">'192.168.1.101'</span></div> <div>SERVER_PORT <span style="color:#d4d4d4;">=</span><span style="color:#b5cea8;">1234</span></div> <div>client <span style="color:#d4d4d4;">=</span> SimpleUDPClient(SERVER_IP, SERVER_PORT)</div> <br><br><div> <span style="color:#569cd6;">def</span><span style="color:#dcdcaa;">relay_handler</span>(<span style="color:#9cdcfe;">addr</span>, <span style="color:#9cdcfe;">args</span>): </div> <div> <span style="color:#dcdcaa;">print</span>(<span style="color:#569cd6;">f</span><span style="color:#ce9178;">"</span><span style="color:#569cd6;">{</span>addr<span style="color:#569cd6;">}</span><span style="color:#ce9178;">, </span><span style="color:#569cd6;">{</span>args<span style="color:#569cd6;">}</span><span style="color:#ce9178;">"</span>)</div> <div> relay(args)</div> <div> <span style="color:#dcdcaa;">print</span>(STATUS)</div> <div> client.send_message(<span style="color:#ce9178;">'/switch'</span>, <span style="color:#4ec9b0;">list</span>(STATUS.values()))</div> <div> <span style="color:#c586c0;">return</span></div> <br><div> <span style="color:#569cd6;">def</span><span style="color:#dcdcaa;">default_handler</span>(<span style="color:#9cdcfe;">addr</span>, <span style="color:#d4d4d4;">*</span><span style="color:#9cdcfe;">args</span>): </div> <div> <span style="color:#dcdcaa;">print</span>(<span style="color:#569cd6;">f</span><span style="color:#ce9178;">"</span><span style="color:#569cd6;">{</span>addr<span style="color:#569cd6;">}</span><span style="color:#ce9178;">, </span><span style="color:#569cd6;">{</span>args<span style="color:#569cd6;">}</span><span style="color:#ce9178;">"</span>)</div> <div> <span style="color:#c586c0;">return</span></div> <br><div> <span style="color:#569cd6;">def</span><span style="color:#dcdcaa;">toggle</span>(<span style="color:#9cdcfe;">channel</span>): </div> <div> <span style="color:#c586c0;">if</span> GPIO.input(channel) <span style="color:#d4d4d4;">==</span> GPIO.HIGH:</div> <div> STATUS[<span style="color:#569cd6;">f</span><span style="color:#ce9178;">'s</span><span style="color:#569cd6;">{</span>SWITCHES.index(channel)<span style="color:#569cd6;">}</span><span style="color:#ce9178;">'</span>] <span style="color:#d4d4d4;">=</span><span style="color:#b5cea8;">0</span></div> <div> <span style="color:#6a9955;"># STATUS_LIST[SWITCHES.index(channel)] = 0</span></div> <div> <span style="color:#c586c0;">else</span>:</div> <div> STATUS[<span style="color:#569cd6;">f</span><span style="color:#ce9178;">'s</span><span style="color:#569cd6;">{</span>SWITCHES.index(channel)<span style="color:#569cd6;">}</span><span style="color:#ce9178;">'</span>] <span style="color:#d4d4d4;">=</span><span style="color:#b5cea8;">1</span></div> <div> <span style="color:#6a9955;"># STATUS_LIST[SWITCHES.index(channel)] = 1</span></div> <div> <span style="color:#dcdcaa;">print</span>(STATUS)</div> <div> <span style="color:#6a9955;"># client.send_message('/switch', STATUS)</span></div> <div> client.send_message(<span style="color:#ce9178;">'/switch'</span>, <span style="color:#4ec9b0;">list</span>(STATUS.values()))</div> <div> <span style="color:#c586c0;">return</span></div> <br><div> <span style="color:#569cd6;">def</span><span style="color:#dcdcaa;">initialize</span>(): </div> <div> GPIO.setmode(GPIO.BOARD)</div> <div> GPIO.setup(SWITCHES, GPIO.IN, <span style="color:#9cdcfe;">pull_up_down</span><span style="color:#d4d4d4;">=</span>GPIO.PUD_UP)</div> <br><div> GPIO.setup(RELAY, GPIO.OUT)</div> <div> GPIO.output(RELAY, GPIO.HIGH) <span style="color:#6a9955;"># turn it off</span></div> <div> <span style="color:#c586c0;">for</span> SWITCH <span style="color:#c586c0;">in</span> SWITCHES:</div> <div> GPIO.add_event_detect(SWITCH, GPIO.RISING, <span style="color:#9cdcfe;">callback</span><span style="color:#d4d4d4;">=</span>toggle, <span style="color:#9cdcfe;">bouncetime</span><span style="color:#d4d4d4;">=</span><span style="color:#b5cea8;">200</span>)</div> <div> </div> <div> <span style="color:#c586c0;">return</span></div> <br><div> <span style="color:#569cd6;">def</span><span style="color:#dcdcaa;">relay</span>(<span style="color:#9cdcfe;">args</span>): </div> <div> <span style="color:#c586c0;">try</span>:</div> <div> index, action <span style="color:#d4d4d4;">=</span> args.split(<span style="color:#ce9178;">'_'</span>)</div> <div> <span style="color:#c586c0;">except</span>:</div> <div> <span style="color:#dcdcaa;">print</span>(<span style="color:#ce9178;">'WRONG MESSAGE'</span>)</div> <div> <span style="color:#c586c0;">return</span></div> <div> index <span style="color:#d4d4d4;">=</span><span style="color:#4ec9b0;">int</span>(index[<span style="color:#d4d4d4;">-</span><span style="color:#b5cea8;">1</span>])</div> <div> <span style="color:#c586c0;">if</span><span style="color:#569cd6;">f</span><span style="color:#ce9178;">'r</span><span style="color:#569cd6;">{</span>index<span style="color:#569cd6;">}</span><span style="color:#ce9178;">'</span><span style="color:#569cd6;">in</span> STATUS:</div> <div> <span style="color:#c586c0;">if</span> action <span style="color:#d4d4d4;">==</span><span style="color:#ce9178;">'0'</span>:</div> <div> STATUS[<span style="color:#569cd6;">f</span><span style="color:#ce9178;">'r</span><span style="color:#569cd6;">{</span>index<span style="color:#569cd6;">}</span><span style="color:#ce9178;">'</span>] <span style="color:#d4d4d4;">=</span><span style="color:#b5cea8;">0</span></div> <div> <span style="color:#6a9955;"># STATUS_LIST[SWITCHES.index(f'r{index}')] = 0</span></div> <div> GPIO.output(RELAY[index], GPIO.HIGH)</div> <div> <span style="color:#c586c0;">elif</span> action <span style="color:#d4d4d4;">==</span><span style="color:#ce9178;">'1'</span>:</div> <div> STATUS[<span style="color:#569cd6;">f</span><span style="color:#ce9178;">'r</span><span style="color:#569cd6;">{</span>index<span style="color:#569cd6;">}</span><span style="color:#ce9178;">'</span>] <span style="color:#d4d4d4;">=</span><span style="color:#b5cea8;">1</span></div> <div> <span style="color:#6a9955;"># STATUS_LIST[SWITCHES.index(f'r{index}')] = 1</span></div> <div> GPIO.output(RELAY[index], GPIO.LOW)</div> <div> <span style="color:#c586c0;">else</span>:</div> <div> <span style="color:#c586c0;">pass</span></div> <div> <span style="color:#c586c0;">return</span></div> <br><br><div> <span style="color:#569cd6;">async</span><span style="color:#569cd6;">def</span><span style="color:#dcdcaa;">loop</span>(): </div> <div> <span style="color:#6a9955;">"""Example main loop that only runs for 10 iterations before finishing"""</span></div> <div> <span style="color:#c586c0;">while</span><span style="color:#569cd6;">True</span>:</div> <div> <span style="color:#c586c0;">await</span> asyncio.sleep(<span style="color:#b5cea8;">0</span>)</div> <br><div> <span style="color:#569cd6;">async</span><span style="color:#569cd6;">def</span><span style="color:#dcdcaa;">init_main</span>(): </div> <div> <span style="color:#c586c0;">try</span>:</div> <div> <span style="color:#dcdcaa;">print</span>(<span style="color:#ce9178;">'Start Switch'</span>)</div> <div> initialize()</div> <div> dispatcher <span style="color:#d4d4d4;">=</span> Dispatcher()</div> <div> dispatcher.map(<span style="color:#ce9178;">'/relay'</span>, relay_handler)</div> <div> dispatcher.set_default_handler(default_handler)</div> <div> server <span style="color:#d4d4d4;">=</span> AsyncIOOSCUDPServer((<span style="color:#ce9178;">'0.0.0.0'</span>, <span style="color:#b5cea8;">1337</span>), dispatcher, asyncio.get_event_loop())</div> <br><div> transport, protocol <span style="color:#d4d4d4;">=</span><span style="color:#c586c0;">await</span> server.create_serve_endpoint() <span style="color:#6a9955;"># Create datagram endpoint and start serving</span></div> <div> <span style="color:#c586c0;">await</span> loop() <span style="color:#6a9955;"># Enter main loop of program</span></div> <div> <span style="color:#c586c0;">finally</span>:</div> <div> GPIO.cleanup()</div> <div> <span style="color:#dcdcaa;">print</span>(<span style="color:#ce9178;">'Finishing'</span>)</div> <div> transport.close() <span style="color:#6a9955;"># Clean up serve endpoint</span></div> <br><br><br><div>asyncio.run(init_main())</div> </div> <p> </p> <p> </p> <p> </p> <p> <img src="http://thimg.todayhumor.co.kr/upfile/202306/168683637549ad7c09373e45f9abe2f2568f742288__mn806048__w800__h1008__f74685__Ym202306.png" alt="11.PNG" style="width:800px;height:1008px;" filesize="74685"></p> <p> <img src="http://thimg.todayhumor.co.kr/upfile/202306/16868363759594113c1b3348ceb0b044b7229a7c27__mn806048__w800__h1003__f61540__Ym202306.png" alt="111.PNG" style="width:800px;height:1003px;" filesize="61540"></p>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.