UDP์ฉ Wi-Fi์ LoRa ์ฌ์ด์ ๊ฒ์ดํธ์จ์ด ๋ง๋ค๊ธฐ

์ ๋ ์ด๋ฆฐ ์์ ๊ฟ์ ๊พธ์์ต๋๋ค. "Wi-Fi๊ฐ ์๋" ๋ชจ๋ ๊ฐ๊ตฌ์ ๋คํธ์ํฌ ํฐ์ผ, ์ฆ IP ์ฃผ์์ ํฌํธ๋ฅผ ๋ฐ๊ธํ๋ ๊ฒ์ ๋๋ค. ์๊ฐ์ด ์ง๋์ ๋๋ ๋ ์ด์ ๋ฏธ๋ฃฐ ํ์๊ฐ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ฐ์๋ค์ด๊ณ ๊ทธ๊ฒ์ ํด์ผ ํฉ๋๋ค.
๊ธฐ์ ์ ๊ณผ์
LoRa ๋ชจ๋์ด ์ค์น๋ M5Stack ๊ฒ์ดํธ์จ์ด๋ก ๋ง๋ญ๋๋ค(๊ทธ๋ฆผ 1). ๊ฒ์ดํธ์จ์ด๋ Wi-Fi ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋์ด DHCP๋ฅผ ํตํด ๋ก์ปฌ IP ์ฃผ์๋ฅผ ์์ ํฉ๋๋ค. ๊ฒ์ดํธ์จ์ด๋ ํด๋น ์ด๋ฆ(Wi-Fi์ SSID์ ์ ์ฌ)๊ณผ ์ ํจํ ํฌํธ ๋ฒ์๋ฅผ ํน์ ์ฃผํ์์ LoRa ๋ธ๋ก๋์บ์คํธ๋ก ๋ธ๋ก๋์บ์คํธํ๋ฏ๋ก ๋ค๋ฅธ ์ฅ์น๋ ์ฐ๊ฒฐํ ์ ์๋ ๋คํธ์ํฌ๊ฐ ์๊ณ ๋ฒ์์ ์์์ ์ ์ ์์ต๋๋ค. ๊ทธ๋ค์ ๋ฌด๋ฃ ํฌํธ๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ํ๋กํ ํ์ ์ด๋ฏ๋ก ์ด๋ฒ์๋ ์ธ์ฆ์ด ํ์ํ์ง ์์ต๋๋ค. ์๋ก์ด ํด๋ผ์ด์ธํธ ์ฅ์น๋ ์ฌ์ฉ ๊ฐ๋ฅํ LoRa ๋คํธ์ํฌ๋ฅผ ์ฐพ์ ์ ํํ ํฌํธ๋ฅผ ํด๋น ๋คํธ์ํฌ๋ก ์ ์กํฉ๋๋ค. ๊ฒ์ดํธ์จ์ด๋ ์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ํฌํธ๋ฅผ ์์ ํ ํ ํด๋น ํฌํธ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ์ง ํ์ธํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ ํด๋ผ์ด์ธํธ๋ฅผ ๋ฑ๋กํ๊ณ ์์ฒด ๋น๋๊ธฐ UDP ์๋ฒ์์ ์ด ํฌํธ๋ฅผ ์์ ํ๊ธฐ ์์ํฉ๋๋ค. ๋ฑ๋ก ํ ๊ณ ๊ฐ์ ์ ๊ณ ๋ ํญ๊ตฌ ์ฌ์ฉ์ ๋ํ ๋์ ๋๋ ๊ฑฐ๋ถ๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค. ์๋ ์ ์ฐจ๋ ํ 1์ ๋์ ์์ต๋๋ค.

๊ทธ๋ฆผ 1
ํ 1
์ธก๋ฉด
๋ฐฉํฅ๊ณผ ๋ฐ์ดํฐ
์ธก๋ฉด
์ธ์
[ ะบะปะธะตะฝั ]
<โ ัะธะณะฝะฐะป-ะผะฐัะบ โ
[ ัะปัะท ]
0xA1
[ ะบะปะธะตะฝั ]
โ ะฒัะฑัะฐะฝะฝัะน ะฟะพัั โ>
[ ัะปัะท ]
0xB1
[ ะบะปะธะตะฝั ]
<โ ัะพะณะปะฐัะธะต ะธะปะธ ะพัะบะฐะท โ
[ ัะปัะท ]
0xA2
[ ะบะปะธะตะฝั ]
โ UPD-ะฟะฐะบะตั โ>
[ ัะปัะท ]
0xB2
[ ะบะปะธะตะฝั ]
<โ UPD-ะฟะฐะบะตั โ
[ ัะปัะท ]
0xA3
[ ัะตัั ]
<โ UPD-ะฟะฐะบะตั โ
[ ัะปัะท ]
0xC1
๋ด ์ ํ ์ด๋ธ์๋ ์จ๊ฐ ์ข ๋ฅ์ M5Stack์ฉ ๋ชจ๋์ด ๋์ฌ ์๋๋ฐ ์ง๋ฃจํฉ๋๋ค. LoR์ ๊ฐ์ง๊ณ ์ฌ๋ฏธ์๊ฒ ๋์. ๋ชจ๋ ์์ฒด์ ๊ฐ๋ ์ ํ๋ฅญํฉ๋๋ค! ๋ด๊ฐ ๋ฌด์์ ๋งํ ์ ์์ต๋๊น? ํ์ง๋ง ๊ฐ์ฅ ๋์ฐํ ๋ด์ฅํ ์ํ ๋๊ฐ ์๋ ์ฒซ ๋ฒ์งธ ๊ฐ์ ๋ชจ๋์ด ์๋๋ฐ, ์ ์ฐํ ์ธ์ ํ๋ก ๊ธฐํ์ผ๋ก ์ ์๋์ด ์ผ์ด์ค ์ธก๋ฒฝ์ ์ ์ฐฉ๋์์ต๋๋ค. ์ ๋ ๊ทธ๋ฌํ ๋ชจ๋์ ๋ํ ํ์ฅ ํ ์คํธ๋ฅผ ์ํํ ์ ์ด ์์ต๋๋ค(YouTube์ ๋ฌ์์์ด ์ฑ๋์์ ์์ฒญํ ์ ์์ต๋๋ค).

๋น์ฐํ ์ฐ๋ฆฌ๋ ์ด๋ฌํ ๊ธฐ๋ณธ ์์๋ฅผ ์ ๊ฑฐํ๊ณ Ra-01๊ณผ ํจ๊ป ์ ๊ณต๋๋ ํ์ค ํฌ๋ฆฌ์ปฌ ์ํ ๋์ ๋ฉ๋ํด์ผ ํ์ต๋๋ค. ์ด๋ฌํ ์ฌ์ฉ์ ์ ์ ํ ํต์ ๋ฒ์๊ฐ ๋์ ๋๊ฒ ํฅ์๋์์ง๋ง ๋ถ์์ ์ธ ๋ฌธ์ ๊ฐ ๋ํ๋ฌ์ต๋๋ค. ์ฆ, ์ํ ๋์ ์ง๊ฒฝ์ด ๋ชจ๋ ๊ฐ ํ์ฉ ๊ฑฐ๋ฆฌ๋ณด๋ค ํฝ๋๋ค. ํ๋ก์ ํธ ๊ธฐ๊ฐ ๋์ ์ต์ข ๋ชจ๋์ ํฌ๊ธฐํด์ผ ํ์ต๋๋ค.
๋๊ธฐ์ ๊ฒฌ๊ณ ์ฑ์ผ๋ก ์ธํ ์ฒซ ๋ฒ์งธ ์ด๋ ค์
๋์๊ด์ ์ด์ฉํ๋ ๊ฒ ๊ฐ์ต๋๋ค WiFiUdp.h, UDP ์๋ฒ์ ํธ์ํ ์กด์ฌ๋ฅผ ์ํด ๋ชจ๋ ๊ฒ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ์๋ ๊ทธ๋ ์ง ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ถํํ๋ ํ๋์ ์ค๋ ๋์์ ์ฌ๋ฌ ์ฐ๊ฒฐ์ ๋์์ ์๋น์คํ ์ ์๋ ๋๊ธฐ ์๋ฒ๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ค๊ณ๋์์ต๋๋ค. ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ์ฌ ์์ ์ ์ ํฉํ์ง ์์ต๋๋ค. ๋๋ ์ฐจ๋ฅผ ๋ง์ด ๋ง์ ์ผ ํ๊ณ ๋์์ ๋ง์ ์ฐ๊ฒฐ์ ์ง์ํ ์ ์๋ ๋น๋๊ธฐ UDP ์๋ฒ๋ฅผ ๊ตฌ์ถํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์์ผ ํ์ต๋๋ค. ๊ทธ๋ฐ ๋์๊ด์ด ๋ฐ๊ฒฌ๋์์ต๋๋ค - AsyncUDP.h. ๋๊ธฐ์ ์๋ฒ์ ๋น๋๊ธฐ์ ์๋ฒ์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น? ์์ผ ์๋ ๋ฐฉ์์ ๊ฐ๋จํ๊ฒ ๋ณด์ฌ์ฃผ๋ ๊ทธ๋ฆผ 2์ XNUMX๊ฐ ์ํผ์๋๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.

๊ทธ๋ฆผ 2
์ฃผ์ฐ :
์ฌ๋ ์ญํ ์์ ์์ผ;
๋น๋๊ธฐ ์ญํ ์์ ์ฐ๊ฒฐ;
ํผ์ค๋ชจ ์ญํ ์์ ๋จ๋ํ.
์ํผ์๋ A. ์๊ฐ ์ด๊ณผ๊ฐ ์๋ ๋๊ธฐ ์์ผ
๊ทธ ๋จ์๋ ๋น๋๊ธฐ๊ฐ ๊ทธ์๊ฒ ํธ์ง๋ฅผ ๊ฐ์ ธ์ฌ ๋๊น์ง ์์์ ๊ฒ์ ๋๋ค.
์ํผ์๋ B. ์๊ฐ ์ ํ์ด ์๋ ๋๊ธฐ ์์ผ
๋จ์๋ ๋น๋๊ธฐ์ ์ฝ์ํ ์๊ฐ์ ๊ธฐ๋ค๋ ธ๋ค๊ฐ ์๊ฐ์ ๋ง์ถฐ ๋์ฐฉํ์ง ์์ผ๋ฉด ๋จ์๋ ๋ ๋๊ฒ ๋๋ค.
์ํผ์๋ C. ๋ฉํฐ์ค๋ ๋ฉ์ ์ฌ์ฉํ ๋๊ธฐ ์์ผ
๋จ์๋ ํธํ ์์ ๋น๋๊ธฐ๋ค์ด ์ค์ค๋ก ํธ์ง๋ฅผ ์ ๋ฌํ๋ ๋ชจ์ต์ ์ง์ผ๋ณธ๋ค.
์ํผ์๋ D. ๋น๋๊ธฐ ์์ผ(๋ ์ด์ ์์ ํ ๊ฒ์ด ์์ ๋)
์ฌ๋์ ์์ ์ด ๊ฐ์ฅ ์ข์ํ๋ ์ผ์ ํ์ง๋ง ๋น๋๊ธฐ๋ฅผ ์์ง ์์ต๋๋ค.
์ํผ์๋ E. ๋น๋๊ธฐ ์์ผ(์ป์ ๊ฒ์ด ์์ ๋)
๊ทธ ๋จ์๋ ๋น๋๊ธฐ๋ก๋ถํฐ ํธ์ง๋ฅผ ๋ฐ๊ธฐ ์ํด ์ ์ ์ผ์ ์ฌ์์ต๋๋ค.
์ํผ์๋ F. ๋ฉํฐ์ค๋ ๋ฉ์ ์ฌ์ฉํ ๋น๋๊ธฐ ์์ผ
๋จ์๋ ํ ์ผ์ ํ๋ฉฐ ๋น๋๊ธฐ๋ค์ด ์ค์ค๋ก ํธ์ง๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ ์ง์ผ๋ณธ๋ค.
์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ จ๋ค๋ฉด ์๋ง๋ ๊ฐ ์ํผ์๋์ ๋น๋๊ธฐ ๋ชฉ๊ฑธ์ด์ ํน์ ์์์ด ์๋ค๋ ๊ฒ์ ๋์น์ฑ์ จ์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์ด์ ๊ฐ ์๋ ๊ฒ์ด ์๋๋๋ค. ์ํผ์๋ A์ B์์๋ ๋จ ํ๋์ ์์ผ๋ง ์๋ฒ์์ ์๋ํ๊ณ ๊ทธ๊ฒ ์ ๋ถ์ ๋๋ค. ์ํผ์๋ C์์๋ ๋ ๊ฐ์ ์์ผ์ด ์ด๋ฏธ ์๋ํ๊ณ ์์ต๋๋ค. ์ํผ์๋ D, E, F์๋ ์ด๋ฏธ 2๊ฐ์ ์์ผ์ด ์์ต๋๋ค. โ์ ๊ฑฐ๊ธฐ์๋ 3๊ฐ, ์ฌ๊ธฐ์๋ 2๊ฐ๊ฐ ์๋์?โ - ๋ฌผ์ด. ์ด๋ ์กฐ๊ฑด๋ถ๋ก 20์ 200์ด๋ฉฐ ์ค์ ๋ก XNUMX ๋์ XNUMX์ด ์๊ณ XNUMX ๋์ XNUMX์ด ์์ ์ ์์ต๋๋ค. ๋ชฉํ๋ ๋น๋๊ธฐ ์์ผ์ด ๋๊ธฐ ์์ผ๋งํผ ์ฒ ์ ๊ฐ์ดํ์ง ์๋๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ๋๋ค.
์ด๋์ ์ผ๋ง๋ ๋ค์ด๋ง๋์?
UDP ํจํท์ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ํ 1์ ์ดํด๋ณด๊ณ ์ด๋ฅผ ํตํด ๋ฌด์์ ํ ์ ์๋์ง ์๊ฐํด ๋ณด๊ฒ ์ต๋๋ค.
ํ 1. UDP ํจํท ๊ตฌ์กฐ
๋นํธ
0 - 15
16 - 31
0-31
์์ค ํฌํธ
๋์ ํฌํธ
32-63
๋ฐ์ดํฐ๊ทธ๋จ ๊ธธ์ด(Length)
์ฒดํฌ์ฌ
64- ...
๋ฐ์ดํฐ
์ด ํ ์ด๋ธ์ ์์ ๋ถ๋ถ์ ๋ค๋ฅธ ํ๋๋ฅผ ์ถ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค. ์ธ์ (1๋ฐ์ดํธ). ์ด ํ๋ก์ ํธ์๋ ์ด๊ฒ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค. ์ธ์ ์ ๊ธฐ๋ฐ์ผ๋ก ์ฅ์น๋ ํจํท์ผ๋ก ๋ค์์ ์ํํ ์์ ์ ์๊ฒ ๋ฉ๋๋ค. ์ด์ ์ธ์ ์ ๋ํ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ํ 2์ ์ ์ด ๋ณด๊ฒ ์ต๋๋ค.
ํ 2. ์ธ์ ์ค๋ช
์ํธ
์ด๋ฆ
์ค๋ช
0xA1
ะะฐัะบ
๊ฒ์ดํธ์จ์ด๋ ํน์ ์ฃผํ์์์ LoRa ๋คํธ์ํฌ ์ด๋ฆ๊ณผ ์ ํจํ ํฌํธ ๋ฒ์๋ฅผ ๋ธ๋ก๋์บ์คํธํฉ๋๋ค. ์ด๋ ์ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๋คํธ์ํฌ๋ฅผ ํ์ธํ๊ณ , ์ ์ก์ด ์์ ๋ ํ์ฌ ํด๋ผ์ด์ธํธ๊ฐ ์ ํธ ๋ ๋ฒจ์ ํ์ธํ ์ ์๋๋ก ํ๊ธฐ ์ํด ํ์ํฉ๋๋ค.
0xB1
์๋ขฐ
ํด๋ผ์ด์ธํธ๊ฐ ๋คํธ์ํฌ๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ๊ธฐ๋ณธ ํฌํธ๋ฅผ ๋ณด๋
๋๋ค.
0xA2
๋์ ๋๋ ๊ฑฐ๋ถ
ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ํฌํธ๊ฐ ๋ฌด๋ฃ์ด๋ฉด ์๋ฒ๋ ๋์๋ก ์๋ตํ๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ฑฐ๋ถ๋ก ์๋ตํฉ๋๋ค.
0xB2
์
๋งํฌ
ํด๋ผ์ด์ธํธ๊ฐ UDP ํจํท์ ๊ฒ์ดํธ์จ์ด๋ก ๋ณด๋ด๋ ๊ฒฝ์ฐ.
0xA3
๋ค์ด๋งํฌ
๊ฒ์ดํธ์จ์ด๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ UDP ํจํท์ ์ ์กํ ๋.
0xC1
์
๋งํฌ ๊ณ์
๊ฒ์ดํธ์จ์ด๊ฐ UDP ํจํท์ ๋ก์ปฌ ๋คํธ์ํฌ๋ก ๋ณด๋ด๋ ๊ฒฝ์ฐ.
๊ด์ฐฎ์. ์ด์ ํ 3์ ์ธ์ ๊ตฌ์ฑ์ ๋ํด ๋ ผ์ํด ๋ณด๊ฒ ์ต๋๋ค.
ํ 3. ์ธ์
์ธ์
์ด๋ฆ
๊ตฌ์กฐ
ะะฐัะบ
์ธ์
์ฝ๋(1 Byte) + LoRa ๋คํธ์ํฌ ์ด๋ฆ(4 Byte) + ์์ ํฌํธ(2 Byte) + ๋ ํฌํธ(2 Byte)
์๋ขฐ
์ ์ก ์ฝ๋(1Byte) + LoRa ๋คํธ์ํฌ ์ด๋ฆ(4Byte) + ๊ธฐ๋ณธ ํฌํธ(2Byte)
๋์ ๋๋ ๊ฑฐ๋ถ
์ ์ก ์ฝ๋(1 Byte) + LoRa ๋คํธ์ํฌ ์ด๋ฆ(4 Byte) + ๊ธฐ๋ณธ ํฌํธ(2 Byte) + ๊ฒฐ๊ณผ(1 Byte)
์
๋งํฌ
์ ์ก ์ฝ๋(1Byte) + LoRa ๋คํธ์ํฌ ์ด๋ฆ(4Byte) + ์๊ฒฉ IP ์ฃผ์(4Byte) + ์๊ฒฉ ํฌํธ(2Byte) + ๋ก์ปฌ IP ์ฃผ์(4Byte) + ๋ก์ปฌ ํฌํธ(2Byte) + ๋ฐ์ดํฐ ํฌ๊ธฐ(2Byte) ) + ๋ฐ์ดํฐ
๋ค์ด๋งํฌ
์ ์ก ์ฝ๋(1Byte) + LoRa ๋คํธ์ํฌ ์ด๋ฆ(4Byte) + ์๊ฒฉ IP ์ฃผ์(4Byte) + ์๊ฒฉ ํฌํธ(2Byte) + ๋ก์ปฌ IP ์ฃผ์(4Byte) + ๋ก์ปฌ ํฌํธ(2Byte) + ๋ฐ์ดํฐ ํฌ๊ธฐ(2Byte) ) + ๋ฐ์ดํฐ
์
๋งํฌ ๊ณ์
์๊ฒฉ IP ์ฃผ์(4๋ฐ์ดํธ) + ์๊ฒฉ ํฌํธ(2๋ฐ์ดํธ) + ๋ฐ์ดํฐ ํฌ๊ธฐ(2๋ฐ์ดํธ) + ๋ฐ์ดํฐ
์ ๋ Arduino์ M5Stack์ฉ์ผ๋ก ๋ ๊ฐ์ ํด๋ผ์ด์ธํธ๋ฅผ ์์ฑํ์ต๋๋ค. ~์ ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณผ ์ ์์ต๋๋ค. ์ํํธ ๋ด๋ถ์๋ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์์ง ํ์ฅ ํ ์คํธ๋ฅผ ์ํํ์ง ์์์ต๋๋ค.
์์ค ์ฝ๋๋ GitHub์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
M5Stack ๊ธฐ๋ณธ ์ฅ์น์ ๋ํด ์์ธํ ์์๋ณด๊ณ ๊ตฌ๋งคํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ์ฅ์น์ LoRa ๋ฌด์ ๋ชจ๋์ ์ ํํ ์ ์์ต๋๋ค.
์ด ํ๋ก์ ํธ๊ฐ ๋น์ ์๊ฒ ๋์์ด ๋๋ค๋ฉด ๊ธฐ์๊ฒ ์ต๋๋ค. ์๊ฐ ๋ด ์ฃผ์ ์ ๋๋จํ ๊ฐ์ฌํฉ๋๋ค!
์ฐธ๊ณ ๋ฌธํ ๋ฐ/๋๋ ์ถ์ฒ ๋ชฉ๋ก:
์ถ์ฒ : habr.com
