Skip to content

About

LED, PhotoResistor, Buzzor, 7-Segment control with TCP protocol

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

ย 

History

65 Commits

Folders and files

Repository files navigation

VEDA Multi-Sensor TCP Control System

Raspberry Pi 4์—์„œ ๋™์ž‘ํ•˜๋Š” TCP ๊ธฐ๋ฐ˜ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ IoT ์žฅ์น˜ ์ œ์–ด ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ์›น ๋Œ€์‹œ๋ณด๋“œ์™€ CLI ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ†ตํ•ด LED, ๋ถ€์ €, 7์„ธ๊ทธ๋จผํŠธ, ์กฐ๋„์„ผ์„œ๋ฅผ ์›๊ฒฉ์œผ๋กœ ์ œ์–ดํ•˜๊ณ  ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋Š” poll() ๊ธฐ๋ฐ˜ I/O ๋‹ค์ค‘ํ™”, pthread ๊ธฐ๋ฐ˜ ์š”์ฒญ ์ฒ˜๋ฆฌ, dlopen/dlsym ๊ธฐ๋ฐ˜ ์žฅ์น˜ ๋“œ๋ผ์ด๋ฒ„ ๋™์  ๋กœ๋”ฉ, GPIO ๊ณต์œ  ์ƒํƒœ ๋™๊ธฐํ™”, ๋ฐ๋ชฌ ์‹คํ–‰์„ ํ•™์Šตํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.


์ œ์ถœ ๋ฌธ์„œ

์ œ์ถœ๋ฌผ ํŒŒ์ผ ๋‚ด์šฉ
๊ฐœ๋ฐœ๋ฌธ์„œ ๊ฐœ๋ฐœ๋ฌธ์„œ.md ํ”„๋กœ์ ํŠธ ๊ฐœ์š”, ๊ฐœ๋ฐœ ์ผ์ •, ์„ธ๋ถ€ ๊ตฌํ˜„ ๋‚ด์šฉ, ๋ฌธ์ œ์  ๋ฐ ๋ณด์™„ ์‚ฌํ•ญ
README README.md ์†Œ์Šค ๊ตฌ์กฐ, ๋นŒ๋“œ ๋ฐฉ๋ฒ•, ๋ฐฐํฌ ๋ฐ ์‹คํ–‰ ๋ฐฉ๋ฒ•
์‹คํ–‰ ๊ณผ์ • ๋ฌธ์„œ ์‹คํ–‰_๊ณผ์ •.md ๋นŒ๋“œ, ๋ฐฐํฌ, ์„œ๋ฒ„ ์‹คํ–‰, ์›น/CLI ์žฅ์น˜๋ณ„ ์‹œ์—ฐ ์ˆœ์„œ

์‹œ์—ฐ ์˜์ƒ

์‹œ์—ฐ ํ•ญ๋ชฉ ๋งํฌ
์ „์ฒด ์‹œ์—ฐ โ–ถ YouTube์—์„œ ๋ณด๊ธฐ

ํ‰๊ฐ€ ๊ธฐ์ค€ ๋Œ€์‘ ์š”์•ฝ

ํ‰๊ฐ€ ํ•ญ๋ชฉ ๋Œ€์‘ ๋‚ด์šฉ
LED ์ œ์–ด /led/on, /led/mid, /led/off, /led/brightness?value=0..1024 ๋ฐ CLI LED ๋ฉ”๋‰ด
๋ถ€์ € ์ œ์–ด /buzz/do ๋“ฑ ๊ณ„์ด๋ฆ„, ์ˆซ์ž ์Œ๊ณ„, ์ง์ ‘ ์ฃผํŒŒ์ˆ˜, /buzz/off, /buzz/fein
์กฐ๋„์„ผ์„œ /pr ์•„๋‚ ๋กœ๊ทธ ADC ์กฐํšŒ, /pr/digital ๋””์ง€ํ„ธ ์กฐํšŒ, /pr/auto/start ์ž๋™ LED ์ œ์–ด
7์„ธ๊ทธ๋จผํŠธ /segment/start, /segment/<0..9>, /segment/show/<0..9>, /segment/off
๊ตฌํ˜„ ๋‚ด์šฉ poll() ์—ฐ๊ฒฐ ๊ฐ์‹œ, ์š”์ฒญ๋ณ„ pthread_detach, ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ถ„๋ฆฌ, GPIO ๋ฎคํ…์Šค, ๋ฐ๋ชฌ ๋ชจ๋“œ, ์ž˜๋ชป๋œ ๋ช…๋ น 400 ์‘๋‹ต, ๊ฒฝ๋กœ ์ˆœํšŒ ์ฐจ๋‹จ
์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ ์›น ๋Œ€์‹œ๋ณด๋“œ์™€ CLI ํด๋ผ์ด์–ธํŠธ ๋ณ‘ํ–‰ ์ œ๊ณต, -f ์ „๊ฒฝ ๋””๋ฒ„๊ทธ ๋ชจ๋“œ, SIGINT ์ข…๋ฃŒ ์ฒ˜๋ฆฌ
๋ฌธ์„œ README, ๊ฐœ๋ฐœ๋ฌธ์„œ, ์‹คํ–‰ ๊ณผ์ • text ํŒŒ์ผ ์ž‘์„ฑ
์ถ”๊ฐ€ ๊ธฐ๋Šฅ PWM ๋ฐ๊ธฐ ์ œ์–ด, FEIN ์•Œ๋ฆผ ๋ฉœ๋กœ๋””, ์กฐ๋„ ๊ธฐ๋ฐ˜ ์„œ๋ฒ„ ์ž๋™ LED ์ œ์–ด, ์‹ค์‹œ๊ฐ„ ํ™œ์„ฑ ์Šค๋ ˆ๋“œ ๋ชจ๋‹ˆํ„ฐ, GitHub Issues ๊ธฐ๋ฐ˜ ๋ฌธ์ œ ์ถ”์ 

๋ฌธ์„œ ๋งํฌ

๋ฌธ์„œ ๋งํฌ
๊ธฐํš์„œ TCP ์›๊ฒฉ ์žฅ์น˜ ์ œ์–ด ํ”„๋กœ๊ทธ๋žจ
๊ฐœ๋ฐœ ๋ช…์„ธ์„œ TCP ์„œ๋ฒ„/ํด๋ผ์ด์–ธํŠธ ๋ฐ ์žฅ์น˜ ์ œ์–ด
๊ฐœ๋ฐœ๋ฌธ์„œ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”, ์ผ์ •, ๊ตฌํ˜„ ๋‚ด์šฉ, ๋ฌธ์ œ์  ๋ฐ ๋ณด์™„

๊ฐœ๋ฐœ ์ผ์ •

gantt
    title VEDA Multi-Sensor TCP Control System ๊ฐœ๋ฐœ ์ผ์ •
    dateFormat YYYY-MM-DD
    axisFormat %m/%d

    section 1๋‹จ๊ณ„ - ์„ค๊ณ„
    TCP ์„œ๋ฒ„/ํด๋ผ์ด์–ธํŠธ ๊ตฌ์กฐ ์„ค๊ณ„          :done, d1-1, 2026-06-01, 1d
    ์žฅ์น˜๋ณ„ ํŒŒ์ผ ๋ถ„๋ฆฌ ๋ฐฉํ–ฅ ์ˆ˜๋ฆฝ             :done, d1-2, 2026-06-01, 1d

    section 2๋‹จ๊ณ„ - ๊ธฐ๋ณธ ๊ตฌํ˜„
    LED ์ œ์–ด ๊ตฌํ˜„                         :done, d2-1, 2026-06-02, 1d
    ๋ถ€์ € ์ œ์–ด ๊ตฌํ˜„                         :done, d2-2, 2026-06-02, 1d
    ์กฐ๋„์„ผ์„œ ์ œ์–ด ๊ตฌํ˜„                     :done, d2-3, 2026-06-02, 1d
    7์„ธ๊ทธ๋จผํŠธ ์ œ์–ด ๊ตฌํ˜„                    :done, d2-4, 2026-06-02, 1d
    ์›น ๋Œ€์‹œ๋ณด๋“œ ๋ฆฌ์†Œ์Šค ์—ฐ๊ฒฐ                :done, d2-5, 2026-06-02, 1d

    section 3๋‹จ๊ณ„ - ๊ตฌ์กฐ ๋ณด๊ฐ•
    ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฌ์กฐ ํ™•์ • (dlopen)     :done, d3-1, 2026-06-03, 1d
    GPIO ๊ณต์œ  ์ƒํƒœ/๋ฎคํ…์Šค ๋ณด๊ฐ•            :done, d3-2, 2026-06-03, 1d
    ๋ฐ๋ชฌ ๋ชจ๋“œ ๊ตฌํ˜„                         :done, d3-3, 2026-06-03, 1d
    ์‹œ๊ทธ๋„ ์ฒ˜๋ฆฌ ๋ณด์™„                       :done, d3-4, 2026-06-03, 1d

    section 4๋‹จ๊ณ„ - ์•ˆ์ •ํ™” ๋ฐ ๋ฌธ์„œ
    ํด๋ผ์ด์–ธํŠธ ์ž…๋ ฅ ๊ฒ€์ฆ ๊ฐ•ํ™”              :done, d4-1, 2026-06-04, 1d
    ์‹œ๊ทธ๋„ ์•ˆ์ „์„ฑ ๊ฐœ์„  (sigaction)         :done, d4-2, 2026-06-04, 1d
    ์—ฐ๊ฒฐ ์žฌ์‹œ๋„ (์ง€์ˆ˜ ๋ฐฑ์˜คํ”„)              :done, d4-3, 2026-06-04, 1d
    ํ™œ์„ฑ ์Šค๋ ˆ๋“œ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ตฌํ˜„              :done, d4-4, 2026-06-04, 1d
    ๋ฌธ์„œ ์ •๋ฆฌ ๋ฐ GitHub Issues ๋ฐ˜์˜       :done, d4-5, 2026-06-04, 1d

    section 5๋‹จ๊ณ„ - ๋ฒ„๊ทธ ์ˆ˜์ •
    ์ž˜๋ชป๋œ ๋ช…๋ น 400 ์‘๋‹ต ์ฒ˜๋ฆฌ              :done, d5-1, 2026-06-05, 1d
    ์ •์  ํŒŒ์ผ ๊ฒฝ๋กœ ์ˆœํšŒ ์ฐจ๋‹จ               :done, d5-2, 2026-06-05, 1d
Loading

๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

VEDA_4Sensor_TCP_Control/
โ”œโ”€โ”€ Makefile                  # ํฌ๋กœ์Šค ์ปดํŒŒ์ผ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ (sysroot ์„ค์ • ์ ์šฉ)
โ”œโ”€โ”€ Makefile.simple           # ์ผ๋ฐ˜ ํ™˜๊ฒฝ์šฉ ๋‹จ์ˆœ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ
โ”œโ”€โ”€ README.md                 # ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ ๋ฐ ๋นŒ๋“œ/์‹คํ–‰ ์•ˆ๋‚ด
โ”œโ”€โ”€ ๊ฐœ๋ฐœ๋ฌธ์„œ.md                # ๊ฐœ๋ฐœ ๊ณผ์ • ๋ฐ ์„ธ๋ถ€ ๊ตฌํ˜„ ๋ฌธ์„œ
โ”œโ”€โ”€ ์‹คํ–‰_๊ณผ์ •.md                # ๋นŒ๋“œ~์‹œ์—ฐ ์ „์ฒด ์ ˆ์ฐจ
โ”‚
โ”œโ”€โ”€ src/                      # ์†Œ์Šค ์ฝ”๋“œ
โ”‚   โ”œโ”€โ”€ main.c                # TCP ์„œ๋ฒ„ (poll + pthread, ๋ฐ๋ชฌ, ๋™์  ๋กœ๋”ฉ)
โ”‚   โ””โ”€โ”€ client.c              # CLI ํด๋ผ์ด์–ธํŠธ (Ubuntu Linux์šฉ)
โ”‚
โ”œโ”€โ”€ include/                  # ๊ณต์œ  ํ—ค๋” ํŒŒ์ผ
โ”‚   โ”œโ”€โ”€ rpi_common.h          # GPIO ์ดˆ๊ธฐํ™”, ๋ฎคํ…์Šค, ๊ณต์œ  ์ƒํƒœ ์„ ์–ธ
โ”‚   โ”œโ”€โ”€ led.h                 # LED ๋“œ๋ผ์ด๋ฒ„ ์ธํ„ฐํŽ˜์ด์Šค
โ”‚   โ”œโ”€โ”€ buzzor.h              # ๋ถ€์ € ๋“œ๋ผ์ด๋ฒ„ ์ธํ„ฐํŽ˜์ด์Šค
โ”‚   โ”œโ”€โ”€ photoresistor.h       # ์กฐ๋„์„ผ์„œ ๋“œ๋ผ์ด๋ฒ„ ์ธํ„ฐํŽ˜์ด์Šค
โ”‚   โ””โ”€โ”€ segment.h             # 7์„ธ๊ทธ๋จผํŠธ ๋“œ๋ผ์ด๋ฒ„ ์ธํ„ฐํŽ˜์ด์Šค
โ”‚
โ”œโ”€โ”€ lib/                      # ์žฅ์น˜ ๋“œ๋ผ์ด๋ฒ„ ์†Œ์Šค (โ†’ .so ๋นŒ๋“œ)
โ”‚   โ”œโ”€โ”€ rpi_common.c          # wiringPi ์ดˆ๊ธฐํ™”, GPIO ๋ฎคํ…์Šค ๊ตฌํ˜„
โ”‚   โ”œโ”€โ”€ led.c                 # LED ON/MID/OFF/PWM ์ œ์–ด
โ”‚   โ”œโ”€โ”€ buzzor.c              # ๋ถ€์ € ๊ณ„์ด๋ฆ„/์ฃผํŒŒ์ˆ˜/์•Œ๋ฆผ ๋ฉœ๋กœ๋””
โ”‚   โ”œโ”€โ”€ photoresistor.c       # ADC ์•„๋‚ ๋กœ๊ทธ + ๋””์ง€ํ„ธ ์กฐ๋„ ์ฝ๊ธฐ
โ”‚   โ””โ”€โ”€ segment.c             # 7์„ธ๊ทธ๋จผํŠธ ์นด์šดํŠธ๋‹ค์šด/๋‹จ๋ฐœ ํ‘œ์‹œ
โ”‚
โ”œโ”€โ”€ resources/                # ์›น ๋Œ€์‹œ๋ณด๋“œ HTML
โ”‚   โ”œโ”€โ”€ index.html            # ๋ฉ”์ธ ํŽ˜์ด์ง€ (์žฅ์น˜ ๋ฉ”๋‰ด)
โ”‚   โ”œโ”€โ”€ led.html              # LED ์ œ์–ด UI
โ”‚   โ”œโ”€โ”€ buzzer.html           # ๋ถ€์ € ์ œ์–ด UI
โ”‚   โ”œโ”€โ”€ segment.html          # 7์„ธ๊ทธ๋จผํŠธ ์ œ์–ด UI
โ”‚   โ””โ”€โ”€ pr.html               # ์กฐ๋„์„ผ์„œ ์กฐํšŒ/์ž๋™ ์ œ์–ด UI
โ”‚
โ””โ”€โ”€ docs/                     # ๋ฌธ์„œ ๋ฐ ์ด๋ฏธ์ง€
    โ”œโ”€โ”€ images/
    โ”‚   โ””โ”€โ”€ raspberry-pi-4-sensor-output-circuit.png
    โ””โ”€โ”€ issue_report.md       # ์ด์Šˆ ํ•ด๊ฒฐ ๋ณด๊ณ ์„œ

๋นŒ๋“œ ํ›„ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— server, client, lib*.so ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ, .gitignore์— ์˜ํ•ด Git ์ถ”์ ์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.


์‹œ์Šคํ…œ ๊ตฌ์กฐ

Web Browser / CLI Client
        |
        | HTTP-like TCP request (:8000)
        v
src/main.c
  - poll() ๊ธฐ๋ฐ˜ ์—ฐ๊ฒฐ ๊ฐ์‹œ
  - ์š”์ฒญ๋ณ„ detached pthread ์ฒ˜๋ฆฌ
  - ์ •์  HTML ๋ฆฌ์†Œ์Šค ์ œ๊ณต
  - ์žฅ์น˜ ์ œ์–ด API ๋ผ์šฐํŒ…
  - ์กฐ๋„์„ผ์„œ ๊ธฐ๋ฐ˜ ์ž๋™ LED ์ œ์–ด ์Šค๋ ˆ๋“œ
        |
        +-- libled.so
        +-- libbuzzor.so
        +-- libsegment.so
        +-- libphotoresistor.so
        |
        v
lib/rpi_common.c / include/rpi_common.h
  - wiringPi ์ดˆ๊ธฐํ™”
  - GPIO ๋ฎคํ…์Šค
  - LED ์ƒํƒœ ๋ฐ ์นด์šดํŠธ๋‹ค์šด ์ทจ์†Œ ํ”Œ๋ž˜๊ทธ ๊ณต์œ 
        |
        v
Raspberry Pi 4 GPIO / I2C

๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ๋ช…์€ ํ˜„์žฌ ์ฝ”๋“œ์™€ ๋™์ผํ•˜๊ฒŒ libbuzzor.so๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์•„ํ‚คํ…์ฒ˜

์„œ๋ฒ„๋Š” ๋น„๋™๊ธฐ์‹์œผ๋กœ ๋‹ค์ˆ˜์˜ ์š”์ฒญ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๊ณ  ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด 3๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ์Šค๋ ˆ๋“œ๋กœ ์„ค๊ณ„๋˜์–ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์Šค๋ ˆ๋“œ ํƒ€์ž… ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ ๋ฐฉ์‹ ์ฃผ์š” ์—ญํ•  ๋ฐ ์ˆ˜๋ช…
๋ฉ”์ธ ์Šค๋ ˆ๋“œ (Main Thread) ํ”„๋กœ์„ธ์Šค ๊ธฐ๋™ ์‹œ ๊ธฐ๋ณธ ์ƒ์„ฑ * poll()์„ ์‚ฌ์šฉํ•ด ํด๋ผ์ด์–ธํŠธ ์†Œ์ผ“ ์—ฐ๊ฒฐ ์ˆ˜์‹ 
* ์‹ ๊ทœ ์ ‘์† ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ clnt_connection ์Šค๋ ˆ๋“œ ์ƒ์„ฑ ๋ฐ pthread_detach
* ์„œ๋ฒ„ ์ข…๋ฃŒ(SIGINT/SIGTERM) ์ˆ˜์‹  ์‹œ auto_pr_thread๋ฅผ joinํ•˜๊ณ , ํ™œ์„ฑ ์š”์ฒญ ์Šค๋ ˆ๋“œ๋“ค์ด ์ž์›์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ๊นŒ์ง€ ์•ˆ์ „ํ•˜๊ฒŒ ๋Œ€๊ธฐ(Graceful Shutdown)
ํด๋ผ์ด์–ธํŠธ ์Šค๋ ˆ๋“œ (Client Thread) ์—ฐ๊ฒฐ ์ˆ˜์‹  ์‹œ pthread_create๋กœ ๋™์  ์ƒ์„ฑ * **๋ถ„๋ฆฌ ์ƒํƒœ(Detached)๋กœ ์‹คํ–‰๋˜์–ด ์Šค์Šค๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ž์›์„ ์ •๋ฆฌ
thread_list_mutex ๋™๊ธฐํ™” ํ•˜์— ์ „์—ญ ์Šค๋ ˆ๋“œ ์ •๋ณด ๋ฐฐ์—ด(active_threads)์— ์ž์‹ ์˜ ์ •๋ณด(TID, Client IP, Command, Start Time)๋ฅผ ๋“ฑ๋ก/ํ•ด์ œ
์„ธ๊ทธ๋จผํŠธ ์นด์šดํŠธ๋‹ค์šด(segment/start)๊ณผ ๊ฐ™์ด ์ง€์—ฐ ์‹œ๊ฐ„(delay(1000))์ด ํฌํ•จ๋œ ๋ช…๋ น ์ˆ˜ํ–‰ ์‹œ, ์‹คํ–‰ ์‹œ๊ฐ„๋งŒํผ ์Šค๋ ˆ๋“œ๊ฐ€ ์œ ์ง€๋˜์–ด ๋ชจ๋‹ˆํ„ฐ๋ง ํ…Œ์ด๋ธ”์— ์‹ค์‹œ๊ฐ„ ๋…ธ์ถœ
์ž๋™ ์กฐ๋„ ์ œ์–ด ์Šค๋ ˆ๋“œ (Auto PR Thread) /pr/auto/start ์š”์ฒญ ์‹œ pthread_create๋กœ ์ƒ์„ฑ * **์กฐ์ธ ๊ฐ€๋Šฅ ์ƒํƒœ(Joinable)๋กœ ์ƒ์„ฑ๋˜์–ด ๋‹จ ํ•˜๋‚˜๋งŒ ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌ๋™
auto_pr_running ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ™œ์„ฑํ™”๋œ ๋™์•ˆ 1์ดˆ ์ฃผ๊ธฐ๋กœ ์กฐ๋„์„ผ์„œ ๋””์ง€ํ„ธ ๊ฐ’์„ ์ฝ์–ด LED๋ฅผ ์ž๋™ ์ œ์–ด
/pr/auto/stop ์š”์ฒญ ๋˜๋Š” ์„œ๋ฒ„ ์ข…๋ฃŒ ์‹œ ํ”Œ๋ž˜๊ทธ๊ฐ€ 0์œผ๋กœ ๊บผ์ง€๋ฉด์„œ ๋ฃจํ”„ ํƒˆ์ถœ ํ›„ ์ข…๋ฃŒ๋˜๋ฉฐ pthread_join์œผ๋กœ ์ˆ˜๊ฑฐ๋จ

ํšŒ๋กœ ๊ตฌ์„ฑ๋„

Raspberry Pi 4 Sensor and Output Circuit

์‹ค์ œ ํ•€ ์—ฐ๊ฒฐ ๋ฐ ์„ธ๊ทธ๋จผํŠธ ํƒ€์ž…์€ ์•„๋ž˜ ํ•€๋งต๊ณผ ์ฝ”๋“œ ์„ค์ •(include/rpi_common.h, lib/segment.c)์„ ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.


์ฃผ์š” ๊ธฐ๋Šฅ

๊ธฐ๋Šฅ ์„ค๋ช…
์›น ๋Œ€์‹œ๋ณด๋“œ resources/ ์•„๋ž˜ HTML ํŽ˜์ด์ง€๋กœ LED, ๋ถ€์ €, 7์„ธ๊ทธ๋จผํŠธ, ์กฐ๋„์„ผ์„œ๋ฅผ ์ œ์–ด
CLI ํด๋ผ์ด์–ธํŠธ client <RPI_IP>๋กœ ์„œ๋ฒ„์— ์ ‘์†ํ•ด ์žฅ์น˜ ์ œ์–ด ๋ช…๋ น ์ „์†ก
LED ์ œ์–ด ON, MID, OFF ๋ฐ 0~1024 ๋ฐ๊ธฐ ๊ฐ’ ์ž…๋ ฅ (์„œ๋ฒ„ ๋‚ด๋ถ€์—์„œ softPwm 0~100์œผ๋กœ ๋งคํ•‘)
๋ถ€์ € ์ œ์–ด ๊ณ„์ด๋ฆ„, ์ˆซ์ž ์Œ๊ณ„, ์ง์ ‘ ์ฃผํŒŒ์ˆ˜, ์•Œ๋ฆผ ๋ฉœ๋กœ๋”” ์ œ์–ด
7์„ธ๊ทธ๋จผํŠธ ์นด์šดํŠธ๋‹ค์šด, ๋‹จ์ผ ์ˆซ์ž ํ‘œ์‹œ, OFF ์š”์ฒญ ๊ธฐ๋ฐ˜ ์ทจ์†Œ ์ฒ˜๋ฆฌ
์กฐ๋„์„ผ์„œ PCF8591 I2C ADC ๊ฐ’ ์กฐํšŒ, ๋””์ง€ํ„ธ ์กฐ๋„ ๊ฐ’ ์กฐํšŒ, ์ž๋™ LED ์ œ์–ด
์Šค๋ ˆ๋“œ ๋ชจ๋‹ˆํ„ฐ๋ง ์›น ๋ฉ”์ธ ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์„œ๋ฒ„ ๋‚ด ๋น„๋™๊ธฐ ํ™œ์„ฑ ์Šค๋ ˆ๋“œ ๋ชฉ๋ก(TID, IP, ์ž‘์—…, Uptime)์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ 1.5์ดˆ ์ฃผ๊ธฐ ๋ Œ๋”๋ง
๋ฐ๋ชฌ ๋ชจ๋“œ ๊ธฐ๋ณธ ์‹คํ–‰ ์‹œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ฐ๋ชฌ์œผ๋กœ ์‹คํ–‰, -f ๋˜๋Š” --foreground๋กœ ์ „๊ฒฝ ์‹คํ–‰

API ๊ฒฝ๋กœ

๊ฒฝ๋กœ ๋™์ž‘
/ resources/index.html ์ œ๊ณต
/led/on LED ์ตœ๋Œ€ ๋ฐ๊ธฐ ON
/led/mid LED ์ค‘๊ฐ„ ๋ฐ๊ธฐ
/led/off LED OFF ๋ฐ ์นด์šดํŠธ๋‹ค์šด ์ทจ์†Œ ํ”Œ๋ž˜๊ทธ ์„ค์ •
/led/brightness?value=0..1024 PWM ๋ฐ๊ธฐ ์ œ์–ด
/led/state ์„œ๋ฒ„๊ฐ€ ์ถ”์  ์ค‘์ธ LED ์ƒํƒœ ์กฐํšŒ
/buzz/do, /buzz/re, ... ๋ถ€์ € ๊ณ„์ด๋ฆ„ ์žฌ์ƒ
/buzz/1 ~ /buzz/8 ๋ถ€์ € ์ˆซ์ž ์Œ๊ณ„ ์žฌ์ƒ
/buzz/<frequency> ์ง์ ‘ ์ฃผํŒŒ์ˆ˜ ์žฌ์ƒ
/buzz/off ๋ถ€์ € ์ •์ง€
/buzz/fein ๋˜๋Š” /buzz/alert ์•Œ๋ฆผ ๋ฉœ๋กœ๋”” ์žฌ์ƒ
/segment/start 9๋ถ€ํ„ฐ 0๊นŒ์ง€ ์นด์šดํŠธ๋‹ค์šด
/segment/<0..9> ์ง€์ • ์ˆซ์ž๋ถ€ํ„ฐ 0๊นŒ์ง€ ์นด์šดํŠธ๋‹ค์šด
/segment/show/<0..9> ์ง€์ • ์ˆซ์ž ๋‹จ๋ฐœ ํ‘œ์‹œ
/segment/off 7์„ธ๊ทธ๋จผํŠธ ๋ฐ LED OFF
/ldr/start /segment/start์™€ ๋™์ผํ•œ ํ˜ธํ™˜ ๊ฒฝ๋กœ
/pr PCF8591 ADC ์•„๋‚ ๋กœ๊ทธ ์กฐ๋„ ๊ฐ’ ์กฐํšŒ
/pr/digital ๋””์ง€ํ„ธ ์กฐ๋„ ๊ฐ’ ์กฐํšŒ
/pr/auto/start ์„œ๋ฒ„ ์ธก ์ž๋™ LED ์ œ์–ด ์‹œ์ž‘
/pr/auto/stop ์„œ๋ฒ„ ์ธก ์ž๋™ LED ์ œ์–ด ์ค‘์ง€
/api/threads ํ˜„์žฌ ํ™œ์„ฑ ์Šค๋ ˆ๋“œ๋“ค์˜ ์ƒํƒœ ๋ชฉ๋ก(TID, IP, ๋ช…๋ น์–ด, Uptime)์„ JSON ๋ฐฐ์—ด๋กœ ์‘๋‹ต

์กฐ๋„์„ผ์„œ ๋™์ž‘ ๊ธฐ์ค€

์•„๋‚ ๋กœ๊ทธ ์กฐ๋„ ๊ฐ’์€ lib/photoresistor.c์˜ get_cds_value()๊ฐ€ PCF8591 I2C ADC์—์„œ ์ฝ์–ด ์˜ต๋‹ˆ๋‹ค.

๊ฐ’ ๊ธฐ์ค€
ADC ๊ฐ’ 0~255 ๋ฒ”์œ„์˜ ์•„๋‚ ๋กœ๊ทธ ์กฐ๋„ ๊ฐ’
๊ธฐ๋ณธ ์ž„๊ณ„๊ฐ’ threshold = 200
๋ฐ์Œ ํŒ๋‹จ ADC ๊ฐ’์ด ์ž„๊ณ„๊ฐ’๋ณด๋‹ค ์ž‘์„ ๋•Œ
์–ด๋‘์›€ ํŒ๋‹จ ADC ๊ฐ’์ด ์ž„๊ณ„๊ฐ’ ์ด์ƒ์ผ ๋•Œ

๋””์ง€ํ„ธ ์กฐ๋„ ๊ฐ’์€ get_pr_value()๊ฐ€ digitalRead(PR_PIN)์œผ๋กœ ์ฝ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์ž๋™ LED ์ œ์–ด๋Š” ํ˜„์žฌ ๋””์ง€ํ„ธ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๋””์ง€ํ„ธ ๊ฐ’ ์˜๋ฏธ ์ž๋™ ์ œ์–ด
0 / LOW ์–ด๋‘์›€ LED ON
1 / HIGH ๋ฐ์Œ LED OFF

CLI ์ž…๋ ฅ ๊ธฐ์ค€

CLI ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฉ”๋‰ด ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋ฒ„ API ๊ฒฝ๋กœ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”๋‰ด ์ž…๋ ฅ ์˜ˆ ์„œ๋ฒ„ ์š”์ฒญ
LED ON, MID, OFF, 300 /led/on, /led/mid, /led/off, /led/brightness?value=300
Buzzer do, 5, 880, off /buzz/do, /buzz/5, /buzz/880, /buzz/off
7-Segment start, off, 5, show/5 /segment/start, /segment/off, /segment/5, /segment/show/5
Photoresistor ๋ฉ”๋‰ด ๋ฒˆํ˜ธ 1~5 /pr, /pr/digital, /pr/auto/start, /pr/auto/stop

7์„ธ๊ทธ๋จผํŠธ๋Š” 1์ž๋ฆฌ ์žฅ์น˜์ด๋ฏ€๋กœ 0~9 ๋‹จ์ผ ์ž๋ฆฟ์ˆ˜๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. 00 ๊ฐ™์€ ๋‹ค์ค‘ ์ž๋ฆฟ์ˆ˜ ์ž…๋ ฅ์€ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค.

CLI ํด๋ผ์ด์–ธํŠธ์˜ ์ž…๋ ฅ ๊ฒ€์ฆ ํ˜„ํ™ฉ:

๋ฉ”๋‰ด ๊ฒ€์ฆ ๋‚ด์šฉ
LED ON/MID/OFF ๋ฌธ์ž์—ด ๋˜๋Š” 0~1024 ๋ฒ”์œ„ ์ˆซ์ž๋งŒ ํ—ˆ์šฉ
7-Segment start, off, 0~9(1์ž๋ฆฌ), show/0~9(1์ž๋ฆฌ)๋งŒ ํ—ˆ์šฉ. ๊ทธ ์™ธ ์ž…๋ ฅ ์‹œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ ํ›„ ๋ฉ”๋‰ด ๋ณต๊ท€
Photoresistor ์„œ๋ธŒ ๋ฉ”๋‰ด ๋ฒˆํ˜ธ 1~5 ์ด์™ธ ์ž…๋ ฅ ์‹œ Invalid option ์ถœ๋ ฅ

ํ•€๋งต

์žฅ์น˜ wPi Pin BCM GPIO Physical Pin ๋น„๊ณ 
LED 1 18 12 PWM, 220ฮฉ
Buzzer 2 27 13 softTone
CDS SDA 8 2 3 PCF8591 ADC, I2C 0x48
CDS SCL 9 3 5 PCF8591 ADC, I2C 0x48
CDS Digital 0 17 11 Pull-up, 10kฮฉ
7-Segment A 21 5 29 Common Anode
7-Segment B 22 6 31 Common Anode
7-Segment C 23 13 33 Common Anode
7-Segment D 24 19 35 Common Anode
7-Segment E 25 26 37 Common Anode
7-Segment F 27 16 36 Common Anode
7-Segment G 28 20 38 Common Anode
7-Segment DP 29 21 40 Common Anode
Default VCC - - 1 3.3V
7-Segment VCC - - 2 5V
Default GND - - 9 GND

๋นŒ๋“œ ํ™˜๊ฒฝ

Makefile์€ ์„œ๋ฒ„์™€ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ Raspberry Pi์šฉ AArch64 ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ํฌ๋กœ์Šค ์ปดํŒŒ์ผํ•˜๊ณ , CLI ํด๋ผ์ด์–ธํŠธ๋Š” ํ˜ธ์ŠคํŠธ PC์šฉ gcc๋กœ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ๋„๊ตฌ์™€ ๊ฒฝ๋กœ:

aarch64-linux-gnu-gcc
gcc
make
~/rpi-sysroot
~/rpi-sysroot/usr/local/include
~/rpi-sysroot/usr/local/lib

~/rpi-sysroot์—๋Š” Raspberry Pi์˜ wiringPi ํ—ค๋”์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๋นŒ๋“œ

๋นŒ๋“œ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์ ํ•ฉํ•œ Makefile์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐœ์ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ (sysroot ์ ์šฉ): ๊ธฐ๋ณธ ์ œ๊ณต๋˜๋Š” Makefile์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐฐํฌ ๋ฐ ์ผ๋ฐ˜ ํ™˜๊ฒฝ (sysroot ๋ฏธ์ ์šฉ): Makefile.simple์„ ๋ณต์‚ฌํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    rm -f Makefile
    cp Makefile.simple Makefile

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

make clean && make

๋นŒ๋“œ ๊ฒฐ๊ณผ:

ํŒŒ์ผ ์„ค๋ช…
server Raspberry Pi์—์„œ ์‹คํ–‰ํ•  TCP ์›น ์„œ๋ฒ„
client ํ˜ธ์ŠคํŠธ PC์—์„œ ์‹คํ–‰ํ•  CLI ํด๋ผ์ด์–ธํŠธ
libled.so LED ์ œ์–ด ๋“œ๋ผ์ด๋ฒ„
libbuzzor.so ๋ถ€์ € ์ œ์–ด ๋“œ๋ผ์ด๋ฒ„
libphotoresistor.so ์กฐ๋„์„ผ์„œ ๋“œ๋ผ์ด๋ฒ„
libsegment.so 7์„ธ๊ทธ๋จผํŠธ ๋“œ๋ผ์ด๋ฒ„

๋ฐฐํฌ

๋ฐฐํฌ ๊ธฐ์ค€ ๊ฒฝ๋กœ๋Š” /home/sunbi/prj๋กœ ํ†ต์ผํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ๋ฐ๋ชฌ ์‹คํ–‰ ์‹œ /proc/self/exe๋ฅผ ํ†ตํ•ด ์‹คํ–‰ ํŒŒ์ผ์ด ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•˜๋ฏ€๋กœ, ์‹คํ–‰ ํŒŒ์ผ๊ณผ lib*.so, resources/๊ฐ€ ๊ฐ™์€ ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์— ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• A: Make ๋ช…๋ น์–ด๋กœ ์ž๋™ ๋ฐฐํฌ (๊ถŒ์žฅ)

# ๊ธฐ๋ณธ ๋ณ€์ˆ˜(RPI_USR=sunbi, RPI_IP=192.168.0.100, RPI_DIR=/home/sunbi/prj)๋ฅผ ์‚ฌ์šฉ
make deploy

# ํŠน์ • IP, ๊ณ„์ •, ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋ฐฐํฌ
make deploy RPI_IP=192.168.1.50 RPI_USR=pi RPI_DIR=/home/pi/myproject

๋ฐฉ๋ฒ• B: ์ˆ˜๋™ ๋ช…๋ น์–ด๋กœ ๋ฐฐํฌ

ssh sunbi@<RPI_IP> "mkdir -p /home/sunbi/prj"
scp server lib*.so sunbi@<RPI_IP>:/home/sunbi/prj/
scp -r resources sunbi@<RPI_IP>:/home/sunbi/prj/

์‹คํ–‰

Raspberry Pi์—์„œ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

cd /home/sunbi/prj
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
./server

์ „๊ฒฝ ๋กœ๊ทธ๋ฅผ ๋ณด๋ฉด์„œ ๋””๋ฒ„๊น…ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

cd /home/sunbi/prj
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
./server -f

ํ˜ธ์ŠคํŠธ PC์—์„œ CLI ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

./client <RPI_IP>

์›น ๋Œ€์‹œ๋ณด๋“œ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋‹ค์Œ ์ฃผ์†Œ๋กœ ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.

http://<RPI_IP>:8000/

์‹œ๊ทธ๋„ ์ฒ˜๋ฆฌ

์„œ๋ฒ„ (src/main.c)

์‹œ๊ทธ๋„ ์ฒ˜๋ฆฌ ๋ฐฉ์‹
SIGINT, SIGTERM, SIGHUP sigaction()์œผ๋กœ ๋“ฑ๋ก. volatile sig_atomic_t server_running ํ”Œ๋ž˜๊ทธ๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ๋ฉ”์ธ ๋ฃจํ”„๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ข…๋ฃŒ

ํด๋ผ์ด์–ธํŠธ (src/client.c)

์‹œ๊ทธ๋„ ์ฒ˜๋ฆฌ ๋ฐฉ์‹
SIGINT sigaction()์œผ๋กœ ๋“ฑ๋ก. volatile sig_atomic_t server_running ํ”Œ๋ž˜๊ทธ ๋ฐฉ์‹์œผ๋กœ ๋ฉ”์ธ ๋ฃจํ”„๋ฅผ ํƒˆ์ถœํ•œ ๋’ค, ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ pr/auto/stop ์š”์ฒญ ์ „์†ก ๋ฐ ์†Œ์ผ“ ์ •๋ฆฌ ํ›„ ์•ˆ์ „ ์ข…๋ฃŒ
SIGTSTP ๋ฌด์‹œ (SIG_IGN)
SIGQUIT ๋ฌด์‹œ (SIG_IGN)

์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๋ชจ๋‘ ์‹œ๊ทธ๋„ ํ•ธ๋“ค๋Ÿฌ ๋‚ด๋ถ€์—์„œ๋Š” volatile sig_atomic_t ํ”Œ๋ž˜๊ทธ๋งŒ ์„ค์ •ํ•˜๊ณ , I/O ์ž‘์—…์€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์ˆ˜ํ–‰ํ•˜์—ฌ POSIX ๋น„๋™๊ธฐ ์‹œ๊ทธ๋„ ์•ˆ์ „์„ฑ์„ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.


์—ฐ๊ฒฐ ์‹คํŒจ ์žฌ์‹œ๋„

CLI ํด๋ผ์ด์–ธํŠธ์˜ send_command() ํ•จ์ˆ˜๋Š” ์„œ๋ฒ„ ์—ฐ๊ฒฐ ์‹คํŒจ ์‹œ ์ตœ๋Œ€ 3ํšŒ ์‹œ๋„(์ดˆ๊ธฐ 1ํšŒ + ์žฌ์‹œ๋„ 2ํšŒ)๋ฅผ ์ง€์ˆ˜ ๋ฐฑ์˜คํ”„(Exponential Backoff) ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์‹œ๋„ ๋Œ€๊ธฐ ์‹œ๊ฐ„
1์ฐจ ์‹œ๋„ ์‹คํŒจ 1์ดˆ ๋Œ€๊ธฐ ํ›„ ์žฌ์‹œ๋„
2์ฐจ ์‹œ๋„ ์‹คํŒจ 2์ดˆ ๋Œ€๊ธฐ ํ›„ ์žฌ์‹œ๋„
3์ฐจ ์‹œ๋„ ์‹คํŒจ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ ํ›„ ๋ฉ”๋‰ด ๋ณต๊ท€

์ด์Šˆ ํŠธ๋ž˜ํ‚น

ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ์ค‘ ๋ฐœ๊ฒฌ๋œ ๋ฒ„๊ทธ์™€ ๊ฐœ์„  ์‚ฌํ•ญ์€ GitHub Issues์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ด์Šˆ ๋ฆฌํฌํŠธ ๋‚ด์šฉ
issue_report.md Active Thread Monitor API ์ค‘์ฒฉ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ
issue_report_response_code.md ์ž˜๋ชป๋œ ๋ช…๋ น 400 ์‘๋‹ต ๋ฐ ๊ฒฝ๋กœ ์ˆœํšŒ ์ฐจ๋‹จ

ํ•ด๊ฒฐ๋œ ์ถ”๊ฐ€ ์ด์Šˆ

ํ•ญ๋ชฉ ์„ค๋ช…
์ž˜๋ชป๋œ ๋ช…๋ น์— 200 OK ๋ฐ˜ํ™˜ ์žฅ์น˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ˜ํ™˜ ํƒ€์ž…์„ void โ†’ int๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์‹คํŒจ ์‹œ 400 Bad Request๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ˆ˜์ •
์ •์  ํŒŒ์ผ ๊ฒฝ๋กœ ์ˆœํšŒ ์ทจ์•ฝ์  sendData()์—์„œ .. ๊ฒฝ๋กœ๋ฅผ ์ฐจ๋‹จํ•˜๊ณ , ํŒŒ์ผ ์—ด๊ธฐ ์„ฑ๊ณต ํ›„์— 200 OK ํ—ค๋”๋ฅผ ์ „์†กํ•˜๋„๋ก ์ˆœ์„œ ๋ณ€๊ฒฝ

์•Œ๋ ค์ง„ ๋ณด์™„ ์ง€์ 

ํ•ญ๋ชฉ ์„ค๋ช…
์กฐ๋„์„ผ์„œ ์ž๋™ ์ œ์–ด ์ข…๋ฃŒ์„ฑ cdsControl()์€ ๋ฌดํ•œ ๋ฃจํ”„ ๊ตฌ์กฐ์ด๋ฏ€๋กœ ์„œ๋ฒ„ ์ž๋™ ์ œ์–ด๋Š” get_pr_value()๋ฅผ ์ฃผ๊ธฐ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋Œ€์ฒด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
์นด์šดํŠธ๋‹ค์šด ์ •๋ฐ€๋„ delay(1000)๊ณผ GPIO ๋ฎคํ…์Šค ์žฌํš๋“ ํƒ€์ด๋ฐ์— ๋”ฐ๋ผ ์ง€ํ„ฐ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ผ์ด์„ ์Šค ํŒŒ์ผ README์—๋Š” MIT License๋กœ ํ‘œ๊ธฐ๋˜์–ด ์žˆ์œผ๋‚˜, ๋ณ„๋„ LICENSE ํŒŒ์ผ ์ถ”๊ฐ€๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฐฉ์‹ (Hot-swapping)

  • ์š”์ฒญ ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ๋กœ๋“œ (On-Demand Loading): ์„œ๋ฒ„๋Š” ๊ตฌ๋™ ์‹œ์ ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์˜๊ตฌ ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ , ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์ œ์–ด ๋ฃจํ”„๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค dlopen()์„ ํ†ตํ•ด .so ํŒŒ์ผ์„ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๊ณ  ์ œ์–ด ์™„๋ฃŒ ์‹œ dlclose()๋กœ ์ฆ‰์‹œ ๋‚ด๋ฆฝ๋‹ˆ๋‹ค.
  • ๋ฌด์ค‘๋‹จ ์‹ค์‹œ๊ฐ„ ๋ฐ˜์˜: ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ์ƒํƒœ์—์„œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์ ์šฉ๋œ .so ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ์„ ๋นŒ๋“œ ๋ฐ ๋ฎ์–ด์“ฐ๊ธฐํ•˜๋ฉด, ์„œ๋ฒ„ ์žฌ์‹œ์ž‘์ด๋‚˜ ๋ฆด๋กœ๋“œ ์กฐ์ž‘ ์—†์ด ๋‹ค์Œ ์žฅ์น˜ ์ œ์–ด ์š”์ฒญ ์‹œ์ ๋ถ€ํ„ฐ ์ฆ‰์‹œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ๋ฌด์ค‘๋‹จ(Hot-swap)์œผ๋กœ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.

๋ผ์ด์„ ์Šค ๋ฐ ๊ฐœ๋ฐœ์ž ์ •๋ณด

ํ•ญ๋ชฉ ๋‚ด์šฉ
๊ฐœ๋ฐœ์ž sunbi, VEDA 4๊ธฐ
๋ชฉ์  Raspberry Pi 4 ํ™˜๊ฒฝ์—์„œ TCP ํ†ต์‹ , ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋กœ๋”ฉ, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ GPIO ์ œ์–ด ํ•™์Šต
๋ผ์ด์„ ์Šค MIT License

About

LED, PhotoResistor, Buzzor, 7-Segment control with TCP protocol

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages