1. Firebase๋ ๊ตฌ๊ธ์์ ์ด์ํ๋ ์ธํฐ๋ท ๊ด๋ จ BaaS์๋น์ค๋ผ๊ณ ๋ณผ ์ ์๋ค. BaaS์ ๋ํ ์ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ๋ค. ๊ฐ ์จ๋ผ์ธ ์๋น์ค ํ๋ก๋ฐ์ด๋์ ๋ถ๋ฅ๋ ์๋ ๊ทธ๋ฆผ์ ์ฐธ๊ณ ํ๋ฉด ๋๋ค.
2. ์ฐ๋ฆฌ๊ฐ ์ค๋งํธํ ํ๋ก์ ํธ์์ Firebase๋ฅผ ์ฌ์ฉํ๋ ๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ฒซ์งธ, ์ฐ๋ฆฌ๋ IPv4 ์์คํ ์ ํ๊ณ๋ก ์ธํด ๊ฐ๋ณ ๊ธฐ๊ธฐ์ ๊ณต์ธIP๋ฅผ ๊ฐ์ง ์ ์๋ค.
- ๋์งธ, ์ด๋ ๋ช ๊ฐ ์๋๋ ๊ณต์ธIP ์๋์ ๊ณต์ ๊ธฐ๋ฅผ ์ฐ๊ฒฐํด ์ฌ์ค IP๋ฅผ ๋ง๋ค์ด๋ด ์ฌ์ฉํด์ผ ํจ์ ์๋ฏธํ๋ค.
- ์ ์งธ, ์ฌ์ค IP๋ฅผ ์ฌ์ฉํ๋ ๋๋ฐ์ด์ค๊ฐ ์ด์ฉํ๋ ์๋น์ค์ ์ ๊ทผํ๋ ค๋ฉด ๋คํธ์ํฌ์ ๊ฐ๋ ์ ์ดํดํ๊ณ ์์ด์ผ ํ๋ค.
- ๋ท์งธ, ์ด ์ค ๊ฐ์ฅ ๊ธฐ๋ณธ์ธ ๊ณต์ธ IP์์ ์ฌ์ค IP๋ก ์ฐ๊ณ๋ฅผ ํ๊ธฐ ์ํ ๊ณผ์ ์ธ ํฌํธํฌ์๋ฉ์ ๋ํด ์ดํดํ๊ณ ์์ด์ผ ํ๋ค.
- ๋ค์ฏ์งธ, ๋ชจ๋ฐ์ผ ํต์ ์์๋ ๊ฐ ๋ชจ๋ฐ์ผ ํต์ ์ฌ๊ฐ ๊ถํ์ ๊ฐ์ง๊ณ ์๋ ๋ชจ๋ฐ์ผ ํต์ ๋ง NAT์ ๊ตฌ์กฐ์ ๋ํด ์ดํดํ๊ณ ์์ด์ผ ํ๋ค.
- ์ฌ์ฏ์งธ, ํ์ง๋ง ์ด๋ฅผ ๋์ ํ ์ฌ๋๋ค์ NAT๋ฅผ ํตํด ์ญ์ผ๋ก ๋ชจ๋ฐ์ผ ๋๋ฐ์ด์ค๋ ๋ชจ๋ฐ์ผ ํต์ ๋ง์ ํตํด ํ ๋๋ง์ ํ๊ณ ์๋ ๋๋ฐ์ด์ค์์ ์ด์ฉํ๋ ์๋น์ค์ ์ ๊ทผํ๋ ๊ฒ์ ๋ชจ๋ฐ์ผ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ํต์ ์ฌ์ ๊ถํ๋ถ์ฌ ์์ด๋ ๋ถ๊ฐ๋ฅํ๋ค๋ ์ฌ์ค์ ์์ญ ์๋ฐฑ๋ฒ์ ์๋ ๋์ ์๊ฒ ๋๋ค. ํต์ ์ฌ๋ ๊ทธ๊ฑธ ์ง์ํ ์๊ฐ์ด ์๋ค.
- ์ผ๊ณฑ์งธ, ์ผ๋ฐ์ ์ผ๋ก ํต์ ์ ์๋ฒ์ ํด๋ผ์ด์ธํธ๋ก ๊ตฌ์ฑ๋๊ณ , ์๋ฒ๊ฐ ์๋น์ค๋ฅผ ์ด๋ฉด, ํด๋ผ์ด์ธํธ๊ฐ ์ ๊ทผํ๋ ํํ๋ก ์๋น์ค๊ฐ ๋๋๋ฐ, ์์ ์ค๋ช ๊ณผ ๊ฐ์ ์ด์ ๋ค๋ก ์๋ฒ๊ฐ ์๋น์ค๋ฅผ ํด๋ ํด๋ผ์ด์ธํธ๊ฐ ์ ๊ทผ์ ํ ์๊ฐ ์๊ฑฐ๋, ๊ทธ ๊ณผ์ ์ด ๋งค์ฐ ์ด๋ ต๋ค๋๋ฐ ์๋ค.
- ์ฌ๋์งธ, ๋ฐ๋ผ์, ์ฐ๋ฆฌ๋ ๊ตฌ๊ธ ๊ณ์ ๊ณผ ๊ฐ๋จํ ์ธํ ๋ง์ผ๋ก ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ Firebase๋ผ๋ ์ค๊ฐ ๋จ๊ณ์ Realtime Database ์๋น์ค๋ฅผ ์ด์ฉํด ์ด ๊ณณ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฆฌ๊ณ , ์ด ๊ณณ์ ์ ๊ทผํด์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๊ฐ๋ ํํ์ ์๋น์ค๋ฅผ ๊ตฌ์ํ๊ฒ ๋ ๊ฒ์ด๋ค.
- ์ฐธ๊ณ ๋ก, Firebase๋ Realtime Database๋ง ์ง์๋๋ ๊ฒ์ด ์๋๊ณ , ์ธ์ฆ, ์ฑ์ฒดํฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์คํ ๋ฆฌ์ง, ํธ์คํ , ํจ์ ์๋น์ค, ๋จธ์ ๋ฌ๋, ๋ถ์ ๋ฑ ์์ฒญ๋๊ฒ ๋ค์ํ ์๋น์ค๋ฅผ ์ง์ํ๊ณ ์์ผ๋ฉฐ, ์ถฉ๋ถํ ์ฉ๋์ ๋ฌด๋ฃ๋ก ์ ๊ณตํ๋ฏ๋ก, ๊ฐ๋ฐ๋จ๊ณ๋ ํ ์คํธ ๋จ๊ณ์์๋ ๋ฌด๋ฃ๋ผ๊ณ ๋ด๋ ๋ฌด๋ฐฉํ๋ค.
- ์ด์จ๋ ์ฌ๋๋ค์ด ํด๋น ์๋น์ค๋ฅผ ์ฌ์ฉํ๊ณ , ๊ทธ ์๋น์ค๋ฅผ ์ด์ฉํด ๋ถ๊ฐ๊ฐ์น๋ฅผ ๋ง๋ค์ด๋ด์ผ ์์ ๋ค๋ ๋จน๊ณ ์ด ์ ์์์ ์ ์๊ณ ์๋ ๊ฒ์ด๊ณ , ๊ทธ๋ฐ ์ฌ๋๋ค์ด ๋ง์ผ๋ฉด ๋ง์์๋ก ์ข์ผ๋ ์ด๋ ๊ฒ ์ ๊ณต๋๋ ๊ธฐ๋ณธ ์๋น์ค๋ค์ ํตํด์ ์ฐ๋ฆฌ ๊ฐ์ ์ด๋ณด๊ฐ๋ฐ์๋ค์ด ๋ง์ ๋๊ณ ํ ์คํธ๋ฅผ ์งํํด๋ณผ ์ ์๋ค๋ ๊ฒ์ด๋ค.
- ์ด๋ ์คํ์์ค ์ง์์ ๋ผ์ดํ์ฌ์ดํด์ด ์ ๋์๊ฐ๊ณ ์๊ณ , ๊ทธ ์์ ์๋ ์ฌ๋๋ค์ด ์์ง ๊ฑด์ฌํ๊ฒ ์์กดํด ์๋ค๋ ๊ฒ์ผ๋ก ์ฆ๋ช ๋ ์ฌ์ค์ด๋ฉฐ, ์ฌ์ค ๊ตฌ๊ธ๋ ๊ทธ๋ฐ ๋ฌธํ๋ฅผ ํตํด ์ฑ์ฅํด์์ผ๋, ๊ทธ๋ฐ ์๋น์ค๋ฅผ ํตํด ์์ ๋ค์ ์ํ๊ณ๋ฅผ ๋์ฑ ํ์ฅํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์๋ ๊ฒ์ ์ด์ฐ๋ณด๋ฉด ๋งค์ฐ ๋น์ฐํ ์ผ์ด๋ค.
1. Github๋ ์ ์ธ๊ณ ์ฝ๋๋ค์ ์๋ฃ ์ ์ฅ์์ด๋ฉฐ, ์์ ์ ํ๋ก์ ํธ๋ค์ ๊ด๋ฆฌํ๊ณ ๊ณต์ ํ ์ ์๋๋ก ์๋น์ค๋ฅผ ์ ๊ณตํ๊ณ ์๋ค.
2. Github Pages๋ HTML, CSS, JavaScript๋ก ๋๋ณ๋๋ ์ ์ ์นํ์ด์ง์ ๋ํ ์๋น์ค๋ฅผ ๋ฌด๋ฃ๋ก ์ ๊ณตํ๊ณ ์๋ค. ์ ์ ์นํ์ด์ง๋ ์๋ฒ์ธก์์ ํด๋ผ์ด์ธํธ์ ํน์ ํ ์์ฒญ์ ๋ํด ํ๋ก์ธ์ค๋ฅผ ์งํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฌผ์ ์ ๊ณตํด์ฃผ๋ ๋์ ์นํ์ด์ง(WAS์๋ฒ, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๋ฑ์ด ์ถ๊ฐ๋จ)์ ๋ฌ๋ฆฌ ๋จ์ํ ์นํ์ด์ง๋ง ์ ๊ณตํ๋ค.
3. ์ฐ๋ฆฌ๊ฐ ์ค๋งํธํ ํ๋ก์ ํธ์์ Github Pages๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ฒซ์งธ, ์ด ํ๋ก์ ํธ๊ฐ ์ ๊ณตํ๋ ๊ฒ์ Firebase์ Realtime Database๊ฐ ์๋๋ผ ์ด๋ฅผ ํ์ฉํ์ฌ ์ค๋งํธํ์ ์ ๋ณด๋ฅผ ์ง๊ตฌ ๋ฐ๋ํธ์์๋ ํ์ธํ๊ณ ์๊ฒฉ์ผ๋ก ์ ์ดํ ์ ์๋ ์๋น์ค์ด๋ค.
- ๋์งธ, ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ์ ๊ทผํ ์ ์๋ ์๋น์ค๊ฐ ๊ฐ์ฅ ์ง๊ด์ ์ด๋ฉฐ ๋น ๋ฅด์ง๋ง, ์๋ฒ๋ฅผ ์ค์ค๋ก ๊ตฌ์ถํ๋ ๋ถ๋ถ์ ๋ํ ๊ฐ์ธ ์ญ๋์ ๋ฌธ์ , ๋คํธ์ํฌ์ ์ ๊ทผ์ฑ ์ ์ฝ์ ๋ฐ๋ฅธ ํ๊ณ ๋ฑ ๋ค์ํ ํํ์ ์ ์ฝ์กฐ๊ฑด์ด ๋ง์ผ๋ฏ๋ก, ์ด๋ฅผ ๊ทน๋ณตํ๋ฉด์๋ ๊ทธ๋ด์ธํ ์๋น์ค๋ฅผ ์ ๊ณตํ ํ์๊ฐ ์๋ค.
- ์ ์งธ, Github Pages๋ ์ด๋ฌํ ์๋น์ค๋ฅผ ์ ๊ณตํ๋๋ฐ ๊ฐ์ฅ ์ฌ์ด ์๋น์ค๋ฅผ ๋ฌด๋ฃ๋ก ์ ๊ณตํ๊ณ ์๋ค.
- ๋ท์งธ, Github ์์ฒด๋ ์ ์ธ๊ณ ์ฌ๋๋ค์ด ์ฐธ์ฌํ๊ณ ์์ผ๋ฏ๋ก, ์ด๋ฒ ๊ธฐํ๋ฅผ ํตํด ์ด ์ํ๊ณ๋ฅผ ์ดํดํ๊ฒ ๋๋ค๋ฉด, ์ํํธ์จ์ด ๊ด๋ จ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ ๋ ๋ ํ ์ง์๊ตฐ์ ์ป๊ฒ ๋๋ ์ ์ด๋ค.
- ๋ค์ฏ์งธ, ๋น์ฐํ ์นํ์ด์ง๋ ๋ฌด๋ฃ๋ก ๋ฐฐํฌ๋๋ฉฐ, ์์ ๋ง์ ํฌํธํด๋ฆฌ์ค๋ฅผ ๋ง๋ค๊ณ ๊ด๋ฆฌํ๋๋ฐ ๋งค์ฐ ํ๋ฅญํ ๋๊ตฌ์ด๋ค.
- ์ฌ์ฏ์งธ, ์ผ๋จ ์นํ์ด์ง๋ก ๊ตฌํ๋ ๊ฒ์ WebViewer๋ผ๋ ๊ธฐ๋ฅ์ ํตํด ์ฝ๊ฒ ์ฑ์ผ๋ก๋ ๊ตฌํํ ์ ์๋ค.
- ์ผ๊ณฑ์งธ, ๋ถ์์ ์ผ๋ก W3Schools๋ฑ์ ์ฌ์ดํธ๋ฅผ Github์ ํจ๊ป ํ์ฉํจ์ผ๋ก์จ ์น์ ์ด์ฉํ ์๋น์ค๋ฅผ ๊ตฌ์ถํ๋ ๋ค์ํ ๋ฐฉ๋ฒ๋ค์ ๊ณต๋ถํ๊ณ , ๊ด๋ จ ์ญ๋์ ํค์๋๊ฐ ์ ์๋ค.
1. Raspberry Pi Pico W๋ ์๋์ด๋ ธ ์ฐ๋ ธ์ ๋์ํ๋ ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด ์ฌ๋จ์ ํผ์ง์ปฌ ์ปดํจํ ๋๊ตฌ์ธ ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด ํผ์ฝ์ ์์ดํ์ด ๋ฒ์ ์ด๋ค.
2. ํ์ด์ฌ์ ํ์ฉํ๋ฏ๋ก ํ๋ก๊ทธ๋๋ฐ๊ณผ ๊ด๋ จ ์ํ๊ณ์ ์ฝ๊ฒ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
3. ์ฐ๋ฆฌ๊ฐ ์ค๋งํธํ ํ๋ก์ ํธ์์ Raspberry Pi Pico W๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ฒซ์งธ, ๋ค๋ฅธ ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด๊ฐ ๋ผ์ฆ๋น์์ด๋ผ๋ ๋ฆฌ๋ ์ค OS๋ฅผ ์ฌ์ฉํ๋ ์ปดํจํฐ(MPU, ๋ง์ดํฌ๋ก ํ๋ก์ธ์ ์ ๋์ ์ฌ์ฉํ๋)์ธ ๋ฐ๋ฉด์ ํผ์ฝ๋ ํ์จ์ด(ํ์ด์ฌ ํ์จ์ด, ์๋ฐ์คํฌ๋ฆฝํธ ํ์จ์ด ๋ฑ)๋ฅผ ์ฌ๋ ค์ ์ฃผ๋ก ํผ์ง์ปฌ ์ปดํจํ ์ฉ์ผ๋ก ์ฌ์ฉํ๋ ์ฅ๋น(MCU, ๋ง์ดํฌ๋ก ์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํ๋)์ด๋ค. ์ด๋ ์๋์ด๋ ธ ์ฐ๋ ธ์ ๊ฐ์ ๋ฐ๋ณต์ ์ธ ์ผ์ ํ๋๋ฐ ์ต์ ํ ๋์ด ์์์ ์๋ฏธํ๋ค.
- ๋์งธ, ์๋์ด๋ ธ ์ฐ๋ ธ์์ ์ฐจ์ด์ ์ ์๋์ด๋ ธ ์ฐ๋ ธ์ ๊ฒฝ์ฐ C, C++์ ์ฌ์ฉํ๋ฏ๋ก ๊ฐ๋ณ๊ฒ ์ฌ์ฉํ ์ ์์ง๋ง, ์ฌ์ฉ ์ธ์ด๊ฐ ์์ฆ ์ธ๋์๊ฒ ์ต์ํ์ง ์๋ค๋ ์ ์ด ์๋๋ฐ ๋ฐํด ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด ํผ์ฝ์ ๊ฒฝ์ฐ ์ด๋ค ํ์จ์ด๋ฅผ ์ ๋ก๋ ํ๋๋์ ๋ฐ๋ผ ๋ง์ดํฌ๋ก ํ์ด์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฑ์ ์ ํํด์ ์ฌ์ฉํ ์ ์๊ณ , ์๋์ ์ผ๋ก ๊ณ ๊ธ ์ธ์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ด ์ฅ์ ์ด๋ค.
- ์ ์งธ, ๋ง์ดํฌ๋ก ํ์ด์ฌ์ ์ฌ์ฉํ ๊ฒฝ์ฐ https://micropython.org/download/rp2-pico-w/ ๋งํฌ์์ ์ต์ ๋ฒ์ ์ ๋ค์ด๋ก๋ ๋ฐ์ ๋ค์ ํผ์ฝ์ ์ ๋ก๋ ํ๋ฉด ๋๋ค. ์ ๋ก๋๋ ํผ์ฝ์ Bootsel ๋ฒํผ์ ๋๋ฅธ ์ํ์์ ์ปดํจํฐ์ USB์ผ์ด๋ธ์ ๊ฝ์ผ๋ฉด ํผ์ฝ๊ฐ ์ธ์ฅ ๋์คํฌ๋ก ์ธ์์ด ๋๊ณ , ๋ด ์ปดํจํฐ์์ ๋ค์ด๋ก๋ ๋ฐ์ ํ์จ์ด ํ์ผ์ ์ ๋ก๋ ํ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
- ๋ท์งธ, Pico W๋ ๋ง์ดํฌ๋ก ์ปจํธ๋กค๋ฌ์ด์ง๋ง WiFi๋ชจ๋์ด ์ค์ฅ๋์ด ์์ด, ์ฃผ๋ณ์ ์์ดํ์ด ๊ณต์ ๊ธฐ๊ฐ ์๋ค๋ฉด, ๋ฐ๋ก ๊ณต์ ๊ธฐ(2.4GHz)์ ์ ์ํด ์ธํฐ๋ท๊ณผ ์ฐ๊ฒฐํ ์ ์๋ค.
- ๋ค์ฏ์งธ, ์กฐ๋, ์จ๋, ์ต๋ ์ผ์๋ฅผ ๋น๋กฏํ ๋ค์ํ ํํ์ ์ผ์๋ก๋ถํฐ ๊ฐ์ ๋ฐ์์์ Firebase๋ก ์ ์ก์ด ๊ฐ๋ฅํ๋ฏ๋ก, ์ด๋ค ์ฅ์น๋ฅผ ๋ง๋ค๋๋ผ๋ ํด๋น ์์คํ ๋ง ์ดํดํ๊ณ ์์ผ๋ฉด ํ์ฅ์ด ๊ฐ๋ฅํ๋ค.
- ์ฌ์ฏ์งธ, ๋ฐ๋์ฒด ์ด์ ์ดํ๋ก ๊ฐ ์ฑ๊ธ๋ณด๋ ์ปดํจํฐ์ ๊ฐ๊ฒฉ์ด ํญ๋ฑํ์๋๋ฐ, ํผ์ฝ๋ ์ฌ์ ํ ์ ๋ ดํ๋ค. ์ผ๋ฐ ํผ์ฝ๋ 4๋ฌ๋ฌ, ํผ์ฝ W๋ 6๋ฌ๋ฌ ์์ค์ด๊ณ , ๊ตญ๋ด์์๋ ํฐ ์ฐจ์ด ์์ด ๊ตฌ๋งคํ ์ ์์ผ๋ฏ๋ก, ๋์ฑ ๋งค๋ ฅ์ ์ด๋ค.
- ์ผ๊ณฑ์งธ, ๋ธ๋ฃจํฌ์ค๋ฅผ ์ด์ฉํ ์ค๋งํธํ์ ๊ทผ๊ฑฐ๋ฆฌ์์๋ง ํ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ ์ง์ ํ ์๋ฏธ์ IoT๋ผ๊ณ ๋ณผ ์ ์๋๋ฐ, ํผ์ฝ W๋ ์ด์ ์ ๊ต์ฅํ ์ฌ์ด ๋ฐฉ๋ฒ์ผ๋ก ๊ทน๋ณตํ ์ ์์ผ๋ฉฐ, ESP32, ESP8266๋ณด๋์ ๋นํด์ ์ฌ์ฉ์ฑ์ด ์ฉ์ดํ๋ค.
1. ์นํ์ด์ง๋ฅผ Github Pages์ ์ฌ๋ ค ๊ตฌ๋์ ํ ํ Firebase์ ํต์ ์ด ์๋๋์ง ํ ์คํธ
test.mp4
KakaoTalk_20221231_232521289.mp4
2022-12-31.14-44-34.mp4
2. Raspberry Pi Pico W - Firebase - Github Pages ์ํธ ์ฐ๋ ์ ์ฒด ํ ์คํธ(์ผ์ ์ค์ธก, ์ค๋ฌผ ์ก์ธ์์ดํฐ ์ ์ด๋ง ๋น ์ง ์ํ)
2023-01-01.11-23-27.mp4
3. Pico์ ์ฐ๊ฒฐ๋์ด ์๋ ์์ด๋์ ์ด๋ก์์ LED On, Fan Off, ํ๋์์ LED On, Fan On, ํ๋์์ LED Off, Fan On, ๊บผ์ง๋ฉด LED Off, Fan Off
KakaoTalk_20230101_130414591.mp4
1. ์๋ ๋งํฌ๋ก ์ด๋ํด์ ๊ตฌ๊ธ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ์ ํ๊ณ , ์ค๋ฅธ์ชฝ ์๋จ์ ์๋ '์ฝ์๋ก ์ด๋' ๋ฒํผ์ ๋๋ฌ Firebase ์ฝ์๋ก ๋ค์ด๊ฐ๋ค.
3. ๋ฐ์ดํฐ ๋ถ์์ ํ์ง ์์ ๊ฒฝ์ฐ Google ์ ๋๋ฆฌํฑ์ค ์ฌ์ฉ ์ค์ ์ ํด์ ํ๊ณ 'ํ๋ก์ ํธ ๋ง๋ค๊ธฐ'๋ฒํผ์ ๋๋ฅธ๋ค.
9. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ณธ ์ค์ ์ ํ๋ค. ์ถํ ์ธ์ ๋ ๋ฐ๊ฟ ์ ์์ผ๋ ๊ธฐ๋ณธ ์ธํ ์ผ๋ก ์ฌ์ฉ์ค์ ์ ํ๋ค.
11. '๊ท์น' ํญ์ผ๋ก ๋ค์ด์ค๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ฝ๊ธฐ, ์ฐ๊ธฐ ๊ถํ์ด ์ค์ ๋์ด ์๋๋ฐ, ์ด ์ค์ ์ด ๋งค์ฐ ์ค์ํ๋ค.
12. false๋ก ๊ธฐ๋ณธ ์ค์ ๋์ด ์๋๋ฐ, ์ด๊ณณ์ ํด๋ฆญํ์ฌ true๋ก ๋ฐ๊ฟ์ฃผ๊ณ '๊ฒ์'๋ฒํผ์ ๋๋ฅด๋ฉด ๋๊ตฌ๋ ์ ๊ทผํด์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ธ ์ ์๋ค. ์ถํ ๋ณด์ ๋ฐ ํธ๋ํฝ์ ๋ฐ๋ฅธ ๊ฒฐ์ ๋น์ฉ ์ฆ๊ฐ์ ์ํฅ์ ์ค ์ ์์ผ๋, ํ ์คํธ ํ ๋๋ง true๋ก ์ค์ ํ๊ณ , ์ค์ ์ฌ์ฉํ ๋๋ ์ฝ๊ณ ์ฐ๋ ๊ถํ์ false๋ก ๋ฐ๊พธ๊ณ ์ ๊ทผํ ์ฌ๋์ ์ฌ์ฉ์ ๊ถํ์ ๋ฐ๋ผ ์ฌ์ฉํ๊ฑฐ๋, ์์ธ์ค ํ ํฐ์ ๋ถ์ฌ๋ฐ์ ์ฌ์ฉํ ์ ์๋๋ก ํด์ผํ๋ค.
13. ๋ค์์ผ๋ก ์ด Realtime Database๋ฅผ ์ค์ ๋ก ์ฌ์ฉํ๊ธฐ ์ํด์ ๊ด๋ จ config ๋ด์ฉ์ ์ป์ด์ผ ํ๋ค. ํ๋ก์ ํธ ๊ฐ์-๊ธฐ์ด ๋ฒํผ-ํ๋ก์ ํธ ์ค์ ์ผ๋ก ๊ฐ์ ๋ด ์น์ฑ์ firebase๋ฅผ ์ถ๊ฐํ๋ ๋ฒํผ์ ๋๋ฌ ์ธํ ์ ์๋ฃํ๊ณ , config ์ ๋ณด๋ฅผ ์ป์ด๋ธ๋ค. ํ ๋ฒ ์ธํ ์ ์๋ฃํ๋ฉด ์ธํ ์ ์ญ์ ํ๊ธฐ ์ ๊น์ง๋ ๊ณ์ ํด๋น config๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
14. firebase config ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค. ์๋์ ์ต์ข ์ด๋ฏธ์ง ์์ ์๋ firebaseConfig ๋ด๋ถ์ ๊ฐ๋ง ๋ณต์ฌํด์ ๋ด ์น์ web/public/js/firebase.jsํ์ผ์ ํด๋น ๋ถ๋ถ์ ๋ถ์ฌ๋ฃ์ผ๋ฉด ์์ ์ Realtime Database์ ์ ๊ทผํด์ ์จ๋, ์ต๋, ์กฐ๋, LED์ ์ด, Fan์ ์ด๋ฅผ ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ smartFarm ์ ์ด์ฉ ์น ์๋น์ค๋ฅผ ๋ฐ๋ก ์ด์ฉํ ์ ์๋ค.
- Firebase ์ฌ์ฉ ์๊ธ์ ๋ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋๋ฉฐ, ํ
์คํธ ์ฉ๋๋ก๋ ๋น์ฉ์ด ๋ฐ๋ก ๋ค์ง ์๋๋ค๊ณ ๋ด๋ ๋ฌด๋ฐฉํ๋ค.
https://firebase.google.com/pricing?authuser=0&hl=ko
- ํ
์คํธ ๋งํฌ
https://mtinet.github.io/smartFarm/web/public/index.html
1. ๊ฐ๋ฐ IDE๋ก๋ Thonny๋ฅผ ์ฌ์ฉํ๋ค. ํ์จ์ด ๋งํฌ๋ก ๋ค์ด๊ฐ์ view raw๋ฅผ ๋๋ฌ ํ์จ์ด๋ฅผ ๋ค์ด๋ก๋ ๋ฐ๊ณ , ํผ์ฝ W์ bootsel๋ฒํผ์ ๋๋ฅด๊ณ USB์ผ์ด๋ธ์ ์ฐ๊ฒฐํ๋ฉด ํ์ฑํ๋๋ ํผ์ฝ ํด๋(ํ์ผ๊ด๋ฆฌ์-๋ดPC-ํผ์ฝ W ๋๋ผ์ด๋ธ)์ ๋ณต์ฌํด์ ๋ฃ๋๋ค.
2. Thonny ์ค์น ํ Run-Configure Interpreter-Interpreter์์ 'MicroPython (Raspberry Pi Pico)'๋ฅผ ์ ํํ๊ณ ์ฐ๊ฒฐ๋ Port๋ฅผ ์ ํํด์ผ ํผ์ฝ์ ๋ง์ดํฌ๋กํ์ด์ฌ์ ์ฌ์ฉํด ํ๋ก๊ทธ๋๋ฐ์ ํ์ฌ ์ ๋ก๋ ํ ์ ์๋ค.
3. ์ผ์ชฝ ์๋จ์ ๋ด ์ปดํจํฐ์ ํด๋์ ํ์ผ, ์ผ์ชฝ ํ๋จ์ ํผ์ฝ ๋ด๋ถ ๋ฉ๋ชจ๋ฆฌ์ ํด๋์ ํ์ผ, ๊ฐ์ด๋ฐ๋ ํ๋ก๊ทธ๋๋ฐ ๊ณต๊ฐ, ๊ฐ์ด๋ฐ ํ๋จ์ ํ์ด์ฌ ์ํ ์ฒดํฌ์ฉ ์ฝ์์ด ์์นํ๋ค.
5. ์ฝ๋์ ์ ์ฅ์ ๋ด ์ปดํจํฐ์๋ ํ ์ ์๊ณ , ํผ์ฝ์๋ ํ ์ ์๋๋ก ์ ํํด์ ์ ์ฅํ๊ณ , ์๋ก ์ ๋ก๋ ๋ค์ด๋ก๋๊ฐ ๋๋ค.
5. ํผ์ฝ์ ์ ๋ก๋ ํ ์ฝ๋๋ฅผ ์ ํํ๊ณ , ํ๋ ์ด ๋ฒํผ์ ๋๋ฅด๋ฉด ํผ์ฝ ํ์ด์ฌ ํ์จ์ด๊ฐ ์ฐ์ฐํ ๊ฒฐ๊ณผ๋ฅผ ์ฝ์์ ๋ณด์ฌ์ฃผ๊ฒ ๋๋ค.
6. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ ์ฌ์ฉํ ์๋ ์์ผ๋ ํผ์ฝ์ ์ ์ฅ ๊ฐ๋ฅ ์ฉ๋์ด 800kB๋ฐ์ ์๋์ ์ฉ๋์ด ํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ์ฉํ ์ ์๋ค.
7. ๋ฐ๋ผ์ Firebase ์ธ์ฆ ํ ํฐ์ ๋ฐ๊ธ๋ฐ๋๋ฐ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ธ ์ ์๊ณ , Firebase RTDB์ ๊ท์น์ false๋ก ํด ๋์ ๊ฒฝ์ฐ ํ ํฐ์ ํตํ ์ฐ๊ธฐ, ์ฝ๊ธฐ ๊ถํ์ ํ๋ํ ๋ฐฉ๋ฒ์ด ์์ด ๊ท์น์ ํญ์ true๋ก ํด๋๊ณ ์ฌ์ฉํด์ผ ํ๋ ๋ถํธํจ์ด ์๋ค. ์ถํ ํผ์ฝ์ ๋ด๋ถ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ด ๋์ด๋ ์ ํ์ด ๋์ค๋ฉด ํด๊ฒฐ๋ ๋ฌธ์ ๋ก ๋ณด์ธ๋ค.
8. pico ํด๋ ์์ ์๋ boot.py, main.pyํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ์ Thonny๋ฅผ ์ด์ฉํด ์์ ์ ํผ์ฝ์ ์ ๋ก๋ ํ ๋ค์ ์๋จ์ ํ๋ ์ด ๋ฒํผ์ ๋๋ฆ ๋๋ค.
9. Thonny๋ก ์คํ์ ํ๋ฉด ๊ฐ๊ฐ์ ํ์ผ๋ค์ ์ํ๋๋๋ก ์คํํ ์ ์์ง๋ง, ์๋์ด๋ ธ์ฒ๋ผ ์ ์์ ๋ฃ์ผ๋ฉด ๋ฐ๋ก ํด๋น ์ฝ๋๊ฐ ์คํ๋๊ฒ ํ๊ธฐ ์ํด์๋ ํ์ผ๋ช ์ ๋ฐ๋์ main.py๋ก ์ง์ ํด์ค์ผ ํฉ๋๋ค.
10. boot.py ํ์ผ์ ํผ์ฝ๊ฐ ์ ๋ถํ ์ด ๋๊ณ ์๋์ง๋ฅผ ์๊ฐ์ ์ผ๋ก ํ์ธํ๊ธฐ ์ํด์ ์๋ ํผ์ฝ์ boot๊ณผ์ ์ ์ฝ๊ฐ ์์ ํด ๋์ ํ์ผ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
- boot.py
frommachineimportPinfromutimeimportsleepled=Pin(27, Pin.OUT) led.on() sleep(0.2) led.off() sleep(0.2) led.on() sleep(0.2) led.off() sleep(0.2) led.on() sleep(0.2) led.off() sleep(0.2) importmain11. ์๋ ์บก์ณ์ 17๋ฒ์งธ ์ค wlan.connect์ ํ๋ผ๋ฉํฐ์๋ ์์ ์ ์์ดํ์ด SSID, Password๋ฅผ ์ ๋ ฅํด ๋์ผ๋ฉด ์๋์ผ๋ก ์์ดํ์ด์ ์ ์์ด ๋ฉ๋๋ค. 27๋ฒ์งธ์ค url์๋ ์์ ์ด ๋ง๋ Firebase RTDB์ ์ฃผ์๋ก ์์ ํด์ฃผ์ธ์.
12. ์๋ ์ฝ๋๋ ์กฐ๋, ์จ๋, ์๋ถ ๊ฐ์ ๋๋ค์ผ๋ก ์์ฑํด์ ๋ณด๋ด๋๋ก ์ธํ ํด๋จ์ต๋๋ค. ์ถํ ์ค์ ์ผ์๋ฅผ ํ ์คํธ ํ์ฌ ์ฝ๋๋ฅผ ์์ ํ ์์ ์ ๋๋ค.
- base.py
frommachineimportPin, I2Cimportnetworkimporttimeimporturequestsimportrandom# ์ ์ดํ ํ ๋ฒํธ ์ค์ frommachineimportPinled=Pin(26, Pin.OUT) fan=Pin(27, Pin.OUT) # ์์ดํ์ด ์ฐ๊ฒฐํ๊ธฐwlan=network.WLAN(network.STA_IF) wlan.active(True) ifnotwlan.isconnected(): wlan.connect("<SSID>", "<Password>") print("Waiting for Wi-Fi connection", end="...") whilenotwlan.isconnected(): print(".", end="") time.sleep(1) else: print(wlan.ifconfig()) print("WiFi is Connected") # RTDB์ฃผ์url="<์์ ์ Firebase RTDB์ฃผ์>"# DB ๋ด์ญ ๊ฐ์ ธ์ค๊ธฐresponse=urequests.get(url+".json").json() # byteํํ์ ๋ฐ์ดํฐ๋ฅผ json์ผ๋ก ๋ณ๊ฒฝํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ซ์์ฃผ๋ ์ผ์ ํ์ง ์์๋ ๋จ# print(response)# print(response['smartFarm'])# print(response['smartFarm']['led'])whileTrue: # ํ์ฌ DB์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ดresponse=urequests.get(url+".json").json() # ํ์ฌ DB์ led ํค ๊ฐ์ ์ํ์ ๋ฐ๋ผ led 26๋ฒ์ ์ ์ดif (response['smartFarm']['led'] ==0) : led.value(1) else : led.value(0) # ํ์ฌ DB์ fan ํค ๊ฐ์ ์ํ์ ๋ฐ๋ผ led 27๋ฒ์ ์ ์ดif (response['smartFarm']['fan'] ==0) : fan.value(1) else : fan.value(0) # ๊ฐ์ฒด ๊ต์ฒดํ๊ธฐ, patch๋ ํน์ ์ฃผ์์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋จmyobj={'light': random.randrange(0, 100), 'temp': random.randrange(0, 50), 'mois': random.randrange(0,100)} urequests.patch(url+"smartFarm.json", json=myobj).json()


































