π 2023.03.31 ~ 2023.06.15
| νκ΅ | νκ³Ό | νλ² | μ΄λ¦ | μν |
|---|---|---|---|---|
| μμΈμ립λ | κΈ°κ³μ 보곡νκ³Ό | 20174300** | μ * (νμ₯) | μλ² |
| μμΈμ립λ | κΈ°κ³μ 보곡νκ³Ό | 20184300** | κΉ*μ€ | μλ² |
| μμΈμ립λ | κΈ°κ³μ 보곡νκ³Ό | 20184300** | κΉ*ν | ν΄λΌμ΄μΈνΈ |
| μμΈμ립λ | κΈ°κ³μ 보곡νκ³Ό | 20184300** | κΆ*ν | ν΄λΌμ΄μΈνΈ |
μλ² & ν΄λΌμ΄μΈνΈ μ€κ³ μ€λͺ
λ§ν¬:arrow_lower_left:
π» RaspberryPi Server
Β :iphone: Android App Client
Β λ³Έ νλ‘μ νΈλ μ₯μκ°μ μ§μ€μκ°μ νΈμν μμΈλ‘μ μ¬μ©μμκ² μ 곡νλ κ²μ λͺ©νλ‘ νλ€. νλ‘μ νΈλ λͺ¨ν°λ₯Ό ν΅ν΄ λμ΄κ° μ‘°μ λλ κ±°μΉλλ₯Ό κΈ°λ³ΈμΌλ‘ ꡬμ±μ΄ λμ΄ μλ€. μ΄λ₯Ό ν΅ν΄ μ¬μ©μμ λͺ©κ³Ό νκΏμΉμ λΆλ΄μ μ€μ΄λλ‘ ν΄μ€λ€. μΉ΄λ©λΌλ₯Ό ν΅ν μΌκ΅΄μΈμκ³Ό μ΄λ₯Ό μ΄μ©ν μλ κΈ°λ₯μΌλ‘ μ¬μ©μμ λΉμ§μ€ μκ°μ κ°μ§νμ¬ μλ¦Όμ μ 곡νλ€. νλ‘μ νΈλ νλμ¨μ΄λ₯Ό μ μ΄νλ λΌμ¦λ² 리νμ΄ μλ²μ μ¬μ©μμ μ
λ ₯μ κΈ°λ°μΌλ‘ μμ²μ 보λ΄λ μλλ‘μ΄λ μ±(ν΄λΌμ΄μΈνΈ)μΌλ‘ ꡬμ±λμ΄ μλ€. μλ²μ ν΄λΌμ΄μΈνΈλ WiFiλ₯Ό ν΅ν΄ 1:1 TCP/IPν΅μ μ νλ€.
Β μ¬μ©μλ μλλ‘μ΄λ μ±μ ν΅ν΄ λμ΄ μ‘°μ , μλ μκ° μ€μ , μλ λͺ¨λ μ€μ , νμ¬ μ΄¬μλλ μμ νμΈμ κΈ°λ₯μ μλ²μκ² μμ²ν μ μλ€. λν μμ μ΄ μ£Όλ‘ μ¬μ©νλ μ€μ μ νλ‘νμ λ§λ€μ΄ μ μ₯νκ³ , λΆλ¬μ¬ μ μλ€.μλ²λ ν΄λΌμ΄μΈνΈλ‘λΆν° λ°μ μμ²μ λ°νμΌλ‘ νλμ¨μ΄ μ μ΄λ₯Ό νλ©° κΈ°λ₯μ μννλ€. λμ΄ μ‘°μ κΈ°λ₯μ μ¬μ©μκ° μμ²ν λμ΄λ‘ λͺ¨ν°λ₯Ό μ μ΄νμ¬ μ¬μ©μκ° μμ²ν λμ΄λ‘ κ±°μΉλλ₯Ό μ‘°μ νλ€. μλ κΈ°λ₯μ μ¬μ©μκ° μ€μ ν κ²½μ°μλ μΉ΄λ©λΌλ₯Ό ν΅ν΄ μ¬μ©μμ μΌκ΅΄μ μΈμνλ€. μ΄ λ μ¬μ©μμ μΌκ΅΄μ΄ μΈμλμ§ μμΌλ©΄, μ¬μ©μκ° νμ¬ μ§μ€μ νμ§ μκ³ μλ€κ³ νλ¨νμ¬, μκ°μ μΈ‘μ νλ€. μΈ‘μ ν μκ°μ΄ μλ μ€μ μκ°μ΄μμ΄ λλ©΄ μ¬μ©μκ° μμ²ν μλ λͺ¨λ(μ리, μ§λ)μ λ°λΌ μλμ μ 곡νλ€. μ¬μ©μμ μΌκ΅΄μ΄ μΈ‘μ λμ§ μμ λλ LED μΈλμΌμ΄ν°λ₯Ό ν΅ν΄ μ¬μ©μμκ² μμμ μΈ μλμ μ 곡νλ€. μ΄ λ μ¬μ©μλ μ€μ λ‘ μ§μ€νκ³ μμμλ μΌκ΅΄ μΈμμ΄ λμ§ μκ³ μλ κ²½μ°μλ μμΈλ₯Ό λ°λ₯΄κ² νκ±°λ, μΉ΄λ©λΌ κ°λλ₯Ό μ‘°μ ν μ μκ² λλ€. μλ²λ μ¬μ©μκ° μΆκ°μ μΈ μμ²μ 보λ΄λ©΄ νμ¬ μ΄¬μ μμμ νΉμ μΉμ£Όμλ₯Ό ν΅ν΄ μ€νΈλ¦¬λ°νλ€.
Β νλμ μ΄λ₯΄λ¬μλ 근무 μκ°, μ¬κ°μκ° λ± λ€μν μ΄μ λ‘ μ₯μκ° μ± μμ μ΄μ©νλ μΈμλ€μ΄ μ¦κ°νκ³ μλ€. νμ¬μ μ± μ μ΄μ© μμΈμ κ²½μ° λ¨Έλ¦¬μ λͺ©μ κ°λ, μμ μΈμ λ° λ€μ΄μ¬λ¦Ό, μλͺ©μ ꡬλΆλ¬μ§κ³Ό μ μ λ± μ 체μ κΈ°λ₯ ꡬνμ μμ΄ μΈμ²΄μ λΆλ΄μ μ£Όκ³ μλ€. κ·Έλ‘ μΈν΄ VDT(Video Display Terminal)λΌ λΆλ¦¬λ κ·Όκ³¨κ²©κ³ μ§νμ κ²ͺλ νλμΈμ΄ μ¦κ°νκ³ μλ€. μ± μμ μμ μ₯μκ° μ 무λ₯Ό μ§ν ν λ μ 체μ λΆλ΄μ μ£Όλ μμΈλ₯Ό κ°μ νκ³ λμ μ§μ€ μκ°μ μ μ§νλ λ° λμμ΄ λλ 기ꡬλ₯Ό κ°λ°νλ€. μ±μΌλ‘ μ¬μ©μκ° μνλ κ°λλ₯Ό μΈλ°νκ² μ‘°μ ν μ μκ³ , μ‘Έμ μΈμ κΈ°λ₯κ³Ό μλ κΈ°λ₯μ μ½μ νμ¬ μ 체μ λΆλ΄μ μ€μ΄κ³ ν¨μ¨μ±μ λμΈλ€.
Β λ³Έ μμ€ν
μ μ€κ³ ꡬμ±λλ μμ κ°λ€. ν΄λΌμ΄μΈνΈμ μλ²λ WiFiνκ²½μ κΈ°λ°μΌλ‘ TCP/IP ν΅μ μ μ§ννλ€. ν΄λΌμ΄μΈνΈμ μμ²μ μλ²λ μ°κ²°λ κΈ°κΈ°λ₯Ό μ μ΄νμ¬ μ²λ¦¬νλ€. μΉ΄λ©λΌλ₯Ό ν΅ν΄ μ¬μ©μ μΌκ΅΄μ μΈμνμ¬ λΉμ§μ€ κ°μ§, μμ μ€νΈλ¦¬λ° λ±μ κΈ°λ₯μ μννλ€. μ¬μ©μμ μμ²μ μ²λ¦¬ν¨μ λ°λΌ νμν νλμ¨μ΄ μΆλ ₯ μ₯μΉλ₯Ό μ ννμ¬ μ μ΄νλ€.

Β μλ² μμ€ν
μ WiFiμ°κ²°κ³Ό Listening Socket μμ±μ νλ βμλ² Listen' λ¨κ³μ ν΄λΌμ΄μΈνΈμ μμ²μ μ²λ¦¬νλ βμμ² μ²λ¦¬β λ λΆλΆμΌλ‘ λλλ€.
Β Ubuntu NetworkManger ν¨ν€μ§λ₯Ό μ΄μ©νμ¬ μ¬μ μ μ μλ WiFiμ μ°κ²°νλ€. μ΄ν TCP μλ² μμΌμ λ§λ€κ³ ν΄λΌμ΄μΈνΈμ μ μμ κΈ°λ€λ¦°λ€.
Β ν΄λΌμ΄μΈνΈμ μμ²μ΄ λ΄κΈ΄ ν¨ν·μ λ°κ³ , μ΄λ₯Ό νμ±νμ¬ κ·Έμ λ°λ₯Έ λμμ νλ κ³Όμ μ΄λ€. μλ²λ ν΄λΌμ΄μΈνΈμκ² μ΄ν 4κ°μ§ (λͺ¨ν° μ μ΄/λΉμ§μ€ μκ° κ°μ§ λ° μλ/μμ μ€νΈλ¦¬λ°/μ μ μ μ΄)κΈ°λ₯μ μ 곡νλ€.

Β λͺ¨ν° μ μ΄ νλ‘μΈμ€λ μ¬μ©μμ λͺ©ν λ¨κ³κ° λ΄κΈ΄ queueλ₯Ό λ°μ, μ΄λ₯Ό λΉμΈ λκΉμ§ λͺ¨ν°λ₯Ό μ μ΄νμ¬ μ²λ¦¬νλ λμμ νλ€. μλ²λ μ¬μ©μμ μμ²μ μ¦μ μ€νν μ μμ λλ queueμ λ΄κ³ , μ€ν κ°λ₯ν λ queueλ₯Ό 볡μ¬νμ¬ μμ λͺ¨ν° μ μ΄ λμμ νλ νλ‘μΈμ€λ₯Ό μμ±νλ€.
κ·Έλ¬λ μλ²μ ν¨ν· νμ± μ΄ν λͺ¨ν° μ μ΄ νλ‘μΈμ€ μμ± μ 무λ₯Ό κ²°μ νκΈ° λλ¬Έμ, κΈ°μ‘΄μ λͺ¨ν° μ μ΄ νλ‘μΈμ€κ° μ’
λ£ ν, μλ‘μ΄ μμ²μ΄ λμ°©ν΄μΌλ§ queueμ λ΄κΈ΄ μμ²μ΄ μ€νλλ λ¬Έμ κ° μλ€.

Β μλ²λ μ¬μ©μκ° μλ κ΄λ ¨ κΈ°λ₯μ μ€μ νλ©΄, λΉμ§μ€ κ°μ§ νλ‘μΈμ€λ₯Ό μμ±νλ€. κ°μ§ νλ‘μΈμ€λ μ¬μ©μκ° μΌκ΅΄μ΄ μΈμλμ§ μλ μν©μ λΉμ§μ€ μκ°μ΄λΌκ³ νλ¨νλ€. λΉμ§μ€μ΄ μΈμλλ©΄ LEDλ₯Ό ν΅ν΄ κ²½κ³ νλ€. μΈ‘μ κ²°κ³Όμ λ°λΌ βμ§μ€β, βλΉμ§μ€β λκ°μ§ μνλ‘ κ΅¬λΆνλ€. λ°λ‘ μ νλ μμ μνλ₯Ό μ μ₯νκ³ , μ΄λ₯Ό ν νλ μκ³Ό λΉκ΅νλ€. λ§μ½ μνκ° λ¬λΌμ§λ©΄ λ¬λΌμ§λ μμ μ μ μ₯νλ€. μ΄ν κ°μ₯ μ΅κ·Όμ κΈ°λ‘ν μμ μΌλ‘λΆν° κ²½κ³Όν μκ°μ΄ μλ μκ°λ³΄λ€ ν¬κ³ , νμ¬ μνκ° 'λΉμ§μ€ μν' λΌλ©΄ μλ λͺ¨λμ λ°λΌ μλμ μΈλ¦°λ€.

Β λΉμ§μ€ κ°μ§ νλ‘μΈμλ LED, μ€νΌμ»€, λΆμ μ μ μ΄κ° νμνλ€. ν΄λΉ νλμ¨μ΄λ λΌμ¦λ² 리νμ΄μ GPIO μ μ΄λ₯Ό μ΄μ©ν΄ μΈλ¦¬κ² λλ€. κ° μ μ΄λ ON/OFFλ₯Ό μ€μ νλ λ°©μμ΄λ€.

Β μ¬μ©μμ μΌκ΅΄ μΈμ κ²°κ³Ό μμμ νΉμ μΉμ£Όμλ₯Ό ν΅ν΄ MJPEG over HTTP λ°©μμΌλ‘ κ³μν΄μ μ€νΈλ¦¬λ° νλ€. Flask νλ μ μν¬λ₯Ό μ΄μ©νμ¬ κ΅¬ννλ€. ν΄λΉ κΈ°λ₯μ Pythonμ ν΅ν΄ μ€ννλλ°, μ΄λ RasberryPi νλ‘μΈμ€μκ² ν° λΆνκ° λ°μνλ€. λ°λΌμ 10λΆ μ΄μ λμνλ©΄ νλ‘μΈμ€μ throttlingμ μ λ°νκ³ , μλ²μ μ²λ¦¬ μλκ° λ§€μ° λ¦μ΄μ§κ±°λ νΉμ λΌμ¦λ² 리 νμ΄κ° μ’
λ£λ μ μλ λ¬Έμ μ μ΄ μλ€.

Β μμ νμ μ΄ν OSμ μ’
λ£κΈ°λ₯μ μ΄μ©νμ¬ λΌμ¦λ² 리 νμ΄λ₯Ό μ’
λ£μν¨λ€. μ²μμΌλ‘ μμΌμ λͺ¨λ λ«λλ€. μ΄ν λͺ¨ν° μ μ΄λ₯Ό ν΅ν΄ κΈ°κΈ° μνλ₯Ό μ΄κΈ°ν νλ€. μ΄ν μ΄κΈ°νκ° λλλ©΄ νλ‘μΈμ€λ₯Ό μ°¨λ‘λ‘ μ’
λ£ μν¨ ν, Process κ°μ²΄λ₯Ό λ°ννλ€. μ΄ν 곡μ λ©λͺ¨λ¦¬ 곡κ°μ λ°ννλ€. μμνμκ° λλ νμλ OS λͺ
λ Ήμ΄λ₯Ό μ΄μ©ν΄ λΌμ¦λ² 리νμ΄λ₯Ό μ’
λ£μν¨λ€. λ°λΌμ λΌμ¦λ² 리νμ΄κ° μλ λ
립μ μΌλ‘ μ λ ₯μ 곡κΈλ°λ λͺ¨ν°μ λͺ¨ν° λλΌμ΄λ²λ μ’
λ£νμ§ λͺ»νλ€λ λ¬Έμ μ μ΄ μλ€.
- μ¬μ©μλ ν νλ©΄μμ μ€μ ν νλ‘ν μΈμλ€μ νμΈν μ μμ΅λλ€.
- νλ‘ν μΆκ°, νλ‘ν λ³κ²½, μ μ λκΈ°, μμ νμΈ λ²νΌμ λλ¬ ν΄λΉ κΈ°λ₯λ€μ μνν μ μμ΅λλ€.
- νλ‘ν μΆκ° λ° λ³κ²½, μμ νμΈ λ²νΌμ λλ₯΄λ©΄ ν΄λΉ κΈ°λ₯μ μννλ νλ©΄μΌλ‘ μ΄λν©λλ€.
- μ μ λκΈ° λ²νΌμ λλ₯΄λ©΄ μλ²λ‘ μ’
λ£ μμ²μ 보λ
λλ€.
- μ¬μ©μλ λμ΄ μ‘°μ νλ©΄μμ μ§μ μ
λ ₯νκ±°λ μ, ν λ²νΌμ μ΄μ©νμ¬ μ€μ ν λ¨κ³λ₯Ό μλ²λ‘ λ³΄λΌ μ μμ΅λλ€.
- ν΄λΉνλ λ¨κ³λ₯Ό μ¬μ©μκ° λ³Ό μ μλλ‘ κ΅¬νλμμ΅λλ€.
- λ¨κ³ μ μ₯ λ²νΌμ λλ₯΄λ©΄ νμ¬ λ¨κ³κ°μ μ¬μ©μμ μ΅μ λ¨κ³λ‘ μ μ₯ν©λλ€.
- μ¬μ©μλ μλ μ€μ νλ©΄μμ μλμ ν€κ±°λ λ μ μμ΅λλ€.
- μλμ ν€λ κ²½μ° μλ μκ°κ³Ό μλ λͺ¨λλ₯Ό μ€μ ν μ μκ² κ΅¬νλμμ΅λλ€.
- μ€μ μ μ₯ λ²νΌμ λλ₯΄λ κ²½μ° ν΄λΉ κ°λ€μ νμ¬ μ νλ νλ‘νμ μ μ₯ν©λλ€.
- 'νλ‘ν μΆκ° νλ©΄'μ μ¬μ©μμ νΈμλ₯Ό μν΄ νλ‘νμ μΆκ°νλ νλ©΄μ
λλ€.
- μ¬μ©μλ μ΄λ¦κ³Ό μλ κ΄λ ¨ μ¬μ©μ μ€μ μ νλ‘νμ μΆκ°νκ³ μ μ₯ν μ μμ΅λλ€.
- 'νλ‘ν λͺ©λ‘ νλ©΄'μ μ¬μ©μκ° κΈ°μ‘΄μ μ μ₯ν νλ‘νμ λͺ©λ‘μ λνλ
λλ€.
- μ¬μ©νκ³ μΆμ νλ‘νμ μ ν λ²νΌμ λλ₯΄λ©΄ λ©λλ€.
- μμ νκ³ μΆμ κ²½μ° μμ λ²νΌμ λλ₯΄λ©΄ λ©λλ€.
- 'μ€νΈλ¦¬λ° νλ©΄'μ μ¬μ©μκ° μμ νμΈ λ²νΌμ λλ₯Ό κ²½μ° λνλλ©°, κΈ°κΈ°μ μ°κ²°λ μΉ΄λ©λΌμμ μ‘μΆλλ μμμ΄ μΆλ ₯λ©λλ€.
- μμμ΄ λ‘λ©λλ λμ λ‘λ© λ°κ° λνλλ©°, close λ²νΌμ λλ₯΄λ©΄ μμμ΄ μ’
λ£λκ³ ν νλ©΄μΌλ‘ λμκ°λλ€.
(1) μ±μ μ²μ μ€μΉν κ²½μ° μ±μ μ€ννκ² λλ©΄ νλ‘ν μμ± νλ©΄μ΄ λνλ©λλ€.
(2) νλ‘νμ μΆκ°νκ² λλ©΄ νλ‘ν μ ν νλ©΄μ΄ λνλκ³ μΆκ°ν νλ‘νμ μ ν λ²νΌμ λλ₯΄λ©΄ ν νλ©΄μΌλ‘ λμ΄κ°λλ€.
(3) ν νλ©΄μμλ νμ¬ μ νν νλ‘νμ μ€μ κ°μ΄ λνλλ©° νλ‘ν μΆκ° λ²νΌ, νλ‘ν λ³κ²½ λ²νΌ, μ μ λκΈ°, μμ νμΈ 4κ°μ λ²νΌμ΄ μ‘΄μ¬ν©λλ€.
νλ‘ν μΆκ° λ²νΌ
μλ‘μ΄ νλ‘νμ μΆκ°ν μ μμ΅λλ€.
νλ‘ν λ³κ²½ λ²νΌ
μ μ₯λμ΄ μλ νλ‘ν μ€ νλλ₯Ό μ¬μ©μμ λ§κ² μ νν μ μμ΅λλ€.
λ€λ§, νμ¬ μ νλ νλ‘νμ μμ ν μ μμ΅λλ€.
μ μ λκΈ°
λ°λ₯Έ μμΈμ κ°λκ° μ΅μ λ¨κ³λ‘ λμκ°λ©° μ μμ΄ κΊΌμ§κ³ μ±μ μ’
λ£ν©λλ€.
μμ νμΈ
λ°λ₯Έ μμΈμ μ λ°μ μ€μΉλ μΉμΊ μ΄ μ‘μΆνλ νλ©΄μ μ¬μ©μμκ² μ 곡ν©λλ€.
(4) νλ¨ λ°μ λμ΄ μ‘°μ μμ΄μ½μ λλ₯΄κ² λλ©΄ λμ΄ μ‘°μ νλ©΄μΌλ‘ μ΄λν©λλ€.
νμ¬ λ¨κ³
λ°λ₯Έ μμΈμ νμ¬ λ¨κ³λ₯Ό λ³Ό μ μμ΅λλ€. μ¬μ©μκ° μ‘°μ νκ±°λ νλ‘νμ λ°κΎΈλ κ²½μ°
λ¨κ³ μ‘°μ
μ¬μ©μκ° μ§μ μ
λ ₯νκ±°λ λ²νΌ μ‘°μμ ν΅ν΄ λ°λ₯Έ μμΈμ λμ΄ λ¨κ³λ₯Ό μ‘°μ ν μ μμ΅λλ€.
λ¨κ³λ 1 μμλΆν° 20κΉμ§ μ€μ λμ΄ μμΌλ©° κ·Έ μΈμ κ°μ μ
λ ₯ν κ²½μ° κ·Έ μ¬μ΄μ κ°μ μ
λ ₯νλΌλ λ¬Έκ΅¬κ° λμ΅λλ€.
μ΅μ λ¨κ³ μ μ₯
νμ¬ λ¨κ³λ₯Ό μ¬μ©μ νλ‘νμ μ΅μ λ¨κ³λ‘ μ€μ ν μ μμ΅λλ€.
νλ‘νμ λ°κΎΈλ κ²½μ°μλ ν΄λΉ νλ‘νμ μ΅μ λ¨κ³λ‘ λ°λ₯Έ μμΈμ λμ΄ λ¨κ³κ° μ€μ λ©λλ€.
(5) νλ¨ λ°μ μλ μ€μ λ²νΌμ λλ₯΄κ² λλ©΄ μλ μ€μ νλ©΄μΌλ‘ μ΄λν©λλ€.
μλ on/off
μ¬μ©μμ νμμ λ°λΌ μλμ λκ³ ν¬ μ μμΌλ©° λλ κ²½μ° μλ μΈλΆ μ¬ν μ€μ μ΄ λΉνμ±ν λ©λλ€.
μλ μκ° λ° μλ λͺ¨λ
μ¬μ©μμ νμμ λ°λΌ μλμ΄ μΌμ‘μ κ²½μ° μλ μκ°κ³Ό μλ λͺ¨λλ₯Ό μ νν μ μμ΅λλ€.
μ€μ ν μλ μκ°λ³΄λ€ μ¬μ©μμ λΉμ§μ€ μκ°μ΄ λ ν° κ²½μ°μ μ리 λ° μ§λμΌλ‘ μ€μ ν μλμ΄ μΈλ¦¬κ² λ©λλ€.

