์๋ ํ์ธ์.
์์ฆ LoRa์์ End Device์์ ๋ฐ์ดํธํ์์ผ๋ก ์ค๋ ๋ฐ์ดํฐ๋ฅผ ํ์ฑํ๊ธฐ ์ํด bytearray๋ก ๊ณจ๋จธ๋ฆฌ๋ฅผ ์ฉ๊ณ ์๋๋ฐ, ์ฐ๊ตฌ์ค ํ๋์ด Python Struct์ ์ถ์ฒํด์ ์๊ฒ ๋์์ต๋๋ค.
Python์ด ๊ต์ฅํ ์ ๋ง๋ ์ธ์ด์ด์ง๋ง, ๋ฐ์ดํธ๋ ๋นํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ์๋ ๋๋ฌด ๊น๋ค๋กญ์ต๋๋ค.
bytearray๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ํ์ฑํ๊ฑฐ๋ checksum ๊ณ์ฐ์ ์ํํ ๋ PTSD๊ฐ ์๋๋ฐ, Python Struct๋ ์ ๋ง ์ ์ธ๊ณ์ ๊ฐ๊น์ ์ต๋๋ค.
ํ์ด์ฌ Struct๋ C์ธ์ด Struct์ ๋น์ทํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๊ณต์๋ฌธ์๋ฅผ ํตํด ์ฐธ๊ณ ํ์๋ฉด ๋ฉ๋๋ค.
https://docs.python.org/3/library/struct.html
https://coding-yoon.tistory.com/120
์ ๋ด์ฉ์ ์ดํดํ ์ ์๋ค๋ฉด, ์ ๋ง์ด ๋ฌด์จ ๋ง์ธ์ง ์ฝ๊ฒ ์ดํดํ ์ ์์ต๋๋ค.
์๋์ ๊ฐ์ ํ๋์ 14๋ฐ์ดํธ์ packet์ ์ ์กํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ( ์๋ ์ฝ๋๋ ์ค์ ํจํท ์ค ํ๋์ด๋ค. ์ฌ์ด ์ดํด๋ฅผ ์ํด ๊ทธ๋ฆผ์ผ๋ก)
์ union์ ์ค๋ช ํ๋ ๋ธ๋ก๊ทธ์์๋ __attribute__์ ๋ํด ์ด์ผ๊ธฐํ์ง ์์์ต๋๋ค. __attribute__๋ ํจ๋ฉ ๋นํธ๊ฐ ์๊ธฐ์ง ์๋๋ก ํฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก 16๋ฐ์ดํธ๊ฐ ์๋ 14๋ฐ์ดํธ๋ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋ฉ๋๋ค.
ํ์ด์ฌ์์ ์ ๊ฐ์ ๋ฐ์ดํธ๋ก ์ด๋ฃจ์ด์ง ํจํท์ ๋ฐ์๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ๋? bytearray๋ฅผ ์ฐ๋ ค๊ณ ํ๋ฉด ์ ์ ์ด ํผ๋ฏธํด์ง์ง๋ง, Python Struct๋ฅผ ์ฌ์ฉํ๋ฉด ๋จธ๋ฆฌ์ ๋ํต์ด ์ฌ๋ผ์ง๋ค.
์ฌ์ฉ๋ฒ์ ๊ฐ๋จํ๋ค. ํ ์ค์ด๋ฉด ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ํ์ฑํ ์ ์๋ค.
from struct import *
"""
Do Something
"""
data = "14๋ฐ์ดํธํจํท" # stirng ์๋ # <class 'bytes'>
payload = unpack('<Hfff',data)
u_cnt = payload[0]
lat = payload[1]
long_ = payload[2]
alt = payload[3]
unpack ๋ช ๋ น์ด ํ ์ค๋ก ํ์ฑ์ด ๊ฐ๋ฅํ๋ค.
'<Hfff' ์ foramt ํ์๋ง ์ฌ์ฉํ ์ค ์๋ฉด ๋๋ค. ๊ฐ๋จํ๋ค. ์ python ๊ณต์ ๋ฌธ์์ ๋์ ์๋ ๋ด์ฉ์ด๋ค.
1. ๋งจ ์ฒ์์ฐ๋ ๊ฒ์ ๋ฐ์ดํธ ์ ๋ ฌ์ด๋ค. ์ ์ฌ์ง์ ํจํท์ litte endian์ด๋ฏ๋ก '<' ๋ฅผ ์ถ๊ฐํ๋ค.
2. ๋ฐ์ดํธ ์ ๋ ฌ์ ์ ์๋ค๋ฉด, ๋ฐ์ดํฐ์ ํ์ ์ด ๋์ค๊ฒ ๋๋ค. ํจํท์ ๊ตฌ์ฑ์ unsigned int(2), float(4), float(4), float(4)์ ์์๋ก ์๋ ํ์ C Type์ ๋ณด๊ณ ํด๋นํ๋ format์ ์ ์ผ๋ฉด๋๋ค. 'HFF'
๊ฒฐ๊ณผ์ ์ผ๋ก unpack์ list ํํ๋ก payload๋ฅผ ๋ฐํํ๊ฒ ๋๋ค.