๊ฒฉ๋ฆฌ ๊ธฐ๊ฐ ๋์ ์ ๋ ์ฌ๋ฌ ์ด๋ํต์ ์ฌ์ LTE ๋ชจ๋ ์๋๋ฅผ ์ธก์ ํ๋ ์ฅ์น ๊ฐ๋ฐ์ ์ฐธ์ฌํ๋ผ๋ ์ ์์ ๋ฐ์์ต๋๋ค.
๊ณ ๊ฐ์ ์๋ฅผ ๋ค์ด ๋น๋์ค ๋ฐฉ์ก์ ์ํด LTE ์ฐ๊ฒฐ์ ์ฌ์ฉํ์ฌ ์ฅ๋น๋ฅผ ์ค์นํ ๋ ์ด๋ ์ด๋ํต์ ์ฌ๊ฐ ์์ ์๊ฒ ๊ฐ์ฅ ์ ํฉํ์ง ํ์ ํ๊ธฐ ์ํด ๋ค์ํ ์ง๋ฆฌ์ ์์น์ ์๋ ๋ค์ํ ํต์ ์ฌ์ ์์ ์๋๋ฅผ ํ๊ฐํ๊ณ ์ถ์์ต๋๋ค. ๋์์ ๊ฐ๋น์ผ ์ฅ๋น ์์ด ์ต๋ํ ๊ฐ๋จํ๊ณ ์ ๋ ดํ๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ์ต๋๋ค.
์ด ์์
์ ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ์ง์ ์ง์ฝ์ ์ด์ง ์๋ค๋ ์ ์ ์ฆ์ ๋ง์ ๋๋ฆฌ๋ฉฐ, ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง, ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง ์๋ ค ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์, ๊ฐ์.
์ฃผ์
LTE ์ฐ๊ฒฐ ์๋๋ฅผ ์ธก์ ํ๋ ๊ฒ์ ๋งค์ฐ ๋ณต์กํ ๋ฌธ์ ์ ๋๋ค. ์ฌ๋ฐ๋ฅธ ์ฅ๋น์ ์ธก์ ๊ธฐ์ ์ ์ ํํด์ผ ํ๋ฉฐ ์ ๋ฃฐ๋ฌ ๋คํธ์ํฌ์ ํ ํด๋ก์ง์ ์๋์ ์ ์ดํดํด์ผ ํฉ๋๋ค. ๋ํ ์๋๋ ์ ์ ๊ฐ์ ์ ์, ๊ธฐ์ ์กฐ๊ฑด, ์ ๊ฐ ์๋ ๋ฑ ์ฌ๋ฌ ์์ธ์ ์ํฅ์ ๋ฐ์ ์ ์์ผ๋ฉฐ ๋คํธ์ํฌ ํ ํด๋ก์ง๋ก ์ธํด ์๋๊ฐ ํฌ๊ฒ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ ์๋ ค์ง์ง ์์ ๋ฌธ์ ๊ฐ ์์ฒญ๋๊ฒ ๋ง์ ๋ฌธ์ ์ด๋ฉฐ, ํต์ ์ฌ์ ์๋ง์ด ์ด ๋ฌธ์ ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ํด๊ฒฐํ ์ ์์ต๋๋ค.
์ฒ์์ ๊ณ ๊ฐ์ ๊ตํ์์ ํด๋ํฐ์ ๊ฐ์ง๊ณ ํ๋ฐฐ๊ธฐ์ฌ๋ฅผ ์ด์ ํ๊ณ , ํด๋ํฐ์ผ๋ก ์ง์ ์ธก์ ํ ๋ค์, ์๋ ์ธก์ ๊ฒฐ๊ณผ๋ฅผ ๋ ธํธ๋ถ์ ๊ธฐ๋กํ๊ธฐ๋ฅผ ์ํ์ต๋๋ค. ์ด์์ ์ด์ง๋ ์์ง๋ง LTE ๋คํธ์ํฌ ์๋๋ฅผ ์ธก์ ํ๋ ์๋ฃจ์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
์๊ฐ์ด ๋ถ์กฑํด์ ํธ์์ฑ์ด๋ ์ค์ฉ์ฑ์ด ์๋ ๊ฐ๋ฐ ์๋๋ฅผ ์ฐ์ ์ผ๋ก ๊ฒฐ์ ์ ๋ด๋ ธ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ฒ ๋ฐ ๊ฐ ๊ฐ๋ณ ํด๋ผ์ด์ธํธ ์ค์ ์ ์์๋๋ ์๊ฐ์ ์ ์ฝํ๊ธฐ ์ํด ๋ณด๋ค ์ค์ฉ์ ์ธ VPN ๋์ ์๊ฒฉ ์ก์ธ์ค์ ์ญ๋ฐฉํฅ SSH๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
๊ธฐ์ ์ ๊ณผ์
๊ธฐ์ฌ์ ๋์ ์๋ฏ์ด
๊ธฐ์ ์ ์ธ ์์ ์ ์๋นํ ๊ฐ๋จํ๋๋ฐ, ์ต์ข ์ฌ์ฉ์์ ์ดํด๋ฅผ ๋๊ธฐ ์ํด ์กฐ๊ธ ํ์ฅํด ๋ณด๊ฒ ์ต๋๋ค. ๊ธฐ์ ์๋ฃจ์ ๊ณผ ์ฅ๋น์ ์ ํ์ ๊ณ ๊ฐ์ด ๊ฒฐ์ ํ์ต๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ์น์ธ ํ ๊ธฐ์ ์ฌ์ ์์ฒด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋จ์ผ ๋ณด๋ ์ปดํจํฐ ๊ธฐ๋ฐ vim2 H ๋ชจ๋์ ํตํ LTE ์ฐ๊ฒฐ ์๋ ํ ์คํฐ ๋ง๋ค๊ธฐํ์จ์ด e3372h - 153 ์ฌ๋ฌ ํต์ ์ฌ์ ์(XNUMX๋ถํฐ n๊น์ง). UART๋ฅผ ํตํด ์ฐ๊ฒฐ๋ GPS ์์ ๊ธฐ๋ก๋ถํฐ ์ขํ๋ฅผ ์์ ํ๋ ๊ฒ๋ ํ์ํฉ๋๋ค. ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ์๋ ์ธก์
www.speedtest.net ๋ค์๊ณผ ๊ฐ์ ํ ์ด๋ธ์ ๋ฃ์ผ์ญ์์ค.
CSV ํ์์ ํ์ ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ์๋ช ์ 6์๊ฐ๋ง๋ค ์ด๋ฉ์ผ๋ก ๋ณด๋ด์ธ์. ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ GPIO์ ์ฐ๊ฒฐ๋ LED๋ฅผ ๊น๋ฐ์ ๋๋ค.
๋๋ ์ฌ๋ฌ ๋ฒ์ ์น์ธ์ ๊ฑฐ์ณ ๊ธฐ์ ์ฌ์์ ์์ ํ์์ผ๋ก ์ค๋ช ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์์ ์ ์๋ฏธ๋ ์ด๋ฏธ ๋ณด์ ๋๋ค. ๋ชจ๋ ๊ฒ์ ์ผ์ฃผ์ผ์ด ์ฃผ์ด์ก์ต๋๋ค. ๊ทธ๋ฌ๋ ์ค์ ๋ก๋ XNUMX์ฃผ ๋์ ์ง์๋์์ต๋๋ค. ์ด๊ฒ์ ์ ๊ฐ ๋ณธ์ ์ดํ์ ์ฃผ๋ง์๋ง ์ด ์ผ์ ํ๋ค๋ ์ฌ์ค์ ๊ณ ๋ คํ ๊ฒ์ ๋๋ค.
์ฌ๊ธฐ์ ์ ๋ ๊ณ ๊ฐ์ด ์๋ ์ธก์ ์๋น์ค ๋ฐ ํ๋์จ์ด ์ฌ์ฉ์ ๋ํด ์ฌ์ ์ ๋์ํ๊ธฐ ๋๋ฌธ์ ์ ๋ฅ๋ ฅ์ด ํฌ๊ฒ ์ ํ๋์๋ค๋ ์ฌ์ค์ ๋ค์ ํ ๋ฒ ์ฃผ๋ชฉํ๊ณ ์ถ์ต๋๋ค. ์์ฐ๋ ์ ํ๋์ด ์์ด์ ํน๋ณํ ๊ตฌ๋งคํ ๊ฒ์ ์์ต๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ด ๊ท์น์ ๋ฐ๋ผ์ผ ํ์ต๋๋ค.
์ํคํ ์ฒ ๋ฐ ๊ฐ๋ฐ
๊ณํ์ ๊ฐ๋จํ๊ณ ๋ถ๋ช ํฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ํน๋ณํ ์ฝ๋ฉํธ๋ ์๋ตํ๊ฒ ์ต๋๋ค.
๋๋ ์ด ์ธ์ด๋ก ๊ฐ๋ฐํ ๊ฒฝํ์ด ์ ํ ์์์์๋ ๋ถ๊ตฌํ๊ณ ์ ์ฒด ํ๋ก์ ํธ๋ฅผ Python์ผ๋ก ๊ตฌํํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๊ฐ๋ฐ ์๋๋ฅผ ๋์ผ ์ ์๋ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ง ์์ ์ ์๋ฃจ์
์ด ๋ง์ด ์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ ํํ์ต๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋๋ ๋ชจ๋ ์ ๋ฌธ ํ๋ก๊ทธ๋๋จธ๋ค์๊ฒ ๋์ ์ฒซ ํ์ด์ฌ ๊ฐ๋ฐ ๊ฒฝํ์ ๊พธ์ง์ง ๋ง ๊ฒ์ ๋น๋ถํ๋ฉฐ, ๋ด ๋ฅ๋ ฅ์ ํฅ์์ํค๊ธฐ ์ํ ๊ฑด์ค์ ์ธ ๋นํ์ ์ธ์ ๋ ๊ธฐ์๊ฒ ๋ฃ์ต๋๋ค.
๋ํ ๊ทธ ๊ณผ์ ์์ ๋๋ Python์ ๋ ๊ฐ์ง ์คํ ์ค์ธ ๋ฒ์ 2์ 3์ด ์๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ๊ณ ๊ทธ ๊ฒฐ๊ณผ ์ธ ๋ฒ์งธ ๋ฒ์ ์ผ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
ํ๋์จ์ด ๋ ธ๋
๋จ์ผ ํ๋ ์ดํธ vim2
๋๋ ๋ฉ์ธ ๋จธ์ ์ผ๋ก ์ฑ๊ธ๋ณด๋ ์ปดํจํฐ๋ฅผ ๋ฐ์์ต๋๋ค.
์ค๋งํธ ํ ๋ฐ SMART-TV๋ฅผ ์ํ ์ฐ์ํ๊ณ ๊ฐ๋ ฅํ ๋ฏธ๋์ด ํ๋ก์ธ์์ด์ง๋ง ์ด ์์
์๋ ๋งค์ฐ ๋ถ์ ํฉํ๊ฑฐ๋ ์ ํฉํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฃผ์ OS๋ Android์ด๊ณ Linux๋ ๋ณด์กฐ OS์ด๋ฏ๋ก Linux์์ ๋ชจ๋ ๋
ธ๋์ ๋๋ผ์ด๋ฒ์ ๊ณ ํ์ง ์๋์ ๋ณด์ฅํ๋ ์ฌ๋์ ์๋ฌด๋ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ผ๋ถ ๋ฌธ์ ๋ ์ด ํ๋ซํผ์ USB ๋๋ผ์ด๋ฒ์ ๊ด๋ จ๋์ด ์์ด ์ด ๋ณด๋์์๋ ๋ชจ๋์ด ์์๋๋ก ์๋ํ์ง ์์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๋ํ ๋ฌธ์๊ฐ ๋งค์ฐ ์ด์
ํ๊ณ ๋ถ์ฐ๋์ด ์์ด ๊ฐ ์์
์ ๋ถ๋๋ฅผ ํํค์น๋ ๋ฐ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ ธ์ต๋๋ค. GPIO๋ฅผ ์ฌ์ฉํ ์ผ๋ฐ์ ์ธ ์์
์๋ ๋ง์ ํผ๊ฐ ํ์ํ์ต๋๋ค. ์๋ฅผ ๋ค์ด LED๋ฅผ ์ค์ ํ๋ ๋ฐ ๋ช ์๊ฐ์ด ๊ฑธ๋ ธ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ๊ด์ ์ผ๋ก ์ด๋ค ์ข
๋ฅ์ ์ฑ๊ธ ๋ณด๋์ธ์ง๋ ๊ทผ๋ณธ์ ์ผ๋ก ์ค์ํ์ง ์์๊ณ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์๋ํ๊ณ USB ํฌํธ๊ฐ ์๋ค๋ ๊ฒ์
๋๋ค.
๋จผ์ ์ด ๋ณด๋์ Linux๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค. ๋ชจ๋ ์ฌ๋๊ณผ ์ด ๋จ์ผ ๋ณด๋ ์์คํ ์ ๋ค๋ฃจ๋ ์ฌ๋๋ค์ ์ํด ๋ฐฉ๋ํ ๋ฌธ์๋ฅผ ์ ์ ์ด ๋ค์ง์ง ์๊ธฐ ์ํด ๋๋ ์ด ์ฅ์ ์ฐ๊ณ ์์ต๋๋ค.
Linux๋ฅผ ์ค์นํ๋ ๋ฐฉ๋ฒ์๋ ์ธ๋ถ SD ์นด๋ ๋๋ ๋ด๋ถ MMC์ ๋ ๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค. ๋๋ ์นด๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ํค๋ ๋ฐฉ๋ฒ์ ์์๋ด๋ ค๊ณ ์ ๋ ์๊ฐ์ ๋ณด๋๊ธฐ ๋๋ฌธ์ MMC์ ์ค์นํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์์ฌํ ์ฌ์ง์์ด ์ธ๋ถ ์นด๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ์ฌ์ธ ๊ฒ์ ๋๋ค.
ํ์จ์ด ์ ๋ณด
- ํด ํ GND: <โ> VIM GPIO์ ํ 17
- ํด ํ TXD: <โ> VIM GPIO์ ํ 18(Linux_Rx)
- ๋๊ตฌ ํ RXD: <โ> VIM GPIO์ ํ 19(Linux_Tx)
- ํด ํ VCC: <โ> VIM GPIO์ ํ 20
๊ทธ๋ค์ ํ์จ์ด๋ฅผ ๋ค์ด๋ฐ์์ด์
์ด ํ์จ์ด๋ฅผ ์
๋ก๋ํ๋ ค๋ฉด ์ ํธ๋ฆฌํฐ๊ฐ ํ์ํฉ๋๋ค. ์ด์ ๋ํ ์์ธํ ๋ด์ฉ
git clone https://github.com/khadas/utils
cd /path/to/utils
sudo ./INSTALL
๊ทธ๋ฆฌ๊ณ ... ์๋ฌด๊ฒ๋ ์๋ํ์ง ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ค์น๋๋๋ก ์ค์น ์คํฌ๋ฆฝํธ๋ฅผ ํธ์งํ๋ ๋ฐ ๋ ์๊ฐ์ด ๊ฑธ๋ ธ์ต๋๋ค. ๊ฑฐ๊ธฐ์ ๋ฌด์์ ํ๋์ง๋ ๊ธฐ์ต๋์ง ์์ง๋ง, ๋ง๊ณผ ํจ๊ปํ๋ ์์ปค์ค๋ ์์์ด์. ๊ทธ๋ฌ๋ ์กฐ์ฌํด. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์ ํธ๋ฆฌํฐ๊ฐ ์์ผ๋ฉด vim2๋ฅผ ๋ ์ด์ ๊ณ ๋ฌธํ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ ์ฌ๋์ ์ ํ ๊ฑด๋๋ฆฌ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค!
์ผ๊ณฑ ๊ฐ์ ์ง์ฅ, ์คํฌ๋ฆฝํธ ๊ตฌ์ฑ ๋ฐ ์ค์น๋ฅผ ๋ง์น ํ ์๋ํ๋ ์ ํธ๋ฆฌํฐ ํจํค์ง๋ฅผ ๋ฐ์์ต๋๋ค. USB๋ฅผ ํตํด ๋ณด๋๋ฅผ Linux ์ปดํจํฐ์ ์ฐ๊ฒฐํ๊ณ ์ ๋ค์ด์ด๊ทธ๋จ์ ๋ฐ๋ผ UART๋ ์ฐ๊ฒฐํ์ต๋๋ค.
ํ๋์จ์ด ๋ฐ ์ํํธ์จ์ด ์ค๋ฅ ์ ์ด ์์ด 115200์ ์๋๋ก ์ ๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ๋ฏธ๋์ปด ํฐ๋ฏธ๋์ ์ค์ ํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ํด ๋ด
์๋ค.
UART ํฐ๋ฏธ๋์ VIM2๋ฅผ ๋ก๋ฉํ ๋ ์คํ์ด์ค๋ฐ ๋ฑ์ ํค๋ฅผ ๋๋ฅด๋ฉด ๋ก๋ฉ์ด ์ค๋จ๋ฉ๋๋ค. ์ค์ด ๋ํ๋ ํ
kvim2#
๋ค์ ๋ช ๋ น์ ์ ๋ ฅํฉ๋๋ค.
kvim2# run update
๋ก๋ ์ค์ธ ํธ์คํธ์์ ๋ค์์ ์คํํฉ๋๋ค.
burn-tool -v aml -b VIM2 -i VIM2_Ubuntu-server-bionic_Linux-4.9_arm64_EMMC_V20191231.img
๊ทธ๊ฒ ๋ค์ผ, ํด. ํ์ธํด ๋ณด๋ ๋ณด๋์ Linux๊ฐ ์์ต๋๋ค. ๋ก๊ทธ์ธ/๋น๋ฐ๋ฒํธ khadas:khadas.
๊ทธ ํ ๋ช ๊ฐ์ง ์ฌ์ํ ์ด๊ธฐ ์ค์ ์ด ์์ต๋๋ค. ์ถ๊ฐ ์์ ์ ์ํด sudo์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋นํ์ฑํํฉ๋๋ค(์, ์์ ํ์ง๋ ์์ง๋ง ํธ๋ฆฌํฉ๋๋ค).
sudo visudo
์์์ ์ค์ ํธ์งํ๊ณ ์ ์ฅํฉ๋๋ค.
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) NOPASSWD: ALL
๊ทธ๋ฐ ๋ค์ ์๊ฐ์ด ๋ชจ์คํฌ๋ฐ์ ์๋๋ก ํ์ฌ ๋ก์ผ์ผ์ ๋ณ๊ฒฝํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ทธ๋ฆฌ๋์น์ ์๊ฒ ๋ฉ๋๋ค.
sudo timedatectl set-timezone Europe/Moscow
๋๋
ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime
์ด๋ ต๋ค๋ฉด ์ด ๋ณด๋๋ฅผ ์ฌ์ฉํ์ง ๋ง์ธ์. ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด๊ฐ ๋ ์ข์ต๋๋ค. ์์งํ.
๋ชจ๋ ํ์จ์ด e3372h โ 153
์ด ๋ชจ๋์ ๋์๊ฒ ์ค์ํ ํ์ก ๊ณต๊ธ์์ด์๊ณ , ์ค์ ๋ก ์ ์ฒด ํ๋ก์ ํธ์ ๋ณ๋ชฉ ํ์์ด ๋์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฌํ ์ฅ์น์ "๋ชจ๋"์ด๋ผ๋ ์ด๋ฆ์ ์์ ์ ๋ณธ์ง์ ์ ํ ๋ฐ์ํ์ง ์์ต๋๋ค. ์ด๊ฒ์ ๊ฐ๋ ฅํ ๊ฒฐํฉ์ด๋ฉฐ ์ด ํ๋์จ์ด์๋ ๋๋ผ์ด๋ฒ๋ฅผ ์ค์นํ๊ธฐ ์ํด CD-ROM์ธ ๊ฒ์ฒ๋ผ ๊ฐ์ฅํ๋ ๋ณตํฉ ์ฅ์น๊ฐ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋คํธ์ํฌ ์นด๋ ๋ชจ๋๋ก ์ ํํฉ๋๋ค.
๊ตฌ์กฐ์ ์ผ๋ก Linux ์ฌ์ฉ์์ ๊ด์ ์์ ๋ชจ๋ ์ค์ ์ ๋ง์น ํ์ ๋ชจ์ต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋ชจ๋์ ์ฐ๊ฒฐํ ํ dhcp๋ฅผ ํตํด IP ์ฃผ์ 192.168.8.100๊ณผ ๊ธฐ๋ณธ ๊ฒ์ดํธ์จ์ด๋ฅผ ๋ฐ๋ eth* ๋คํธ์ํฌ ์ธํฐํ์ด์ค๊ฐ ์์ต๋๋ค. 192.168.8.1์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ ์๊ฐ! ์ด ๋ชจ๋ ๋ชจ๋ธ์ AT ๋ช ๋ น์ผ๋ก ์ ์ด๋๋ ๋ชจ๋ ๋ชจ๋์์ ์๋ํ ์ ์์ต๋๋ค.. ๋ชจ๋ ๊ฒ์ด ํจ์ฌ ๊ฐ๋จํด์ง ๊ฒ์ ๋๋ค. ๊ฐ ๋ชจ๋์ ๋ํด PPP ์ฐ๊ฒฐ์ ๋ง๋ ๋ค์ ์๋ํ์ญ์์ค. ํ์ง๋ง ๋ด ๊ฒฝ์ฐ์๋ "์์ "(๋ณด๋ค ์ ํํ๊ฒ๋ udev ๊ท์น์ ๋ฐ๋ฅธ Linux ๋ค์ด๋ฒ)์ด eth ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ๊ณ dhcp๋ฅผ ํตํด ์ฌ๊ธฐ์ IP ์ฃผ์๋ฅผ ํ ๋นํฉ๋๋ค.
๋ ์ด์์ ํผ๋์ ํผํ๊ธฐ ์ํด "๋ชจ๋"์ด๋ผ๋ ๋จ์ด๋ฅผ ์์ด๋ฒ๋ฆฌ๊ณ ๋คํธ์ํฌ ์นด๋์ ๊ฒ์ดํธ์จ์ด๋ผ๊ณ ๋งํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ณธ์ง์ ์ผ๋ก ์ด๋ ์ ๋คํธ์ํฌ ์นด๋๋ฅผ ๊ฒ์ดํธ์จ์ด์ ์ฐ๊ฒฐํ๋ ๊ฒ๊ณผ ๊ฐ๊ธฐ ๋๋ฌธ์
๋๋ค.
๋ชจ๋์ด ํ๋์ธ ๊ฒฝ์ฐ์๋ ํน๋ณํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ง๋ง ๋ ์ด์, ์ฆ n๊ฐ ์กฐ๊ฐ์ด ์๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ๋คํธ์ํฌ ๊ทธ๋ฆผ์ด ๋ํ๋ฉ๋๋ค.
์ฆ, IP ์ฃผ์๊ฐ ๋์ผํ๊ณ ๊ฐ๊ฐ ๊ธฐ๋ณธ ๊ฒ์ดํธ์จ์ด๊ฐ ๋์ผํ n๊ฐ์ ๋คํธ์ํฌ ์นด๋์
๋๋ค. ๊ทธ๋ฌ๋ ์ค์ ๋ก๋ ๊ฐ๊ฐ ์์ฒด ์ด์์์ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค.
์ฒ์์๋ ๊ฐ๋จํ ํด๊ฒฐ์ฑ ์ด ์์์ต๋๋ค. ifconfig ๋๋ ip ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์ธํฐํ์ด์ค๋ฅผ ๋๊ณ ํ๋์ฉ ์ผ์ ํ ์คํธํ๋ ๊ฒ์ด์์ต๋๋ค. ์๋ฃจ์ ์ ์ ํํ๋ ๋์ ์ฅ์น์ ์ฐ๊ฒฐํ ์ ์๋ค๋ ์ ์ ์ ์ธํ๋ฉด ๋ชจ๋์๊ฒ ์ข์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ํ์ด ์ฆ๊ณ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ์ฐ๊ฒฐํ ๊ธฐํ๊ฐ ์ ํ ์์์ต๋๋ค.
๊ทธ๋์ ๋ชจ๋์ IP ์ฃผ์๋ฅผ ์๋์ผ๋ก ๋ณ๊ฒฝํ ๋ค ๋ผ์ฐํ ์ค์ ์ ์ด์ฉํด ํธ๋ํฝ์ ์ ๋ํ๋ ๋ฐฉ์์ ์ ํํ์ต๋๋ค.
์ด๊ฒ์ด ๋ชจ๋ ๋ฌธ์ ์ ๋์ด ์๋์์ต๋๋ค. ์ ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ชจ๋์ด ๋จ์ด์ ธ์ USB ํ๋ธ์ ์์ ์ ์ธ ์ ์ ๊ณต๊ธ ์ฅ์น๊ฐ ํ์ํ์ต๋๋ค. ์ ๋ ์ ์์ ํ๋ธ์ ์ง์ ๋ฉ๋ํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. ๋ด๊ฐ ์ง๋ฉดํ๊ณ ์ ์ฒด ํ๋ก์ ํธ๋ฅผ ๋ง์น ๋ ๋ค๋ฅธ ๋ฌธ์ : ์ฅ์น๋ฅผ ์ฌ๋ถํ
ํ๊ฑฐ๋ ์ฝ๋ ์คํํธํ ํ์ ๋ชจ๋ ๋ชจ๋์ด ๊ฐ์ง๋์ง ์์๊ณ ํญ์ ๊ทธ๋ฐ ๊ฒ์ ์๋์์ผ๋ฉฐ, ์ด๊ฒ์ด ๋ฐ์ํ ์ด์ ์ ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ ์ํด ๋ฐ์ํ๋์ง ํ์ธํ ์ ์์์ต๋๋ค. ํ์ง๋ง ๊ฐ์ฅ ๋จผ์ ํด์ผ ํ ์ผ์ด ์์ต๋๋ค.
๋ชจ๋์ด ์ ๋๋ก ์๋ํ๋ ค๋ฉด usb-modeswitch ํจํค์ง๋ฅผ ์ค์นํ์ต๋๋ค.
sudo apt update
sudo apt install -y usb-modeswitch
๊ทธ๋ฐ ๋ค์ ์ฐ๊ฒฐํ ํ udev ํ์ ์์คํ
์์ ๋ชจ๋์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ฐ์งํ๊ณ ๊ตฌ์ฑํฉ๋๋ค. ๊ฐ๋จํ ๋ชจ๋์ ์ฐ๊ฒฐํ๊ณ ๋คํธ์ํฌ๊ฐ ๋ํ๋๋์ง ํ์ธํ์ฌ ํ์ธํฉ๋๋ค.
์ ๊ฐ ํด๊ฒฐํ ์ ์๋ ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ ์ด ๋ชจ๋์์ ์ฐ๋ฆฌ๊ฐ ํจ๊ป ์์
ํ๊ณ ์๋ ๊ตํ์์ ์ด๋ฆ์ ์ด๋ป๊ฒ ์ ์ ์์ต๋๊น? ์ด์์ ์ด๋ฆ์ ๋ชจ๋ ์น ์ธํฐํ์ด์ค(192.168.8.1)์ ํฌํจ๋์ด ์์ต๋๋ค. ์ด๋ Ajax ์์ฒญ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๋์ ์น ํ์ด์ง์ด๋ฏ๋ก ๋จ์ํ ํ์ด์ง๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ด๋ฆ์ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๊ฒ๋ง์ผ๋ก๋ ์๋ํ์ง ์์ต๋๋ค. ๊ทธ๋์ ์นํ์ด์ง ๋ฑ์ ๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ธฐ ์์ํ๊ณ , ์ ๊ฐ ์ผ์ข
์ ๋ง๋ ์๋๋ ์ผ์ ํ๊ณ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ทธ๋ ์นจ์ ๋ฑ์๊ณ ์ด์์๋ Speedtest API ์์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๊ธฐ ์์ํ์ต๋๋ค.
๋ชจ๋์ด AT ๋ช ๋ น์ ํตํด ์ก์ธ์คํ ์ ์๋ค๋ฉด ํจ์ฌ ๋ ์ฌ์ธ ๊ฒ์ ๋๋ค. ์ฌ๊ตฌ์ฑํ๊ณ , ppp ์ฐ๊ฒฐ์ ๋ง๋ค๊ณ , IP๋ฅผ ํ ๋นํ๊ณ , ํต์ ์ฌ๋ฅผ ๊ตฌํ๋ ๋ฑ์ ์์ ์ด ๊ฐ๋ฅํ ๊ฒ์ ๋๋ค. ํ์ง๋ง ์์ฝ๊ฒ๋ ๋๋ ์ฃผ์ด์ง ์ผ์ ํ๊ณ ์์ต๋๋ค.
GPS
์ ๊ฐ ๋ฐ์ GPS ์์ ๊ธฐ์๋ UART ์ธํฐํ์ด์ค์ ์ ์์ด ์์์ต๋๋ค. ์ต์ ์ ํด๊ฒฐ์ฑ ์ ์๋์์ง๋ง ์ฌ์ ํ ์คํ ๊ฐ๋ฅํ๊ณ ๊ฐ๋จํ์ต๋๋ค. ์์ ๊ธฐ๋ ์ด๋ ๊ฒ ์๊ฒผ์ต๋๋ค.
์์งํ ๋งํด์ GPS ์์ ๊ธฐ๋ก ์์
ํ๋ ๊ฒ์ ์ด๋ฒ์ด ์ฒ์ ์ด์์ง๋ง ์์๋๋ก ๋ชจ๋ ๊ฒ์ด ์ค๋ ์ ์ ์ฐ๋ฆฌ๋ฅผ ์ํด ์๊ฐ๋์์ต๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ๊ธฐ์ฑ ์๋ฃจ์
์ ์ฌ์ฉํฉ๋๋ค.
๋จผ์ uart_AO_B(UART_RX_AO_B, UART_TX_AO_B)๋ฅผ ํ์ฑํํ์ฌ GPS๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค.
khadas@Khadas:~$ sudo fdtput -t s /dtb.img /serial@c81004e0 status okay
๊ทธ๋ฐ ๋ค์ ์์ ์ฑ๊ณต ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค.
khadas@Khadas:~$ fdtget /dtb.img /serial@c81004e0 status
okay
์ด ๋ช ๋ น์ ๋ถ๋ช ํ devtree๋ฅผ ์ฆ์์์ ํธ์งํ๋๋ฐ, ์ด๋ ๋งค์ฐ ํธ๋ฆฌํฉ๋๋ค.
์ด ์์ ์ด ์ฑ๊ณตํ๋ฉด ์ฌ๋ถํ ํ๊ณ GPS ๋ฐ๋ชฌ์ ์ค์นํ์ญ์์ค.
khadas@Khadas:~$ sudo reboot
GPS ๋ฐ๋ชฌ์ ์ค์นํฉ๋๋ค. ๋ชจ๋ ๊ฒ์ ์ค์นํ๊ณ ์ถ๊ฐ ๊ตฌ์ฑ์ ์ํด ์ฆ์ ์๋ผ๋ ๋๋ค.
sudo apt install gpsd gpsd-clients -y
sudo killall gpsd
/* GPS daemon stop/disable */
sudo systemctl stop gpsd.socket
sudo systemctl disable gpsd.socket
์ค์ ํ์ผ์ ํธ์ง ์ค์ ๋๋ค.
sudo vim /etc/default/gpsd
GPS๊ฐ ๊ฑธ๋ฆด UART๋ฅผ ์ค์นํ๊ณ ์์ต๋๋ค.
DEVICES="/dev/ttyS4"
๊ทธ๋ฐ ๋ค์ ๋ชจ๋ ๊ฒ์ ์ผ๊ณ ์์ํฉ๋๋ค.
/* GPS daemon enable/start */
sudo systemctl enable gpsd.socket
sudo systemctl start gpsd.socket
๊ทธ ํ GPS๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค.
GPS ์ ์ ๋ด ์์ ์๊ณ UART ๋๋ฒ๊ฑฐ ์ ์ ๋ด ์๊ฐ๋ฝ ์๋์ ๋ณด์
๋๋ค.
์ฌ๋ถํ ํ gpsmon ํ๋ก๊ทธ๋จ์ ์ด์ฉํ์ฌ GPS ๋์์ ํ์ธํฉ๋๋ค.
์ด ์คํฌ๋ฆฐ์ท์์๋ ์์ฑ์ ๋ณผ ์ ์์ง๋ง GPS ์์ ๊ธฐ์์ ํต์ ์ ๋ณผ ์ ์์ผ๋ฉฐ ์ด๋ ๋ชจ๋ ๊ฒ์ด ์ ์์์ ์๋ฏธํฉ๋๋ค.
Python์์ ์ด ๋ฐ๋ชฌ์ ์ฌ์ฉํ๊ธฐ ์ํด ๋ง์ ์ต์ ์ ์๋ํ์ง๋ง Python 3์์ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋ ์ต์ ์ ์ ํํ์ต๋๋ค.
ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํฉ๋๋ค.
sudo -H pip3 install gps3
๊ทธ๋ฆฌ๊ณ ์์ ์ฝ๋๋ฅผ ์กฐ๊ฐํ์ต๋๋ค.
from gps3.agps3threaded import AGPS3mechanism
...
def getPositionData(agps_thread):
counter = 0;
while True:
longitude = agps_thread.data_stream.lon
latitude = agps_thread.data_stream.lat
if latitude != 'n/a' and longitude != 'n/a':
return '{}' .format(longitude), '{}' .format(latitude)
counter = counter + 1
print ("Wait gps counter = %d" % counter)
if counter == 10:
ErrorMessage("ะัะธะฑะบะฐ GPS ะฟัะธะตะผะฝะธะบะฐ!!!")
return "NA", "NA"
time.sleep(1.0)
...
f __name__ == '__main__':
...
#gps
agps_thread = AGPS3mechanism() # Instantiate AGPS3 Mechanisms
agps_thread.stream_data() # From localhost (), or other hosts, by example, (host='gps.ddns.net')
agps_thread.run_thread() # Throttle time to sleep after an empty lookup, default '()' 0.2 two tenths of a second
์ขํ๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ ๊ฒฝ์ฐ ๋ค์ ํธ์ถ์ ํตํด ์ํ๋ฉ๋๋ค.
longitude, latitude = getPositionData(agps_thread)
๊ทธ๋ฆฌ๊ณ 1~10์ด ์์ ์ขํ๋ฅผ ์ป์์ง ๋ง์ง ๊ฒฐ์ ํ๊ฒ ๋ฉ๋๋ค. ๋ค, ์ขํ๋ฅผ ์ป์ผ๋ ค๊ณ XNUMX๋ฒ์ด๋ ์๋ํ์ด์. ์ต์ ์ ์๋๊ณ ๋น๋ค์ด์ง๊ณ ๋น์ค๋ฌํ์ง๋ง ์๋ํฉ๋๋ค. GPS ์์ ์ด ์ข์ง ์๊ณ ํญ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ์ง ๋ชปํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ฒ ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๋ฐ์ดํฐ ์์ ์ ๊ธฐ๋ค๋ฆฌ๋ค๊ฐ ์๊ฒฉ์ค์์ ์์ ํ๋ฉด ํ๋ก๊ทธ๋จ์ด ์ด๊ณณ์์ ์ ์ง๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋๋ ์ด ์ฐ์ํ์ง ์์ ์ต์ ์ ๊ตฌํํ์ต๋๋ค.
์์น์ ์ผ๋ก ์๊ฐ์ด ๋ ์๋ค๋ฉด UART๋ฅผ ํตํด GPS์์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ ์ด๋ฅผ ๋ณ๋์ ์ค๋ ๋์์ ๊ตฌ๋ฌธ ๋ถ์ํ์ฌ ์์ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ ๊ฒ์ ๋๋ค. ํ์ง๋ง ์๊ฐ์ด ์ ํ ์์๊ธฐ ๋๋ฌธ์ ์์ธํ ์ ๋๋ก ์ถ์ ํ ์ฝ๋๊ฐ ์์ฑ๋์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค, ์ ๋ ๋ถ๋๋ฝ์ง ์์ต๋๋ค.
๋ฐ๊ด ๋ค์ด์ค๋
LED๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒ์ ๊ฐ๋จํ๋ฉด์๋ ์ด๋ ค์ ์ต๋๋ค. ๊ฐ์ฅ ํฐ ์ด๋ ค์์ ์์คํ ์ ํ ๋ฒํธ๊ฐ ๋ณด๋์ ํ ๋ฒํธ์ ์ผ์นํ์ง ์๊ณ ๋ฌธ์๊ฐ ์ผ์์ผ๋ก ์์ฑ๋๋ค๋ ๊ฒ์ ๋๋ค. ํ๋์จ์ด ํ ๋ฒํธ์ OS์ ํ ๋ฒํธ๋ฅผ ๋น๊ตํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํด์ผ ํฉ๋๋ค.
gpio readall
์์คํ ๊ณผ ๋ณด๋์ ํ ๋์ ํ๊ฐ ํ์๋ฉ๋๋ค. ๊ทธ ํ์๋ ์ด๋ฏธ OS ์์ฒด์์ ํ์ ์๋ํ ์ ์์ต๋๋ค. ์ ๊ฒฝ์ฐ์๋ LED๊ฐ ๋ค์๊ณผ ๊ฐ์ด ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค. GPIOH_5.
GPIO ํ์ ์ถ๋ ฅ ๋ชจ๋๋ก ์ ํํฉ๋๋ค.
gpio -g mode 421 out
์ ๋ XNUMX์ผ๋ก ์๋๋ค.
gpio -g write 421 0
ํ๋ ์ ์ด๋ด ๋๋ค.
gpio -g write 421 1
"1"์ ์ด ํ ๋ชจ๋ ๊ฒ์ด ์ผ์ง๋๋ค.
#gpio subsistem
def gpio_init():
os.system("gpio -g mode 421 out")
os.system("gpio -g write 421 1")
def gpio_set(val):
os.system("gpio -g write 421 %d" % val)
def error_blink():
gpio_set(0)
time.sleep(0.1)
gpio_set(1)
time.sleep(0.1)
gpio_set(0)
time.sleep(0.1)
gpio_set(1)
time.sleep(0.1)
gpio_set(0)
time.sleep(1.0)
gpio_set(1)
def good_blink():
gpio_set(1)
์ด์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ error_blink()๋ฅผ ํธ์ถํ๋ฉด LED๊ฐ ์๋ฆ๋ต๊ฒ ๊น๋ฐ์ ๋๋ค.
์ํํธ์จ์ด ๋ ธ๋
์๋ ํ ์คํธ API
speedtest.net ์๋น์ค์ ์์ฒด Python-API๊ฐ ์๋ค๋ ๊ฒ์ ํฐ ๊ธฐ์จ์
๋๋ค.
์ข์ ์ ์ ์์ค์ฝ๋๋ ๋ณผ ์ ์๋ค๋ ์ ์ด๋ค. ์ด API๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ(๊ฐ๋จํ ์)์ ๋ค์์์ ์ฐพ์ ์ ์์ต๋๋ค.
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํฉ๋๋ค.
sudo -H pip3 install speedtest-cli
์๋ฅผ ๋ค์ด ์ํํธ์จ์ด์์ ์ง์ Ubuntu์ ์๋ ํ ์คํฐ๋ฅผ ์ค์นํ ์๋ ์์ต๋๋ค. ์ด๋ ๋์ผํ Python ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฉฐ ์ฝ์์์ ์ง์ ์คํํ ์ ์์ต๋๋ค.
sudo apt install speedtest-cli -y
๊ทธ๋ฆฌ๊ณ ์ธํฐ๋ท ์๋๋ฅผ ์ธก์ ํด ๋ณด์ธ์.
speedtest-cli
Retrieving speedtest.net configuration...
Testing from B***** (*.*.*.*)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by MTS (Moscow) [0.12 km]: 11.8 ms
Testing download speed................................................................................
Download: 7.10 Mbit/s
Testing upload speed......................................................................................................
Upload: 3.86 Mbit/s
๊ฒฐ๊ณผ์ ์ผ๋ก๋ ๋์ฒ๋ผ ๋๋ค. ๋๋ ์ด ์๋ ํ ์คํธ์ ์์ค ์ฝ๋๋ฅผ ๋ด ํ๋ก์ ํธ์ ๋ ์๋ฒฝํ๊ฒ ๊ตฌํํ๊ธฐ ์ํด ๋ค์ด๊ฐ์ผ ํ์ต๋๋ค. ๊ฐ์ฅ ์ค์ํ ์์ ์ค ํ๋๋ ๋ฒํธํ์ ๋์ฒดํ๊ธฐ ์ํด ํต์ ์ฌ์ ์์ ์ด๋ฆ์ ์์๋ด๋ ๊ฒ์ ๋๋ค.
import speedtest
from datetime import datetime
...
#ะฃะบะฐะทัะฒะฐะตะผ ะบะพะฝะบัะตัะฝัะน ัะตัะฒะตั ะดะปั ัะตััะฐ
#6053) MaximaTelecom (Moscow, Russian Federation)
servers = ["6053"]
# If you want to use a single threaded test
threads = None
s = speedtest.Speedtest()
#ะฟะพะปััะฐะตะผ ะธะผั ะพะฟะตัะฐัะพัะฐ ัะพัะพะฒะพะน ัะฒัะทะธ
opos = '%(isp)s' % s.config['client']
s.get_servers(servers)
#ะฟะพะปััะฐะตะผ ัะตะบััะพะฒัั ัััะพะบั ั ะฟะฐัะฐะผะตััะฐะผะธ ัะตัะฒะตัะฐ
testserver = '%(sponsor)s (%(name)s) [%(d)0.2f km]: %(latency)s ms' % s.results.server
#ัะตัั ะทะฐะณััะทะบะธ
s.download(threads=threads)
#ัะตัั ะฒัะณััะทะบะธ
s.upload(threads=threads)
#ะฟะพะปััะฐะตะผ ัะตะทัะปััะฐัั
s.results.share()
#ะะพัะปะต ัะตะณะพ ัะพัะผะธััะตััั ัััะพะบะฐ ะดะปั ะทะฐะฟะธัะธ ะฒ csv-ัะฐะนะป.
#ะฟะพะปััะฐะตะผ ะฟะพะทะธัะธั GPS
longitude, latitude = getPositionData(agps_thread)
#ะฒัะตะผั ะธ ะดะฐัะฐ
curdata = datetime.now().strftime('%d.%m.%Y')
curtime = datetime.now().strftime('%H:%M:%S')
delimiter = ';'
result_string = opos + delimiter + str(curpos) + delimiter +
curdata + delimiter + curtime + delimiter + longitude + ', ' + latitude + delimiter +
str(s.results.download/1000.0/1000.0) + delimiter + str(s.results.upload / 1000.0 / 1000.0) +
delimiter + str(s.results.ping) + delimiter + testserver + "n"
#ััั ะธะดะตั ะทะฐะฟะธัั ะฒ ัะฐะนะป ะปะพะณะพะฒ
ํจ์ฌ ๋ ๋จ์ ํด ๋ณด์ด์ง๋ง ์ฌ๊ธฐ์์๋ ๋ชจ๋ ๊ฒ์ด ๊ทธ๋ ๊ฒ ๋จ์ํ์ง ์์ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ์ฒ์์๋ ์๋ฒ ๋งค๊ฐ๋ณ์๊ฐ ๋ค์๊ณผ ๊ฐ์์ต๋๋ค. [], ๊ทธ๋ค์ ์ต๊ณ ์ ์๋ฒ๋ฅผ ์ ํํ๋ค๊ณ ๋งํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋๋ ์์์ ์๋ฒ๋ฅผ ๊ฐ๊ฒ ๋์๊ณ , ์ง์ํ ์ ์๋ฏ์ด ๊ฐ๋ณ์ ์ธ ์๋๋ฅผ ๊ฐ๊ฒ ๋์์ต๋๋ค. ์ด๋ ๊ณ ์ ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ ๋งค์ฐ ๋ณต์กํ ์ฃผ์ ์ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ ์ ๋๋ ๋์ ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ฐ๊ตฌ๊ฐ ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ค์์ ํ ์คํธ ์๋ฒ๋ฅผ ๋์ ์ผ๋ก ์ ํํ ๋์ ์ ์ ์ผ๋ก ๊ณ ์ ๋ ์๋ฒ๋ฅผ ์ ํํ ๋ Beeline ์ด์์๋ฅผ ์ํ ์๋ ์ธก์ ๊ทธ๋ํ์ ์์ ๋๋ค.
๋์ ์๋ฒ๋ฅผ ์ ํํ ๋ ์๋๋ฅผ ์ธก์ ํ ๊ฒฐ๊ณผ์
๋๋ค.
์์ ๋ ํ๋์ ์๋ฒ๋ฅผ ๋์์ผ๋ก ์๋ ํ
์คํธ๋ฅผ ์ค์ํ ๊ฒฐ๊ณผ์
๋๋ค.
ํ
์คํธํ๋ ๋์ ์์ชฝ์ "ํธ"์ด ์์ผ๋ฉฐ ์ํ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ์ ๊ฑฐํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ณ ์ ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๊ฐ ์ ๊ณ ์งํญ์ด ๋ ์์ ์ ์
๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ด๊ณณ์ ํ๋ฅญํ ์ฐ๊ตฌ ์ฅ์์
๋๋ค. ๊ทธ๋ฆฌ๊ณ iperf ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์ ์๋๋ฅผ ์ธก์ ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๊ธฐ์ ์ฌ์์ ๊ณ ์ํฉ๋๋ค.
๋ฉ์ผ ๋ณด๋ด๊ธฐ ๋ฐ ์ค๋ฅ
๋ฉ์ผ์ ๋ณด๋ด๊ธฐ ์ํด ์์ญ ๊ฐ์ง ๋ค๋ฅธ ์ต์
์ ์๋ํ์ง๋ง ๊ฒฐ๊ตญ ๋ค์์ผ๋ก ๊ฒฐ์ ํ์ต๋๋ค. Yandex์ ์ฌ์ํจ์ ๋ฑ๋กํ ๋ค์
์ค์ผ์ค๋ฌ์ ๋ฐ๋ผ ๋ก๊ทธ๊ฐ ์ ์ก๋์์ผ๋ฉฐ, ์ฐ๊ฒฐ์ด ์๋ค๋ฉด, 6์๊ฐ๋ง๋ค: 00์, ์ค์ 06์, ์ ์ค 12์, ์คํ 18์. ์๋์ ๊ฐ์ด ๋ณด๋์ต๋๋ค.
from send_email import *
...
message_log = "ะะพะณะธ ัะตััะธัะพะฒะฐะฝะธั ะฟะปะฐัั โ1"
EmailForSend = ["[email protected]", "[email protected]"]
files = ["/home/khadas/modems_speedtest/csv"]
...
def sendLogs():
global EmailForSend
curdata = datetime.now().strftime('%d.%m.%Y')
ัurtime = datetime.now().strftime('%H:%M:%S')
try:
for addr_to in EmailForSend:
send_email(addr_to, message_log, "ะะพะณะธ ะทะฐ " + curdata + " " + ัurtime, files)
except:
print("Network problem for send mail")
return False
return True
์ฒ์์๋ ์ค๋ฅ๋ ์ ์ก๋์์ต๋๋ค. ์ฐ์ ๋ชฉ๋ก์ ๋์ ๋ ๋ค์ ์ฐ๊ฒฐ์ด ์์ผ๋ฉด ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ก๋ฉ๋๋ค. ๊ทธ๋ฌ๋ Yandex์๋ ํ๋ฃจ์ ์ ์ก๋๋ ๋ฉ์์ง ์์ ์ ํ์ด ์๋ค๋ ์ฌ์ค(๊ณ ํต, ์ฌํ, ๊ตด์๊ฐ)์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ถ๋น์ด๋ผ๋ ์์ฒญ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฉ์ผ๋ก ์ค๋ฅ๋ฅผ ๋ณด๋ด๋ ๊ฒ์ ํฌ๊ธฐํด์ผ ํ์ต๋๋ค. ๋ฐ๋ผ์ Yandex ์๋น์ค๋ฅผ ํตํด ์ด๋ฌํ ๋ฌธ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์๋์ผ๋ก ๋ณด๋ผ ๋ ๋ช ์ฌํ์ญ์์ค.
ํผ๋๋ฐฑ ์๋ฒ
์๊ฒฉ ํ๋์จ์ด์ ์ก์ธ์คํ๊ณ ์ด๋ฅผ ์ฌ์ฉ์ ์ ์ํ๊ณ ์ฌ๊ตฌ์ฑํ๋ ค๋ฉด ์ธ๋ถ ์๋ฒ๊ฐ ํ์ํ์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๊ณต์ ํ๊ฒ ๋งํ๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ๋ณด๋ด๊ณ ์น ์ธํฐํ์ด์ค์์ ์๋ฆ๋ค์ด ๊ทธ๋ํ๋ฅผ ๋ชจ๋ ์์ฑํ๋ ๊ฒ์ด ์ณ์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ํ๊บผ๋ฒ์๋ ์๋๋๋ค.
VPS๋ฅผ ์ ํํ์ต๋๋ค
ํ๋์จ์ด์์ ํต์ ๋ฐฉ๋ฒ์ผ๋ก vim2๋ ์ญ๋ฐฉํฅ SSH ์ฐ๊ฒฐ์ ์ ํํ์ผ๋ฉฐ ์ค์ต์์ ์ ์ ์๋ฏ์ด ์ด๊ฒ์ด ์ต์ ์ ์๋๋๋ค. ์ฐ๊ฒฐ์ด ๋์ด์ง๋ฉด ์๋ฒ๊ฐ ํฌํธ๋ฅผ ๋ณด์ ํ๊ณ ์์ด ์ผ์ ์๊ฐ ๋์ ํด๋น ํฌํธ๋ฅผ ํตํ ์ฐ๊ฒฐ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ๋ผ์ VPN๊ณผ ๊ฐ์ ๋ค๋ฅธ ํต์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค. ๋์ค์ VPN์ผ๋ก ์ ํํ๊ณ ์ถ์์ง๋ง ์๊ฐ์ด ์์์ต๋๋ค.
๋ฐฉํ๋ฒฝ ์ค์ , ๊ถํ ์ ํ, ๋ฃจํธ SSH ์ฐ๊ฒฐ ๋นํ์ฑํ ๋ฐ ๊ธฐํ VPS ์ค์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ค๋ฃจ์ง ์๊ฒ ์ต๋๋ค. ๋๋ ๋น์ ์ด ์ด๋ฏธ ๋ชจ๋ ๊ฒ์ ์๊ณ ์๋ค๊ณ ๋ฏฟ๊ณ ์ถ์ต๋๋ค. ์๊ฒฉ ์ฐ๊ฒฐ์ ๊ฒฝ์ฐ ์๋ฒ์ ์ ์ฌ์ฉ์๋ฅผ ๋ง๋ญ๋๋ค.
adduser vimssh
ํ๋์จ์ด์์ SSH ์ฐ๊ฒฐ ํค๋ฅผ ์์ฑํฉ๋๋ค.
ssh-keygen
๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์ฐ๋ฆฌ ์๋ฒ์ ๋ณต์ฌํฉ๋๋ค.
ssh-copy-id [email protected]
์ฐ๋ฆฌ ํ๋์จ์ด์์๋ ๋ถํ ํ ๋๋ง๋ค ์๋ ์ญ๋ฐฉํฅ SSH ์ฐ๊ฒฐ์ ์์ฑํฉ๋๋ค.
[Unit]
Description=Auto Reverse SSH
Requires=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service
[Service]
User=khadas
ExecStart=/usr/bin/ssh -NT -o ExitOnForwardFailure=yes -o ServerAliveInterval=60 -CD 8080 -R 8083:localhost:22 [email protected]
RestartSec=5
Restart=always
[Install]
WantedBy=multi-user.target
ํฌํธ 8083์ ์ฃผ์ํ์ธ์. ์ด๋ ์ญ๋ฐฉํฅ SSH๋ฅผ ํตํด ์ฐ๊ฒฐํ๋ ๋ฐ ์ฌ์ฉํ ํฌํธ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์์์ ์ถ๊ฐํ๊ณ ์์ํ์ญ์์ค.
sudo systemctl enable autossh.service
sudo systemctl start autossh.service
์ํ๋ ํ์ธํ ์ ์์ต๋๋ค.
sudo systemctl status autossh.service
์ด์ VPS ์๋ฒ์์ ๋ค์์ ์คํํ๋ฉด:
ssh -p 8083 khadas@localhost
๊ทธ๋ฐ ๋ค์ ํ๋์จ์ด ํ ์คํธ๋ฅผ ์งํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋์จ์ด์์ SSH๋ฅผ ํตํด ๋ก๊ทธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด ์๋ฒ๋ก ๋ณด๋ผ ์๋ ์๋๋ฐ, ์ด๋ ๋งค์ฐ ํธ๋ฆฌํฉ๋๋ค.
๊ทธ๊ฒ์ ํ๋๋ก ๋ชจ์ผ๊ธฐ
์ค์์น๋ฅผ ์ผ๊ณ ๊ฐ๋ฐ๊ณผ ๋๋ฒ๊น
์ ์์ํด๋ณด์
ํด, ๊ทธ๊ฒ ๋ค์
๋๋ค. ๋ชจ๋ ๋
ธ๋๋ฅผ ์ค๋ช
ํ์ต๋๋ค. ์ด์ ๋ชจ๋ ๊ฒ์ ํ๋๋ก ๋ชจ์ ์๊ฐ์
๋๋ค. ์ฝ๋๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
์ฝ๋์ ๋ํ ์ค์ํ ์ : ์ด ํ๋ก์ ํธ๋ ํน์ ์ํคํ ์ฒ์ ํน์ ์์ ์ ๋ง๊ฒ ์กฐ์ ๋์๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ฒ ์์๋์ง ์์ ์ ์์ต๋๋ค. ์์ค ์ฝ๋๋ฅผ ์ ๊ณตํ๋๋ผ๋ ๊ฐ์ฅ ์ค์ํ ๋ด์ฉ์ ์ฌ๊ธฐ์ ๋ฐ๋ก ํ ์คํธ๋ก ์ค๋ช ํ๊ฒ ์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์์ ํ ์ดํดํ ์ ์์ต๋๋ค.
์ฒ์์๋ gps, gpio๋ฅผ ์ด๊ธฐํํ๊ณ ๋ณ๋์ ์ค์ผ์ค๋ฌ ์ค๋ ๋๋ฅผ ์์ํฉ๋๋ค.
#ะทะฐะฟััะบ ะฟะพัะพะบะฐ ะฟะปะฐะฝะธัะพะฒัะธะบะฐ
pShedulerThread = threading.Thread(target=ShedulerThread, args=(1,))
pShedulerThread.start()
์ค์ผ์ค๋ฌ๋ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ์๊ฐ์ด ๋์๋์ง, ํ์ฌ ์ค๋ฅ ์ํ๊ฐ ๋ฌด์์ธ์ง ํ์ธํฉ๋๋ค. ์ค๋ฅ ํ๋๊ทธ๊ฐ ์์ผ๋ฉด LED๋ฅผ ๊น๋ฐ์ ๋๋ค.
#sheduler
def ShedulerThread(name):
global ready_to_send
while True:
d = datetime.today()
time_x = d.strftime('%H:%M')
if time_x in time_send_csv:
ready_to_send = True
if error_status:
error_blink()
else:
good_blink()
time.sleep(1)
์ด ํ๋ก์ ํธ์์ ๊ฐ์ฅ ์ด๋ ค์ด ๋ถ๋ถ์ ๊ฐ ํ ์คํธ๋ง๋ค ์ญ๋ฐฉํฅ SSH ์ฐ๊ฒฐ์ ์ ์งํ๋ ๊ฒ์ ๋๋ค. ๊ฐ ํ ์คํธ์๋ ๊ธฐ๋ณธ ๊ฒ์ดํธ์จ์ด์ DNS ์๋ฒ ์ฌ๊ตฌ์ฑ์ด ํฌํจ๋ฉ๋๋ค. ์ด์จ๋ ์๋ฌด๋ ์ฑ ์ ์ฝ์ง ์๊ธฐ ๋๋ฌธ์ ๊ธฐ์ฐจ๋ ๋๋ฌด ๋๊ฐ ์๋ก ์ดํ๋์ง ์๋๋ค๋ ๊ฒ์ ์์๋์ญ์์ค. ๋ถํ์ ๋ฌ๊ฑ์ ์ฐพ์ ์ฌ๋์ ์ฌํ์ ์ป์ต๋๋ค.
์ด๋ฅผ ์ํด ๋ณ๋์ ๋ผ์ฐํ ํ ์ด๋ธ -set-mark 0x2์ ํธ๋ํฝ์ ๋ฆฌ๋๋ ์ ํ๋ ๊ท์น์ ๋ง๋ญ๋๋ค.
def InitRouteForSSH():
cmd_run("sudo iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 22 -j MARK --set-mark 0x2")
cmd_run("sudo ip rule add fwmark 0x2/0x2 lookup 102")
์๋ ๋ฐฉ์์ ๋ํด ์์ธํ ์์๋ณผ ์ ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ๋์๋ ๋ฃจํ์ ๋ค์ด๊ฐ ๋งค๋ฒ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋ชฉ๋ก์ ์ป์ต๋๋ค(๋คํธ์ํฌ ๊ตฌ์ฑ์ด ๊ฐ์๊ธฐ ๋ณ๊ฒฝ๋์๋์ง ํ์ธํ๊ธฐ ์ํด).
network_list = getNetworklist()
๋คํธ์ํฌ ์ธํฐํ์ด์ค ๋ชฉ๋ก์ ์ป๋ ๊ฒ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.
def getNetworklist():
full_networklist = os.listdir('/sys/class/net/')
network_list = [x for x in full_networklist if "eth" in x and x != "eth0"]
return network_list
๋ชฉ๋ก์ ๋ฐ์ ํ ๋ชจ๋์ ๊ดํ ์ฅ์ ๊ทธ๋ฆผ์ ํ์๋ ๊ฒ์ฒ๋ผ ๋ชจ๋ ์ธํฐํ์ด์ค์ IP ์ฃผ์๋ฅผ ์ค์ ํ์ต๋๋ค.
SetIpAllNetwork(network_list)
def SetIpAllNetwork(network_list):
for iface in network_list:
lastip = "%d" % (3 + network_list.index(iface))
cmd_run ("sudo ifconfig " + iface + " 192.168.8." + lastip +" up")
๊ทธ๋ฐ ๋ค์ ๋ฃจํ์ ๊ฐ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ๋จํ ์ดํด๋ด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
for iface in network_list:
ConfigNetwork(iface)
def ConfigNetwork(iface):
#ัะฑัะฐััะฒะฐะตะผ ะฒัะต ะฝะฐัััะพะนะบะธ
cmd_run("sudo ip route flush all")
#ะะฐะทะฝะฐัะฐะตะผ ัะปัะท ะฟะพ ัะผะพะปัะฐะฝะธั
cmd_run("sudo route add default gw 192.168.8.1 " + iface)
#ะทะฐะดะฐะตะผ dns-ัะตัะฒะตั (ััะพ ะฝัะถะฝะพ ะดะปั ัะฐะฑะพัั speedtest)
cmd_run ("sudo bash -c 'echo nameserver 8.8.8.8 > /etc/resolv.conf'")
์ธํฐํ์ด์ค์ ๊ธฐ๋ฅ์ ํ์ธํ๋๋ฐ, ๋คํธ์ํฌ๊ฐ ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋คํธ์ํฌ๊ฐ ์๋ค๋ฉด ์ด์ ํ๋์ ๋์์ผ ํฉ๋๋ค!
์ฌ๊ธฐ์๋ ์ด ์ธํฐํ์ด์ค์ ๋ํ SSH ๋ผ์ฐํ ์ ๊ตฌ์ฑํ๊ณ (์์ง ์๋ฃ๋์ง ์์ ๊ฒฝ์ฐ), ์๊ฐ์ด ๋๋ฉด ์๋ฒ์ ์ค๋ฅ๋ฅผ ๋ณด๋ด๊ณ , ๋ก๊ทธ๋ฅผ ๋ณด๋ด๊ณ , ๋ง์ง๋ง์ผ๋ก ์๋ ํ ์คํธ๋ฅผ ์คํํ๊ณ ๋ก๊ทธ๋ฅผ csv ํ์ผ์ ์ ์ฅํฉ๋๋ค.
if not NetworkAvalible():
....
#ะะดะตัั ะผั ัะพัะผะธััะตะผ ะพัะธะฑะบะธ
....
else: #ะััั ัะตัั, ััะฐ, ัะฐะฑะพัะฐะตะผ!
#ะัะปะธ ั ะฝะฐั ะฟัะพะฑะปะตะผะฝัะน ะธะฝัะตััะตะนั, ะฝะฐ ะบะพัะพัะพะผ ssh, ัะพ ะผะตะฝัะตะผ ะตะณะพ
if (sshint == lastbanint or sshint =="free"):
print("********** Setup SSH ********************")
if sshint !="free":
ัmd_run("sudo ip route del default via 192.168.8.1 dev " + sshint +" table 102")
SetupReverseSSH(iface)
sshint = iface
#ัะฐะท ัะตัะบะฐ ัะฐะฑะพัะฐะตั, ัะพ ะดะฐะฒะฐะน ััะพัะฝะพ ะฒัะต ะพัะฟัะฐะฒะธะผ!!!
if ready_to_send:
print ("**** Ready to send!!!")
if sendLogs():
ready_to_send = False
if error_status:
SendErrors()
#ะธ ะดะฐะปะตะต ัะตััะธััะตะผ ัะบะพัะพััั ะธ ัะพั
ัะฐะฝัะตะผ ะปะพะณะธ.
์ญ๋ฐฉํฅ SSH๋ฅผ ์ค์ ํ๋ ๊ธฐ๋ฅ์ ์ธ๊ธํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
def SetupReverseSSH(iface):
cmd_run("sudo systemctl stop autossh.service")
cmd_run("sudo ip route add default via 192.168.8.1 dev " + iface +" table 102")
cmd_run("sudo systemctl start autossh.service")
๋ฌผ๋ก ์ด ๋ชจ๋ ์๋ฆ๋ค์์ ์คํํธ์ ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด ํ์ผ์ ๋ง๋ญ๋๋ค.
sudo vim /etc/systemd/system/modems_speedtest.service
๊ทธ๋ฆฌ๊ณ ๋๋ ๊ทธ ์์ ์ด๋ ๊ฒ ์๋๋ค.
[Unit]
Description=Modem Speed Test
Requires=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service
[Service]
User=khadas
ExecStart=/usr/bin/python3.6 /home/khadas/modems_speedtest/networks.py
RestartSec=5
Restart=always
[Install]
WantedBy=multi-user.target
์๋ ๋ก๋ฉ์ ์ผ๊ณ ์์ํฉ๋๋ค!
sudo systemctl enable modems_speedtest.service
sudo systemctl start modems_speedtest.service
์ด์ ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง์ ๋ํ ๋ก๊ทธ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
journalctl -u modems_speedtest.service --no-pager -f
์กฐ์ฌ ๊ฒฐ๊ณผ
์, ์ด์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๊ทธ ๊ฒฐ๊ณผ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋๊ฐ ํ๋ ๊ฒ์ ๋๋ค. ๋ค์์ ๊ฐ๋ฐ ๋ฐ ๋๋ฒ๊น ๊ณผ์ ์์ ์บก์ฒํ ๋ช ๊ฐ์ง ๊ทธ๋ํ์ ๋๋ค. ๊ทธ๋ํ๋ ๋ค์ ์คํฌ๋ฆฝํธ์ ํจ๊ป gnuplot์ ์ฌ์ฉํ์ฌ ์์ฑ๋์์ต๋๋ค.
#! /usr/bin/gnuplot -persist
set terminal postscript eps enhanced color solid
set output "Rostelecom.ps"
#set terminal png size 1024, 768
#set output "Rostelecom.png"
set datafile separator ';'
set grid xtics ytics
set xdata time
set ylabel "Speed Mb/s"
set xlabel 'Time'
set timefmt '%d.%m.%Y;%H:%M:%S'
set title "Rostelecom Speed"
plot "Rostelecom.csv" using 3:6 with lines title "Download", '' using 3:7 with lines title "Upload"
set title "Rostelecom 2 Ping"
set ylabel "Ping ms"
plot "Rostelecom.csv" using 3:8 with lines title "Ping"
์ฒซ ๋ฒ์งธ ๊ฒฝํ์ ์ ๊ฐ ๋ฉฐ์น ๋์ ์งํํ Tele2 ์ด์์์์ ๊ฒฝํ์ด์์ต๋๋ค.
์ฌ๊ธฐ์๋ ๋์ ์ธก์ ์๋ฒ๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ์๋ ์ธก์ ์ ์๋ํ์ง๋ง ๋ณ๋์ด ๋งค์ฐ ์ฌํ์ง๋ง ์ผ๋ถ ํ๊ท ๊ฐ์ ์ฌ์ ํ โโํ์๋๋ฉฐ ์ด๋ ์ด๋ ํ๊ท ๋ฑ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํํฐ๋งํ์ฌ ์ป์ ์ ์์ต๋๋ค.
๋์ค์ ๋๋ ๋ค๋ฅธ ํต์ ์ฌ์ ์๋ฅผ ์ํด ์ฌ๋ฌ ๊ทธ๋ํ๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ด๋ฏธ ํ ์คํธ ์๋ฒ๊ฐ ํ๋ ์์๋๋ฐ, ๊ทธ ๊ฒฐ๊ณผ๋ ๋งค์ฐ ํฅ๋ฏธ๋ก์ ์ต๋๋ค.
๋ณด์๋ค์ํผ, ์ด ์ฃผ์ ๋ ์ด ๋ฐ์ดํฐ์ ์ฐ๊ตฌ ๋ฐ ์ฒ๋ฆฌ์ ๋งค์ฐ ๊ด๋ฒ์ํ๋ฉฐ ๋ถ๋ช
ํ ๋ช ์ฃผ ๋์ ์ง์๋์ง ์์ต๋๋ค. ํ์ง๋งโฆ
์์ ๊ฒฐ๊ณผ
์ ๊ฐ ํต์ ํ ์ ์๋ ์ํฉ์ผ๋ก ์ธํด ์์ ์ด ๊ฐ์๊ธฐ ์๋ฃ๋์์ต๋๋ค. ๋ด ์ฃผ๊ด์ ์ธ ๊ฒฌํด๋ก๋ ์ด ํ๋ก์ ํธ์ ์ฝ์ ์ค ํ๋๋ ๋ค๋ฅธ ๋ชจ๋๊ณผ ๋์์ ์๋ํ๋ ๊ฒ์ ์ค์ ๋ก ์ํ์ง ์๊ณ ๋ก๋๋ ๋๋ง๋ค ๊ทธ๋ฌํ ํธ๋ฆญ์ ๋ง๋๋ ๋ชจ๋์ด์์ต๋๋ค. ์ด๋ฌํ ๋ชฉ์ ์ ์ํด ์๋ง์ ๋ค๋ฅธ ๋ชจ๋ ๋ชจ๋ธ์ด ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฏธ Mini PCI-e ํ์์ผ๋ก ๋์ด ์๊ณ ์ฅ์น ๋ด๋ถ์ ์ค์น๋์ด ์์ผ๋ฉฐ ๊ตฌ์ฑ์ด ํจ์ฌ ์ฝ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์์ ํ ๋ค๋ฅธ ์ด์ผ๊ธฐ์ ๋๋ค. ํ๋ก์ ํธ๊ฐ ํฅ๋ฏธ๋ก์ ๊ณ ์ฐธ์ฌํ ์ ์์ด์ ๋งค์ฐ ๊ธฐ๋ปค์ต๋๋ค.
์ถ์ฒ : habr.com