본문 바로가기
기술팁/라즈베리파이(raspberry)

라즈베리파이 파이썬 uart , ser.wirte()

by nyg -i 2019. 9. 25.

uart 로 1바이트씩 보내고 싶은데, 파이썬이 서툰 나로서는 아무리 생각해봐도 몰라 검색 해봤더니,

검색이 쉽지 않다.... 이놈의 라이브러리는 어디있는지도 모르겠고,,,ㅠㅠ

 ser.write('HELLO') 

라면  ,  HELLO 가 출력된다..

a=20

ser.write(a) 

는 알수 없는 쓰레기 값이 출력된다.

 제대로 출력하기 위해서 어떻게 해야할까?

ser.write(bytes(a)) 

라고 하면 20이 출력된다.

하지만,

a=25000  

ser.write(bytes(a))

라면 a=25000  이 출력된다..... a 가 바이트가 아니다.   ㅡ.ㅡ

c 언어라면 강제로 자료형을 만들수도 있고, 여러방법을 알겠지만,,

파이썬은 모르겠다. int() 라는 자료형을 정수로 바꾸는 방법은 있지만, 내가 못찾은 건지 char은 없다...

 그래서 만들어 써야지 뭐  ㅡ.ㅡ 

원래 만들고 목적은,,,,     int a 를 0xffee 형식으로 상위, 하위 1바이트로 나눠서 a 를 2바이트로 전송 하는 것이다.

c를 참고 했다...

a_high = a >>8        #상위비트 1byte 만들기

a_low = a & 0x00ff   #하위비트 1byte 만들기 , c랑 다르게, 상위비트를 0으로 바꿔줘야 한다....

ser.write(bytes(bytearry([a_high])))   #상위비트 보내기

ser.write(bytes(bytearry([b_high])))   #하위비트 보내기

 

 

 

 

 

 

 

import serial
ser = serial.Serial('/dev/ttyS0', 115200, timeout=3)

import serial
ser = serial.Serial('/dev/ttyS0', 115200, timeout=3)

import serial
ser = serial.Serial('/dev/ttyS0', 115200, timeout=3) import serial
ser = serial.Serial('/dev/ttyS0', 115200, timeout=3)