반응형
지난시간까지 저울의 현재 무게를 받아왔다.
코드는 아래와 같다.
import serial
ser = serial.Serial(port='COM8', baudrate=9600, bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE, timeout=None)
res=ser.readline()
이번에는 숫자만 추출하여 결과를 표시해보려고 한다. while 문은 잠시 지우겠다. 아래 코드에서 시작하자.
import serial
import re
ser = serial.Serial(port='COM8', baudrate=9600, bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE, timeout=None)
res=ser.readline()
res 는 아래와 같다.
>>> res
b'SUI 87.89 g \r\n'
type 함수를 적용해보니 클래스가 바이트다.
>>> type(res)
<class 'bytes'>
문자열로 바꿔줘야 문자열에 적용하는 함수들을 사용할 수 있어서, 일단 문자열로 바꿔주었다.
res=str(res)
>>> res
"b'SUI 87.89 g \\r\\n'"
re 패키지의 rindall 함수를 사용하여 숫자 부분만 추출해보려고 한다. re 패키지를 불러오고 아래와 같이 코드를 짜준다.
import re
res=re.findall("\d+.\d+",res)
\d+ 는 숫자들을 의미하고 . 은 문자들을 의미한다. 따라서 \d+.\d+ 는 숫자들+문자들+숫자들 로 이루어진 부분을 추출하겠다는 말이다. 위 예시에서는 87.89 이다. 결과는 아래와 같다.
>>> res
['87.89']
리스트 안에 문자열이 있는 형태다. 숫자만 추출해보자. 먼저 리스트 인덱싱을 통해 문자열에만 접근한다.
res=res[0]
>>> res
'87.89'
float 함수를 이용하여 실수로 변환해준다.
res=float(res)
>>> res
87.89
결과는 아래와 같다.
import serial
import re
ser = serial.Serial(port='COM8', baudrate=9600, bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE, timeout=None)
#값 불러오기
res=ser.readline()
#문자열로 변환
res=str(res)
#숫자 부분 추출, 추출 결과는 ['숫자'] 형태
res=re.findall("\d+.\d+",res)
#문자열 추출
res=res[0]
#실수로 변환
res=float(res)
while 문 안에 넣어서 실시간 추출이 잘 되는지 해보자.
import serial
import re
ser = serial.Serial(port='COM8', baudrate=9600, bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE, timeout=None)
while(True):
ser.close()
ser.open()
#값 불러오기
res=ser.readline()
#문자열로 변환
res=str(res)
#숫자 부분 추출, 추출 결과는 ['숫자'] 형태
res=re.findall("\d+.\d+",res)
#문자열 추출
res=res[0]
#실수로 변환
res=float(res)
print(res)
숫자만 잘 출력된다.
반응형
'GUI 프로젝트 > 저울 연결하기 (시리얼통신) (Tkinter)' 카테고리의 다른 글
[파이썬 저울 연결] 6. 0점조절, tare 시 오류 (0) | 2022.01.07 |
---|---|
[파이썬 저울 연결] 5. timeout 옵션에 대하여 (0) | 2022.01.07 |
[파이썬 저울 연결] 3. 명령어 입력 시 현재 무게 받아오기 (0) | 2022.01.06 |
[파이썬 저울 연결] 2. 무게 받아오기 (pyserial) (0) | 2022.01.06 |
[파이썬 저울 연결] 1. 저울 선택 및 설정 (0) | 2022.01.06 |
댓글