picoをリモコンで操作したい (5)

ラズパイとpicoの間で双方向通信を試みて

結論を言うと、うまくいかなくて諦めました。
あきらめて、pico – pico の双方向通信にしました。

考えてみたら当たり前だけど、pico – pico の双方向通信にすると
リモコンと本体、両方同じようなプログラムで良いので
ラズパイ – pico よりも全然簡単でした

本体側のプログラムです
前回とあまり変わらないので、コメントは略。

from machine import UART, Pin
import time

BAUD_RATE = 9600
UART_TIMEOUT = 1.0
LOOP_INTERVAL = 0.05
LED_PIN = 15 # GPIO 15 (RP-pico pin 20)

led = Pin(LED_PIN, Pin.OUT)

LED_ON = 1
LED_OFF = 0
on_count = 0

uart = UART(0, baudrate=BAUD_RATE, tx=Pin(0), rx=Pin(1))
while True:
    if uart.any():
        data = uart.read(1)
        if data == b'1':
            led.value(LED_ON)
            uart.write(f"count: {on_count}\n".encode('utf-8'))
            on_count += 1
            
        if data == b'0':
            led.value(LED_OFF)
    time.sleep(LOOP_INTERVAL)

リモコン側のプログラムです

from machine import UART, Pin
import time

BAUD_RATE = 9600
UART_TIMEOUT = 1.0
LOOP_INTERVAL = 0.05
BUTTON_INPUT = 15   # 入力ピン(GPIO 15 = RP-pico pin 20)

STATUS_ON = 1
STATUS_OFF = 0
prev_onoff_status = STATUS_OFF

button = Pin(BUTTON_INPUT, Pin.IN, Pin.PULL_UP)

uart=UART(0, baudrate=9600,tx=Pin(0),rx=Pin(1))

while True:
    if button.value() == 0:
        if prev_onoff_status == STATUS_OFF:
            prev_onoff_status = STATUS_ON
            uart.write(b'1')
            
            received_data = uart.readline()
            print(f"本体から受信: {received_data}") 
                
    else:
        if prev_onoff_status == STATUS_ON:
            prev_onoff_status = STATUS_OFF
            uart.write(b'0')

    time.sleep(LOOP_INTERVAL)

次回はいよいよBluetoothでの接続に挑戦です

コメント

タイトルとURLをコピーしました