728x90
반응형
// WRITE

void setup()
{
  pinMode(13, OUTPUT);

  Serial.begin(115200);
}

void loop()
{
  while(Serial.available())
  {
    String s = Serial.readString();

    if (s == "hello")
    {
      digitalWrite(13, HIGH);
      delay(500);
      digitalWrite(13, LOW);
      delay(500);
      digitalWrite(13, HIGH);
      delay(500);
      digitalWrite(13, LOW);
    }
  }
}
# pip install pyserial (virtual environment)
import serial

PORT = "COM8"
#PORT = "/dev/ttyUSB0" 리눅스는 이런식으로 되어있음
BAUDRATE = 115200

# ser = serial.serial_for_url(PORT, baudrate = BAUDRATE, timeout=1)
# print('ser: ', ser)

# 데이터에 접근해서 버퍼 입출력 기능
# ser = serial.serial_for_url(10, baudrate=115200, timeout=1)

# 시리얼 포트와 통신 준비
ser = serial.Serial(PORT, baudrate=BAUDRATE)
# print('ser: ', ser)

# msg = 'o'
while True:
    msg = input() #input 한 값을 아래 enconde 해서 보냄

    if (msg == '0'):    # 'o' 입력 받을때마다 아두이노에서 설정된 코드를 실행
        break           # 0 입력받으면 input창에서 escape
    
    for c in msg:
    # print(f'input: {msg}', end='')
# 데이터를 전송(write)
        ser.write(c.encode())
# 전송 후 버퍼와 연결을 끊음
ser.close()


""" 
# Arduino 

void setup()
{
  pinMode(13, OUTPUT);

  Serial.begin(115200);
}

void loop()
{
  while(Serial.available()) // while이지만 조건이 Serial 통신을하는 것이 있을 때.
  {                         // 1회전 이후 buffer에 값이 없기 때문에 탈출
    char c = Serial.read(); // Serial.read 는 1byte밖에 못 읽어옴
                            // 5byte를 보냈으면 5 회전 (byte 기준)
    if (c == 'o')           // 'o' 영문 o 와 비교
    {
      digitalWrite(13, HIGH);
      delay(500);   //0.5s
      digitalWrite(13, LOW);
      delay(500);
      digitalWrite(13, HIGH);
      delay(500);
      digitalWrite(13, LOW);
    }
  }
}
"""
// READ

void setup()
{
  Serial.begin(115200);
}

void loop()
{
  for (int i = 0; i < 10; i++)
  {
    Serial.print('a');
    delay(200);
  }

  Serial.print('\0');

  delay(1000);

  Serial.print('q');
}
import serial

PORT = "COM8"
BAUDRATE = 115200
ser = serial.Serial(PORT, baudrate=BAUDRATE)

while True:
    # Serial 통신시(문자열 읽어올 때) (ROS와 동일)
    # 1. Port 확인, Baudrate 확인
    # 2. 자료형 (b'a'== byte'a'), 인코딩타입(send, recieve) 동일해야함
    # 읽기와 쓰기를 동시에 "쓰레드"를 사용
    # ** utf-8 은 Ascii를 포함한다.
    readed = ser.read().decode(encoding='utf-8') #read 한글자씩 1byte씩 가져옴
    
    line = ser.readline().decode()
    
    if line:
        print(line)
    
    # if readed == 'q':
    #     break;
    
    # if readed:
    #     print("readed: ", readed);
    
    pass

ser.close()
728x90
반응형

'Firmware & Embedded > Components' 카테고리의 다른 글

Joystick module  (0) 2022.11.08
Stepping Motor  (0) 2022.11.08
Sequential Brightness LED using Button  (0) 2022.10.14
Alarm operation based on distance using ultrasonic sensor  (0) 2022.10.14
Ultrasonic sensor  (0) 2022.10.14

+ Recent posts