<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><span style="color:#4ec9b0;">pythonosc</span>.<span style="color:#4ec9b0;">osc_server</span><span style="color:#c586c0;">import</span><span style="color:#4ec9b0;">AsyncIOOSCUDPServer</span> </div> <div> <span style="color:#c586c0;">from</span><span style="color:#4ec9b0;">pythonosc</span>.<span style="color:#4ec9b0;">udp_client</span><span style="color:#c586c0;">import</span><span style="color:#4ec9b0;">SimpleUDPClient</span> </div> <div> <span style="color:#c586c0;">from</span><span style="color:#4ec9b0;">pythonosc</span>.<span style="color:#4ec9b0;">dispatcher</span><span style="color:#c586c0;">import</span><span style="color:#4ec9b0;">Dispatcher</span> </div> <div> <span style="color:#c586c0;">import</span><span style="color:#4ec9b0;">RPi</span>.<span style="color:#4ec9b0;">GPIO</span><span style="color:#c586c0;">as</span><span style="color:#4ec9b0;">GPIO</span> </div> <div> <span style="color:#c586c0;">import</span><span style="color:#4ec9b0;">datetime</span> </div> <div> <span style="color:#c586c0;">import</span><span style="color:#4ec9b0;">asyncio</span> </div> <div> <span style="color:#6a9955;"># import orjson</span> </div> <div> <span style="color:#c586c0;">import</span><span style="color:#4ec9b0;">time</span> </div> <br><br><div> <span style="color:#4fc1ff;">SWITCHES</span><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> <span style="color:#4fc1ff;">RELAY</span><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> <span style="color:#4fc1ff;">STATUS</span><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> <span style="color:#4fc1ff;">SERVER_IP</span><span style="color:#d4d4d4;">=</span><span style="color:#ce9178;">'192.168.1.136'</span> </div> <div> <span style="color:#4fc1ff;">SERVER_PORT</span><span style="color:#d4d4d4;">=</span><span style="color:#b5cea8;">1234</span> </div> <div> <span style="color:#9cdcfe;">client</span><span style="color:#d4d4d4;">=</span><span style="color:#4ec9b0;">SimpleUDPClient</span>(<span style="color:#4fc1ff;">SERVER_IP</span>, <span style="color:#4fc1ff;">SERVER_PORT</span>) </div> <div> <span style="color:#4fc1ff;">PRINT</span><span style="color:#d4d4d4;">=</span><span style="color:#ce9178;">''</span> </div> <div> <span style="color:#4fc1ff;">VAR</span><span style="color:#d4d4d4;">=</span><span style="color:#b5cea8;">0</span> </div> <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><span style="color:#9cdcfe;">addr</span><span style="color:#569cd6;">}</span><span style="color:#ce9178;">, </span><span style="color:#569cd6;">{</span><span style="color:#9cdcfe;">args</span><span style="color:#569cd6;">}</span><span style="color:#ce9178;">"</span>)</div> <div> <span style="color:#dcdcaa;">relay</span>(<span style="color:#9cdcfe;">args</span>)</div> <div> <span style="color:#dcdcaa;">print</span>(<span style="color:#4fc1ff;">STATUS</span>)</div> <div> <span style="color:#6a9955;"># client.send_message('/switch', list(STATUS.values()))</span></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><span style="color:#9cdcfe;">addr</span><span style="color:#569cd6;">}</span><span style="color:#ce9178;">, </span><span style="color:#569cd6;">{</span><span style="color:#9cdcfe;">args</span><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><span style="color:#4ec9b0;">GPIO</span>.input(<span style="color:#9cdcfe;">channel</span>) <span style="color:#d4d4d4;">==</span><span style="color:#4ec9b0;">GPIO</span>.HIGH:</div> <div> <span style="color:#4fc1ff;">STATUS</span>[<span style="color:#569cd6;">f</span><span style="color:#ce9178;">'s</span><span style="color:#569cd6;">{</span><span style="color:#4fc1ff;">SWITCHES</span>.<span style="color:#dcdcaa;">index</span>(<span style="color:#9cdcfe;">channel</span>)<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;">elif</span><span style="color:#4ec9b0;">GPIO</span>.input(<span style="color:#9cdcfe;">channel</span>) <span style="color:#d4d4d4;">==</span><span style="color:#4ec9b0;">GPIO</span>.LOW:</div> <div> <span style="color:#4fc1ff;">STATUS</span>[<span style="color:#569cd6;">f</span><span style="color:#ce9178;">'s</span><span style="color:#569cd6;">{</span><span style="color:#4fc1ff;">SWITCHES</span>.<span style="color:#dcdcaa;">index</span>(<span style="color:#9cdcfe;">channel</span>)<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:#c586c0;">else</span>:</div> <div> <span style="color:#4fc1ff;">STATUS</span>[<span style="color:#569cd6;">f</span><span style="color:#ce9178;">'s</span><span style="color:#569cd6;">{</span><span style="color:#4fc1ff;">SWITCHES</span>.<span style="color:#dcdcaa;">index</span>(<span style="color:#9cdcfe;">channel</span>)<span style="color:#569cd6;">}</span><span style="color:#ce9178;">'</span>] <span style="color:#d4d4d4;">=</span><span style="color:#b5cea8;">2</span></div> <br><div> <span style="color:#4fc1ff;">PRINT</span><span style="color:#d4d4d4;">=</span><span style="color:#4ec9b0;">str</span>(<span style="color:#4fc1ff;">SWITCHES</span>.<span style="color:#dcdcaa;">index</span>(<span style="color:#9cdcfe;">channel</span>))</div> <div> <span style="color:#4fc1ff;">VAR</span><span style="color:#d4d4d4;">=</span><span style="color:#4ec9b0;">str</span>(<span style="color:#4fc1ff;">STATUS</span>[<span style="color:#569cd6;">f</span><span style="color:#ce9178;">'s</span><span style="color:#569cd6;">{</span><span style="color:#4fc1ff;">SWITCHES</span>.<span style="color:#dcdcaa;">index</span>(<span style="color:#9cdcfe;">channel</span>)<span style="color:#569cd6;">}</span><span style="color:#ce9178;">'</span>])</div> <br><div> <span style="color:#dcdcaa;">print</span>(<span style="color:#4fc1ff;">STATUS</span>)</div> <div> <span style="color:#6a9955;"># client.send_message('/switch', STATUS)</span></div> <div> <span style="color:#6a9955;"># client.send_message('/switch', list(STATUS.values()))</span></div> <div> <span style="color:#6a9955;"># client.send_message('/switch', 's'+ str(SWITCHES.index(channel))+str(STATUS[f's{SWITCHES.index(channel)}']))</span></div> <div> <span style="color:#6a9955;"># client.send_message('/switch', 's'+ str(SWITCHES.index(channel)))</span></div> <div> <span style="color:#9cdcfe;">client</span>.<span style="color:#dcdcaa;">send_message</span>(<span style="color:#ce9178;">'/switch'</span>, <span style="color:#ce9178;">'s'</span><span style="color:#d4d4d4;">+</span><span style="color:#4fc1ff;">PRINT</span><span style="color:#d4d4d4;">+</span><span style="color:#4fc1ff;">VAR</span>)</div> <br><div> <span style="color:#6a9955;"># time.sleep(1)</span></div> <br><br><div> <span style="color:#c586c0;">return</span></div> <br><br><div> <span style="color:#569cd6;">def</span><span style="color:#dcdcaa;">initialize</span>(): </div> <div> <span style="color:#4ec9b0;">GPIO</span>.setmode(<span style="color:#4ec9b0;">GPIO</span>.BOARD)</div> <div> <span style="color:#4ec9b0;">GPIO</span>.setup(<span style="color:#4fc1ff;">SWITCHES</span>, <span style="color:#4ec9b0;">GPIO</span>.IN, <span style="color:#9cdcfe;">pull_up_down</span><span style="color:#d4d4d4;">=</span><span style="color:#4ec9b0;">GPIO</span>.PUD_UP)</div> <div> </div> <br><div> <span style="color:#4ec9b0;">GPIO</span>.setup(<span style="color:#4fc1ff;">RELAY</span>, <span style="color:#4ec9b0;">GPIO</span>.OUT)</div> <div> <span style="color:#4ec9b0;">GPIO</span>.output(<span style="color:#4fc1ff;">RELAY</span>, <span style="color:#4ec9b0;">GPIO</span>.HIGH) <span style="color:#6a9955;"># turn it off</span></div> <div> <span style="color:#c586c0;">for</span><span style="color:#4fc1ff;">SWITCH</span><span style="color:#c586c0;">in</span><span style="color:#4fc1ff;">SWITCHES</span>:</div> <div> <span style="color:#4ec9b0;">GPIO</span>.add_event_detect(<span style="color:#4fc1ff;">SWITCH</span>, <span style="color:#4ec9b0;">GPIO</span>.RISING, <span style="color:#9cdcfe;">callback</span><span style="color:#d4d4d4;">=</span><span style="color:#dcdcaa;">toggle</span>, <span style="color:#9cdcfe;">bouncetime</span><span style="color:#d4d4d4;">=</span><span style="color:#b5cea8;">200</span>)</div> <br><br><div> <span style="color:#c586c0;">return</span></div> <br><br><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> <span style="color:#9cdcfe;">index</span>, <span style="color:#9cdcfe;">action</span><span style="color:#d4d4d4;">=</span><span style="color:#9cdcfe;">args</span>.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> <span style="color:#9cdcfe;">index</span><span style="color:#d4d4d4;">=</span><span style="color:#4ec9b0;">int</span>(<span style="color:#9cdcfe;">index</span>[<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><span style="color:#9cdcfe;">index</span><span style="color:#569cd6;">}</span><span style="color:#ce9178;">'</span><span style="color:#569cd6;">in</span><span style="color:#4fc1ff;">STATUS</span>:</div> <div> <span style="color:#c586c0;">if</span><span style="color:#9cdcfe;">action</span><span style="color:#d4d4d4;">==</span><span style="color:#ce9178;">'0'</span>:</div> <div> <span style="color:#4fc1ff;">STATUS</span>[<span style="color:#569cd6;">f</span><span style="color:#ce9178;">'r</span><span style="color:#569cd6;">{</span><span style="color:#9cdcfe;">index</span><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> <span style="color:#4ec9b0;">GPIO</span>.output(<span style="color:#4fc1ff;">RELAY</span>[<span style="color:#9cdcfe;">index</span>], <span style="color:#4ec9b0;">GPIO</span>.HIGH)</div> <div> <span style="color:#c586c0;">elif</span><span style="color:#9cdcfe;">action</span><span style="color:#d4d4d4;">==</span><span style="color:#ce9178;">'1'</span>:</div> <div> <span style="color:#4fc1ff;">STATUS</span>[<span style="color:#569cd6;">f</span><span style="color:#ce9178;">'r</span><span style="color:#569cd6;">{</span><span style="color:#9cdcfe;">index</span><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> <span style="color:#4ec9b0;">GPIO</span>.output(<span style="color:#4fc1ff;">RELAY</span>[<span style="color:#9cdcfe;">index</span>], <span style="color:#4ec9b0;">GPIO</span>.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:#9cdcfe;">client</span>.<span style="color:#dcdcaa;">send_message</span>(<span style="color:#ce9178;">'/allswitch'</span>, <span style="color:#4ec9b0;">list</span>(<span style="color:#4fc1ff;">STATUS</span>.<span style="color:#dcdcaa;">values</span>()))</div> <div> <span style="color:#c586c0;">await</span><span style="color:#4ec9b0;">asyncio</span>.<span style="color:#dcdcaa;">sleep</span>(<span style="color:#b5cea8;">0</span>)</div> <div> </div> <br><br><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> <span style="color:#dcdcaa;">initialize</span>()</div> <div> <span style="color:#9cdcfe;">dispatcher</span><span style="color:#d4d4d4;">=</span><span style="color:#4ec9b0;">Dispatcher</span>()</div> <div> <span style="color:#9cdcfe;">dispatcher</span>.<span style="color:#dcdcaa;">map</span>(<span style="color:#ce9178;">'/relay'</span>, <span style="color:#dcdcaa;">relay_handler</span>)</div> <div> <span style="color:#9cdcfe;">dispatcher</span>.<span style="color:#dcdcaa;">set_default_handler</span>(<span style="color:#dcdcaa;">default_handler</span>)</div> <div> <span style="color:#9cdcfe;">server</span><span style="color:#d4d4d4;">=</span><span style="color:#4ec9b0;">AsyncIOOSCUDPServer</span>((<span style="color:#ce9178;">'0.0.0.0'</span>, <span style="color:#b5cea8;">1337</span>), <span style="color:#9cdcfe;">dispatcher</span>, <span style="color:#4ec9b0;">asyncio</span>.<span style="color:#dcdcaa;">get_event_loop</span>())</div> <br><div> <span style="color:#9cdcfe;">transport</span>, <span style="color:#9cdcfe;">protocol</span><span style="color:#d4d4d4;">=</span><span style="color:#c586c0;">await</span><span style="color:#9cdcfe;">server</span>.<span style="color:#dcdcaa;">create_serve_endpoint</span>() <span style="color:#6a9955;"># Create datagram endpoint and start serving</span></div> <div> <span style="color:#c586c0;">await</span><span style="color:#dcdcaa;">loop</span>() <span style="color:#6a9955;"># Enter main loop of program</span></div> <br><div> <span style="color:#c586c0;">finally</span>:</div> <div> <span style="color:#4ec9b0;">GPIO</span>.cleanup()</div> <div> <span style="color:#dcdcaa;">print</span>(<span style="color:#ce9178;">'Finishing'</span>)</div> <div> <span style="color:#9cdcfe;">transport</span>.<span style="color:#dcdcaa;">close</span>() <span style="color:#6a9955;"># Clean up serve endpoint</span></div> <br><br><br><div> <span style="color:#4ec9b0;">asyncio</span>.<span style="color:#dcdcaa;">run</span>(<span style="color:#dcdcaa;">init_main</span>()) </div> <br><br><div> <span style="color:#c586c0;">while</span><span style="color:#569cd6;">True</span>: </div> <div> <span style="color:#9cdcfe;">client</span>.<span style="color:#dcdcaa;">send_message</span>(<span style="color:#ce9178;">'/allswitch'</span>, <span style="color:#4ec9b0;">list</span>(<span style="color:#4fc1ff;">STATUS</span>.<span style="color:#dcdcaa;">values</span>()))</div> <div> </div> <div> </div> <div>여기 끝에 반복문 달았는데요</div> <div>그럼 컴퓨터 서버로 스위치의 상태가 리스트형태로 계속 와야하는데</div> <div>오질 않아서요..</div> <div> </div> <div>while True:</div> <div> <span style="white-space:pre;"></span>client.send_message~~ </div> <div> </div> <div>이부분을 어디에 넣어야 반복문이 돌아갈까요?</div> <div> <br></div> <div> </div> </div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.