์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ

๊ฒฉ๋ฆฌ ๊ธฐ๊ฐ„ ๋™์•ˆ ์ €๋Š” ์—ฌ๋Ÿฌ ์ด๋™ํ†ต์‹ ์‚ฌ์˜ LTE ๋ชจ๋Ž€ ์†๋„๋ฅผ ์ธก์ •ํ•˜๋Š” ์žฅ์น˜ ๊ฐœ๋ฐœ์— ์ฐธ์—ฌํ•˜๋ผ๋Š” ์ œ์•ˆ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ

๊ณ ๊ฐ์€ ์˜ˆ๋ฅผ ๋“ค์–ด ๋น„๋””์˜ค ๋ฐฉ์†ก์„ ์œ„ํ•ด LTE ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ์žฅ๋น„๋ฅผ ์„ค์น˜ํ•  ๋•Œ ์–ด๋Š ์ด๋™ํ†ต์‹ ์‚ฌ๊ฐ€ ์ž์‹ ์—๊ฒŒ ๊ฐ€์žฅ ์ ํ•ฉํ•œ์ง€ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์ง€๋ฆฌ์  ์œ„์น˜์— ์žˆ๋Š” ๋‹ค์–‘ํ•œ ํ†ต์‹  ์‚ฌ์—…์ž์˜ ์†๋„๋ฅผ ํ‰๊ฐ€ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— ๊ฐ’๋น„์‹ผ ์žฅ๋น„ ์—†์ด ์ตœ๋Œ€ํ•œ ๊ฐ„๋‹จํ•˜๊ณ  ์ €๋ ดํ•˜๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ์ž‘์—…์€ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ณ  ์ง€์‹ ์ง‘์•ฝ์ ์ด์ง€ ์•Š๋‹ค๋Š” ์ ์„ ์ฆ‰์‹œ ๋ง์”€ ๋“œ๋ฆฌ๋ฉฐ, ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€, ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ์•Œ๋ ค ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ž, ๊ฐ€์ž.

์ฃผ์˜

LTE ์—ฐ๊ฒฐ ์†๋„๋ฅผ ์ธก์ •ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋ณต์žกํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ์žฅ๋น„์™€ ์ธก์ • ๊ธฐ์ˆ ์„ ์„ ํƒํ•ด์•ผ ํ•˜๋ฉฐ ์…€๋ฃฐ๋Ÿฌ ๋„คํŠธ์›Œํฌ์˜ ํ† ํด๋กœ์ง€์™€ ์ž‘๋™์„ ์ž˜ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์†๋„๋Š” ์…€์˜ ๊ฐ€์ž…์ž ์ˆ˜, ๊ธฐ์ƒ ์กฐ๊ฑด, ์…€ ๊ฐ„ ์†๋„ ๋“ฑ ์—ฌ๋Ÿฌ ์š”์ธ์˜ ์˜ํ–ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋„คํŠธ์›Œํฌ ํ† ํด๋กœ์ง€๋กœ ์ธํ•ด ์†๋„๊ฐ€ ํฌ๊ฒŒ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Š” ์•Œ๋ ค์ง€์ง€ ์•Š์€ ๋ฌธ์ œ๊ฐ€ ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์€ ๋ฌธ์ œ์ด๋ฉฐ, ํ†ต์‹  ์‚ฌ์—…์ž๋งŒ์ด ์ด ๋ฌธ์ œ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ์— ๊ณ ๊ฐ์€ ๊ตํ™˜์›์˜ ํœด๋Œ€ํฐ์„ ๊ฐ€์ง€๊ณ  ํƒ๋ฐฐ๊ธฐ์‚ฌ๋ฅผ ์šด์ „ํ•˜๊ณ , ํœด๋Œ€ํฐ์œผ๋กœ ์ง์ ‘ ์ธก์ •ํ•œ ๋‹ค์Œ, ์†๋„ ์ธก์ • ๊ฒฐ๊ณผ๋ฅผ ๋…ธํŠธ๋ถ์— ๊ธฐ๋กํ•˜๊ธฐ๋ฅผ ์›ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ƒ์ ์ด์ง€๋Š” ์•Š์ง€๋งŒ LTE ๋„คํŠธ์›Œํฌ ์†๋„๋ฅผ ์ธก์ •ํ•˜๋Š” ์†”๋ฃจ์…˜์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์‹œ๊ฐ„์ด ๋ถ€์กฑํ•ด์„œ ํŽธ์˜์„ฑ์ด๋‚˜ ์‹ค์šฉ์„ฑ์ด ์•„๋‹Œ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ์šฐ์„ ์œผ๋กœ ๊ฒฐ์ •์„ ๋‚ด๋ ธ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ๋ฒ„ ๋ฐ ๊ฐ ๊ฐœ๋ณ„ ํด๋ผ์ด์–ธํŠธ ์„ค์ •์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•˜๊ธฐ ์œ„ํ•ด ๋ณด๋‹ค ์‹ค์šฉ์ ์ธ VPN ๋Œ€์‹  ์›๊ฒฉ ์•ก์„ธ์Šค์— ์—ญ๋ฐฉํ–ฅ SSH๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์ˆ ์  ๊ณผ์ œ

๊ธฐ์‚ฌ์— ๋‚˜์™€ ์žˆ๋“ฏ์ด ๊ธฐ์ˆ  ์‚ฌ์–‘์ด ์—†๋Š” ๊ฒฝ์šฐ: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š” ์ด์œ : ๊ธฐ์ˆ  ์‚ฌ์–‘ ์—†์ด๋Š” ์ž‘์—…ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค! ์ ˆ๋Œ€๋กœ, ์–ด๋””์„œ๋„!

๊ธฐ์ˆ ์ ์ธ ์ž‘์—…์€ ์ƒ๋‹นํžˆ ๊ฐ„๋‹จํ–ˆ๋Š”๋ฐ, ์ตœ์ข… ์‚ฌ์šฉ์ž์˜ ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ์กฐ๊ธˆ ํ™•์žฅํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ธฐ์ˆ  ์†”๋ฃจ์…˜๊ณผ ์žฅ๋น„์˜ ์„ ํƒ์€ ๊ณ ๊ฐ์ด ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  ์Šน์ธ ํ›„ ๊ธฐ์ˆ  ์‚ฌ์–‘ ์ž์ฒด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‹จ์ผ ๋ณด๋“œ ์ปดํ“จํ„ฐ ๊ธฐ๋ฐ˜ vim2 H ๋ชจ๋Ž€์„ ํ†ตํ•œ LTE ์—ฐ๊ฒฐ ์†๋„ ํ…Œ์Šคํ„ฐ ๋งŒ๋“ค๊ธฐํ™”์›จ์ด e3372h - 153 ์—ฌ๋Ÿฌ ํ†ต์‹  ์‚ฌ์—…์ž(XNUMX๋ถ€ํ„ฐ n๊นŒ์ง€). UART๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ GPS ์ˆ˜์‹ ๊ธฐ๋กœ๋ถ€ํ„ฐ ์ขŒํ‘œ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ๊ฒƒ๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†๋„ ์ธก์ • www.speedtest.net ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ…Œ์ด๋ธ”์— ๋„ฃ์œผ์‹ญ์‹œ์˜ค.

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ

CSV ํ˜•์‹์˜ ํ‘œ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ์„œ๋ช…์„ 6์‹œ๊ฐ„๋งˆ๋‹ค ์ด๋ฉ”์ผ๋กœ ๋ณด๋‚ด์„ธ์š”. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ GPIO์— ์—ฐ๊ฒฐ๋œ LED๋ฅผ ๊นœ๋ฐ•์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ์Šน์ธ์„ ๊ฑฐ์ณ ๊ธฐ์ˆ  ์‚ฌ์–‘์„ ์ž์œ  ํ˜•์‹์œผ๋กœ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž‘์—…์˜ ์˜๋ฏธ๋Š” ์ด๋ฏธ ๋ณด์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์— ์ผ์ฃผ์ผ์ด ์ฃผ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ๋Š” XNUMX์ฃผ ๋™์•ˆ ์ง€์†๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ œ๊ฐ€ ๋ณธ์—… ์ดํ›„์™€ ์ฃผ๋ง์—๋งŒ ์ด ์ผ์„ ํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊ณ ๋ คํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ €๋Š” ๊ณ ๊ฐ์ด ์†๋„ ์ธก์ • ์„œ๋น„์Šค ๋ฐ ํ•˜๋“œ์›จ์–ด ์‚ฌ์šฉ์— ๋Œ€ํ•ด ์‚ฌ์ „์— ๋™์˜ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ œ ๋Šฅ๋ ฅ์ด ํฌ๊ฒŒ ์ œํ•œ๋˜์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์— ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ฃผ๋ชฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์˜ˆ์‚ฐ๋„ ์ œํ•œ๋˜์–ด ์žˆ์–ด์„œ ํŠน๋ณ„ํžˆ ๊ตฌ๋งคํ•œ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์ด ๊ทœ์น™์„ ๋”ฐ๋ผ์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์•„ํ‚คํ…์ฒ˜ ๋ฐ ๊ฐœ๋ฐœ

๊ณ„ํš์€ ๊ฐ„๋‹จํ•˜๊ณ  ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํŠน๋ณ„ํ•œ ์ฝ”๋ฉ˜ํŠธ๋Š” ์ƒ๋žตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ

๋‚˜๋Š” ์ด ์–ธ์–ด๋กœ ๊ฐœ๋ฐœํ•œ ๊ฒฝํ—˜์ด ์ „ํ˜€ ์—†์—ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ „์ฒด ํ”„๋กœ์ ํŠธ๋ฅผ Python์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๋Š” ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ ์˜ˆ์ œ์™€ ์†”๋ฃจ์…˜์ด ๋งŽ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋‚˜๋Š” ๋ชจ๋“  ์ „๋ฌธ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์—๊ฒŒ ๋‚˜์˜ ์ฒซ ํŒŒ์ด์ฌ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ๊พธ์ง–์ง€ ๋ง ๊ฒƒ์„ ๋‹น๋ถ€ํ•˜๋ฉฐ, ๋‚ด ๋Šฅ๋ ฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๊ฑด์„ค์ ์ธ ๋น„ํŒ์„ ์–ธ์ œ๋‚˜ ๊ธฐ์˜๊ฒŒ ๋“ฃ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ทธ ๊ณผ์ •์—์„œ ๋‚˜๋Š” Python์— ๋‘ ๊ฐ€์ง€ ์‹คํ–‰ ์ค‘์ธ ๋ฒ„์ „ 2์™€ 3์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๊ณ  ๊ทธ ๊ฒฐ๊ณผ ์„ธ ๋ฒˆ์งธ ๋ฒ„์ „์œผ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜๋“œ์›จ์–ด ๋…ธ๋“œ

๋‹จ์ผ ํ”Œ๋ ˆ์ดํŠธ vim2

๋‚˜๋Š” ๋ฉ”์ธ ๋จธ์‹ ์œผ๋กœ ์‹ฑ๊ธ€๋ณด๋“œ ์ปดํ“จํ„ฐ๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. vim2

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ

์Šค๋งˆํŠธ ํ™ˆ ๋ฐ SMART-TV๋ฅผ ์œ„ํ•œ ์šฐ์ˆ˜ํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ๋ฏธ๋””์–ด ํ”„๋กœ์„ธ์„œ์ด์ง€๋งŒ ์ด ์ž‘์—…์—๋Š” ๋งค์šฐ ๋ถ€์ ํ•ฉํ•˜๊ฑฐ๋‚˜ ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ฃผ์š” OS๋Š” Android์ด๊ณ  Linux๋Š” ๋ณด์กฐ OS์ด๋ฏ€๋กœ Linux์—์„œ ๋ชจ๋“  ๋…ธ๋“œ์™€ ๋“œ๋ผ์ด๋ฒ„์˜ ๊ณ ํ’ˆ์งˆ ์ž‘๋™์„ ๋ณด์žฅํ•˜๋Š” ์‚ฌ๋žŒ์€ ์•„๋ฌด๋„ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ผ๋ถ€ ๋ฌธ์ œ๋Š” ์ด ํ”Œ๋žซํผ์˜ USB ๋“œ๋ผ์ด๋ฒ„์™€ ๊ด€๋ จ๋˜์–ด ์žˆ์–ด ์ด ๋ณด๋“œ์—์„œ๋Š” ๋ชจ๋Ž€์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฌธ์„œ๊ฐ€ ๋งค์šฐ ์—ด์•…ํ•˜๊ณ  ๋ถ„์‚ฐ๋˜์–ด ์žˆ์–ด ๊ฐ ์ž‘์—…์— ๋ถ€๋‘๋ฅผ ํŒŒํ—ค์น˜๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. GPIO๋ฅผ ์‚ฌ์šฉํ•œ ์ผ๋ฐ˜์ ์ธ ์ž‘์—…์—๋„ ๋งŽ์€ ํ”ผ๊ฐ€ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด LED๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ๋ช‡ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ๊ด€์ ์œผ๋กœ ์–ด๋–ค ์ข…๋ฅ˜์˜ ์‹ฑ๊ธ€ ๋ณด๋“œ์ธ์ง€๋Š” ๊ทผ๋ณธ์ ์œผ๋กœ ์ค‘์š”ํ•˜์ง€ ์•Š์•˜๊ณ  ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ž‘๋™ํ•˜๊ณ  USB ํฌํŠธ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋จผ์ € ์ด ๋ณด๋“œ์— Linux๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ๊ณผ ์ด ๋‹จ์ผ ๋ณด๋“œ ์‹œ์Šคํ…œ์„ ๋‹ค๋ฃจ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋ฐฉ๋Œ€ํ•œ ๋ฌธ์„œ๋ฅผ ์ƒ…์ƒ…์ด ๋’ค์ง€์ง€ ์•Š๊ธฐ ์œ„ํ•ด ๋‚˜๋Š” ์ด ์žฅ์„ ์“ฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Linux๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์™ธ๋ถ€ SD ์นด๋“œ ๋˜๋Š” ๋‚ด๋ถ€ MMC์˜ ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘๋™์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ด๋ ค๊ณ  ์ €๋… ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ๊ธฐ ๋•Œ๋ฌธ์— MMC์— ์„ค์น˜ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜์‹ฌํ•  ์—ฌ์ง€์—†์ด ์™ธ๋ถ€ ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŽŒ์›จ์–ด ์ •๋ณด ์—ฌ๊ธฐ์„œ ์‚๋”ฑํ•˜๊ฒŒ ๋งํ–ˆ์–ด. ๋‚˜๋Š” ์ด์ƒํ•œ ๊ฒƒ์„ ๋Ÿฌ์‹œ์•„์–ด๋กœ ๋ฒˆ์—ญํ•ฉ๋‹ˆ๋‹ค. ๋ณด๋“œ๋ฅผ ํ”Œ๋ž˜์‹œํ•˜๋ ค๋ฉด ํ•˜๋“œ์›จ์–ด UART๋ฅผ ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐํ–ˆ์–ด์š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด

  • ํˆด ํ•€ GND: <โ€”> VIM GPIO์˜ ํ•€ 17
  • ํˆด ํ•€ TXD: <โ€”> VIM GPIO์˜ ํ•€ 18(Linux_Rx)
  • ๋„๊ตฌ ํ•€ RXD: <โ€”> VIM GPIO์˜ ํ•€ 19(Linux_Tx)
  • ํˆด ํ•€ VCC: <โ€”> VIM GPIO์˜ ํ•€ 20

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ

๊ทธ๋‹ค์Œ ํŽŒ์›จ์–ด๋ฅผ ๋‹ค์šด๋ฐ›์•˜์–ด์š” ๋”ฐ๋ผ์„œ. ํŠน์ • ํŽŒ์›จ์–ด ๋ฒ„์ „ VIM1_Ubuntu-server-bionic_Linux-4.9_arm64_EMMC_V20191231.

์ด ํŽŒ์›จ์–ด๋ฅผ ์—…๋กœ๋“œํ•˜๋ ค๋ฉด ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ ์—ฌ๊ธฐ์—. Windows์—์„œ๋Š” ํ”Œ๋ž˜์‹ฑ์„ ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ Linux์˜ ํŽŒ์›จ์–ด์— ๋Œ€ํ•ด ๋ช‡ ๋งˆ๋”” ๋ง์”€ ๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์ง€์นจ์— ๋”ฐ๋ผ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์„ค์น˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

git clone https://github.com/khadas/utils
cd /path/to/utils
sudo ./INSTALL

๊ทธ๋ฆฌ๊ณ ... ์•„๋ฌด๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์น˜๋˜๋„๋ก ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํŽธ์ง‘ํ•˜๋Š” ๋ฐ ๋‘ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์„œ ๋ฌด์—‡์„ ํ–ˆ๋Š”์ง€๋Š” ๊ธฐ์–ต๋‚˜์ง€ ์•Š์ง€๋งŒ, ๋ง๊ณผ ํ•จ๊ป˜ํ•˜๋Š” ์„œ์ปค์Šค๋„ ์žˆ์—ˆ์–ด์š”. ๊ทธ๋Ÿฌ๋‹ˆ ์กฐ์‹ฌํ•ด. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ์—†์œผ๋ฉด vim2๋ฅผ ๋” ์ด์ƒ ๊ณ ๋ฌธํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ ์‚ฌ๋žŒ์„ ์ „ํ˜€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค!

์ผ๊ณฑ ๊ฐœ์˜ ์ง€์˜ฅ, ์Šคํฌ๋ฆฝํŠธ ๊ตฌ์„ฑ ๋ฐ ์„ค์น˜๋ฅผ ๋งˆ์นœ ํ›„ ์ž‘๋™ํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํŒจํ‚ค์ง€๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. USB๋ฅผ ํ†ตํ•ด ๋ณด๋“œ๋ฅผ Linux ์ปดํ“จํ„ฐ์— ์—ฐ๊ฒฐํ•˜๊ณ  ์œ„ ๋‹ค์ด์–ด๊ทธ๋žจ์— ๋”ฐ๋ผ UART๋„ ์—ฐ๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜๋“œ์›จ์–ด ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ์˜ค๋ฅ˜ ์ œ์–ด ์—†์ด 115200์˜ ์†๋„๋กœ ์ œ๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ๋ฏธ๋‹ˆ์ปด ํ„ฐ๋ฏธ๋„์„ ์„ค์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‹œ์ž‘ํ•ด ๋ด…์‹œ๋‹ค.

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ

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๊ฐœ ์กฐ๊ฐ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๊ทธ๋ฆผ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ

์ฆ‰, IP ์ฃผ์†Œ๊ฐ€ ๋™์ผํ•˜๊ณ  ๊ฐ๊ฐ ๊ธฐ๋ณธ ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ๋™์ผํ•œ n๊ฐœ์˜ ๋„คํŠธ์›Œํฌ ์นด๋“œ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ๋Š” ๊ฐ๊ฐ ์ž์ฒด ์šด์˜์ž์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ifconfig ๋˜๋Š” ip ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋„๊ณ  ํ•˜๋‚˜์”ฉ ์ผœ์„œ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์†”๋ฃจ์…˜์€ ์ „ํ™˜ํ•˜๋Š” ๋™์•ˆ ์žฅ์น˜์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๋ฉด ๋ชจ๋‘์—๊ฒŒ ์ข‹์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ „ํ™˜์ด ์žฆ๊ณ  ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ์—ฐ๊ฒฐํ•  ๊ธฐํšŒ๊ฐ€ ์ „ํ˜€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ชจ๋Ž€์˜ IP ์ฃผ์†Œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋ณ€๊ฒฝํ•œ ๋’ค ๋ผ์šฐํŒ… ์„ค์ •์„ ์ด์šฉํ•ด ํŠธ๋ž˜ํ”ฝ์„ ์œ ๋„ํ•˜๋Š” ๋ฐฉ์‹์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ

์ด๊ฒƒ์ด ๋ชจ๋Ž€ ๋ฌธ์ œ์˜ ๋์ด ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ „์› ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ชจ๋Ž€์ด ๋–จ์–ด์ ธ์„œ 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 ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ „์›์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ตœ์„ ์˜ ํ•ด๊ฒฐ์ฑ…์€ ์•„๋‹ˆ์—ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ณ  ๊ฐ„๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์‹ ๊ธฐ๋Š” ์ด๋ ‡๊ฒŒ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ

์†”์งํžˆ ๋งํ•ด์„œ 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๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ

GPS ์„ ์€ ๋‚ด ์†์— ์žˆ๊ณ  UART ๋””๋ฒ„๊ฑฐ ์„ ์€ ๋‚ด ์†๊ฐ€๋ฝ ์•„๋ž˜์— ๋ณด์ž…๋‹ˆ๋‹ค.

์žฌ๋ถ€ํŒ… ํ›„ gpsmon ํ”„๋กœ๊ทธ๋žจ์„ ์ด์šฉํ•˜์—ฌ GPS ๋™์ž‘์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ

์ด ์Šคํฌ๋ฆฐ์ƒท์—์„œ๋Š” ์œ„์„ฑ์„ ๋ณผ ์ˆ˜ ์—†์ง€๋งŒ 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.

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ

GPIO ํ•€์„ ์ถœ๋ ฅ ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

gpio -g mode 421 out

์ €๋Š” XNUMX์œผ๋กœ ์”๋‹ˆ๋‹ค.

gpio -g write 421 0

ํ•˜๋‚˜ ์ ์–ด๋ด…๋‹ˆ๋‹ค.

gpio -g write 421 1

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ
"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 ์šด์˜์ž๋ฅผ ์œ„ํ•œ ์†๋„ ์ธก์ • ๊ทธ๋ž˜ํ”„์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ
๋™์  ์„œ๋ฒ„๋ฅผ ์„ ํƒํ•  ๋•Œ ์†๋„๋ฅผ ์ธก์ •ํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ
์—„์„ ๋œ ํ•˜๋‚˜์˜ ์„œ๋ฒ„๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์†๋„ ํ…Œ์ŠคํŠธ๋ฅผ ์‹ค์‹œํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธํ•˜๋Š” ๋™์•ˆ ์–‘์ชฝ์— "ํ„ธ"์ด ์žˆ์œผ๋ฉฐ ์ˆ˜ํ•™์  ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ณ ์ • ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ฝ๊ฐ„ ์ ๊ณ  ์ง„ํญ์ด ๋” ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ์ด๊ณณ์€ ํ›Œ๋ฅญํ•œ ์—ฐ๊ตฌ ์žฅ์†Œ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  iperf ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„์˜ ์†๋„๋ฅผ ์ธก์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ๊ธฐ์ˆ  ์‚ฌ์–‘์„ ๊ณ ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”์ผ ๋ณด๋‚ด๊ธฐ ๋ฐ ์˜ค๋ฅ˜

๋ฉ”์ผ์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ์ˆ˜์‹ญ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์˜ต์…˜์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ๊ฒฐ๊ตญ ๋‹ค์Œ์œผ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. Yandex์— ์‚ฌ์„œํ•จ์„ ๋“ฑ๋กํ•œ ๋‹ค์Œ ๋ฉ”์ผ์„ ๋ณด๋‚ด๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ํ™•์ธํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์— ๊ตฌํ˜„ํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ๋Š” Gmail์—์„œ ๋ณด๋‚ด๊ธฐ ๋“ฑ์„ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ์˜ต์…˜์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์ผ ์„œ๋ฒ„ ์„ค์ •์— ์‹ ๊ฒฝ์“ฐ๊ณ  ์‹ถ์ง€ ์•Š์•˜๊ณ  ์‹œ๊ฐ„๋„ ์—†์—ˆ์ง€๋งŒ ๋‚˜์ค‘์— ์•Œ๊ณ  ๋ณด๋‹ˆ ๊ทธ๊ฒƒ๋„ ํ—›๋œ ์ผ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์Šค์ผ€์ค„๋Ÿฌ์— ๋”ฐ๋ผ ๋กœ๊ทธ๊ฐ€ ์ „์†ก๋˜์—ˆ์œผ๋ฉฐ, ์—ฐ๊ฒฐ์ด ์žˆ๋‹ค๋ฉด, 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๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค ruvds.com. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ๋‚ด ๋ชฉ์ ์œผ๋กœ๋Š” ์ด๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์„œ๋ฒ„ ๋น„์šฉ์„ ๋‚ด ์ฃผ๋จธ๋‹ˆ์—์„œ ์ง€๋ถˆํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์›น ์ธํ„ฐํŽ˜์ด์Šค, ์ž์ฒด SMTP ์„œ๋ฒ„, VPN ๋“ฑ์„ ๋ฐฐํฌํ•˜๋Š” ๊ฒฝ์šฐ ์ถฉ๋ถ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์•ฝ๊ฐ„์˜ ์—ฌ์œ ๋ถ„์„ ๊ฐ€์ง€๊ณ  ๊ฐ€์ ธ๊ฐ€๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ณ  ์ฐจ๋‹จ๋˜๋Š” ๋ฌธ์ œ๋„ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ €๋Š” ์•”์Šคํ…Œ๋ฅด๋‹ด๊ณผ ๋‹ค์Œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ

ํ•˜๋“œ์›จ์–ด์™€์˜ ํ†ต์‹  ๋ฐฉ๋ฒ•์œผ๋กœ 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๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์™€ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด ์„œ๋ฒ„๋กœ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ์ด๋Š” ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์„ ํ•˜๋‚˜๋กœ ๋ชจ์œผ๊ธฐ

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ
์Šค์œ„์น˜๋ฅผ ์ผœ๊ณ  ๊ฐœ๋ฐœ๊ณผ ๋””๋ฒ„๊น…์„ ์‹œ์ž‘ํ•ด๋ณด์ž

ํœด, ๊ทธ๊ฒŒ ๋‹ค์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ชจ๋“  ๊ฒƒ์„ ํ•˜๋‚˜๋กœ ๋ชจ์„ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—.

์ฝ”๋“œ์— ๋Œ€ํ•œ ์ค‘์š”ํ•œ ์ : ์ด ํ”„๋กœ์ ํŠธ๋Š” ํŠน์ • ์•„ํ‚คํ…์ฒ˜์˜ ํŠน์ • ์ž‘์—…์— ๋งž๊ฒŒ ์กฐ์ •๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ์‹œ์ž‘๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•˜๋”๋ผ๋„ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ์„œ ๋ฐ”๋กœ ํ…์ŠคํŠธ๋กœ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์™„์ „ํžˆ ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” 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 ์šด์˜์ž์™€์˜ ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ

์—ฌ๊ธฐ์„œ๋Š” ๋™์  ์ธก์ • ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์†๋„ ์ธก์ •์€ ์ž‘๋™ํ•˜์ง€๋งŒ ๋ณ€๋™์ด ๋งค์šฐ ์‹ฌํ•˜์ง€๋งŒ ์ผ๋ถ€ ํ‰๊ท  ๊ฐ’์€ ์—ฌ์ „ํžˆ โ€‹โ€‹ํ‘œ์‹œ๋˜๋ฉฐ ์ด๋Š” ์ด๋™ ํ‰๊ท  ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ•„ํ„ฐ๋งํ•˜์—ฌ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜์ค‘์— ๋‚˜๋Š” ๋‹ค๋ฅธ ํ†ต์‹  ์‚ฌ์—…์ž๋ฅผ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ด๋ฏธ ํ…Œ์ŠคํŠธ ์„œ๋ฒ„๊ฐ€ ํ•˜๋‚˜ ์žˆ์—ˆ๋Š”๋ฐ, ๊ทธ ๊ฒฐ๊ณผ๋„ ๋งค์šฐ ํฅ๋ฏธ๋กœ์› ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ

๋ณด์‹œ๋‹ค์‹œํ”ผ, ์ด ์ฃผ์ œ๋Š” ์ด ๋ฐ์ดํ„ฐ์˜ ์—ฐ๊ตฌ ๋ฐ ์ฒ˜๋ฆฌ์— ๋งค์šฐ ๊ด‘๋ฒ”์œ„ํ•˜๋ฉฐ ๋ถ„๋ช…ํžˆ ๋ช‡ ์ฃผ ๋™์•ˆ ์ง€์†๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒโ€ฆ

์ž‘์—… ๊ฒฐ๊ณผ

์ œ๊ฐ€ ํ†ต์ œํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์œผ๋กœ ์ธํ•ด ์ž‘์—…์ด ๊ฐ‘์ž๊ธฐ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ฃผ๊ด€์ ์ธ ๊ฒฌํ•ด๋กœ๋Š” ์ด ํ”„๋กœ์ ํŠธ์˜ ์•ฝ์  ์ค‘ ํ•˜๋‚˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋Ž€๊ณผ ๋™์‹œ์— ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ์‹ค์ œ๋กœ ์›ํ•˜์ง€ ์•Š๊ณ  ๋กœ๋“œ๋  ๋•Œ๋งˆ๋‹ค ๊ทธ๋Ÿฌํ•œ ํŠธ๋ฆญ์„ ๋งŒ๋“œ๋Š” ๋ชจ๋Ž€์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ชฉ์ ์„ ์œ„ํ•ด ์ˆ˜๋งŽ์€ ๋‹ค๋ฅธ ๋ชจ๋Ž€ ๋ชจ๋ธ์ด ์žˆ์œผ๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋ฏธ Mini PCI-e ํ˜•์‹์œผ๋กœ ๋˜์–ด ์žˆ๊ณ  ์žฅ์น˜ ๋‚ด๋ถ€์— ์„ค์น˜๋˜์–ด ์žˆ์œผ๋ฉฐ ๊ตฌ์„ฑ์ด ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ์™„์ „ํžˆ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ํฅ๋ฏธ๋กœ์› ๊ณ  ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋งค์šฐ ๊ธฐ๋ปค์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ LTE ๋ชจ๋Ž€์—์„œ ๋™์‹œ ์†๋„ ํ…Œ์ŠคํŠธ

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€