ãRaspberry Piã(éç§°: ã©ãºãã€)ã¯ãå®äŸ¡ãªæã®ã²ããµã€ãºã®å°åã³ã³ãã¥ãŒã¿ãŒã§ããLinuxãåããããšãã§ããŠãé»åå·¥äœçšéã«ã䜿ããŸããIoTããŒã ã§ãšããããè²·ã£ãŠã¯ã¿ãããã©ãä»ã¯æŒãå ¥ãã§ç ã£ãŠãããšããæ¹ãå€ãã®ã§ã¯ãªãã§ãããããæ¬çš¿ã§ã¯ãã©ãºãã€ã掻çšããŠãç£èŠã«ã¡ã©ãäœã£ãŠãçå®ãã¡ãªå¹Žæ«å¹Žå§ã«æŽ»çšããããšãç®æããŠã¿ãŸãããã
ã©ãºãã€ãšã¯ïŒ
ãããããRaspberry Piã¯ãã€ã®ãªã¹ã®Raspberry Pi財å£ïŒRaspberry Pi FoundationïŒãæè²ç®çã§éçºããå°åã³ã³ãã¥ãŒã¿ã§ããå®äŸ¡ã§ã¯ã¬ãžããã«ãŒããšåããããã®ãµã€ãºãªã®ã§ã1ã€æã£ãŠããŠãéªéã«ãªããŸããã
æè¿ã§ã¯æè²çšéã«ãšã©ãŸãããLinuxãåäœããæè»œãªãã·ã³ãšããŠãå人éçºãç ç©¶çšéã§åºã䜿ãããŠããŸããæ¶è²»é»åãäœãããšããããµãŒããŒããããåŠçãé»åå·¥äœãŸã§ãããŸããŸãªå Žé¢ã§æŽ»çšã§ããŸãã
äžè¬çãªå®¶é»é販åºã§ã¯å£²ã£ãŠããªããã®ã®ãIoTããŒã ã®2013幎ã«200äžå°ã販売ããã2025幎3æãŸã§ã«ããªããšåèš6,800äžå°ä»¥äžã販売ãããŸãããè²©å£²å°æ°ãããã©ãºãã€ã®äººæ°ã窺ããã®ã§ã¯ãªãã§ããããã
ã©ãºãã€ã®è³Œå ¥ã«é¢ããŠ
2025幎çŸåšãRaspberry Pi 5ãçŸè¡ã®äž»åã¢ãã«ãšããŠè²©å£²ãããŠããŸããã¡ã¢ãªã®æèŒéã«ãã£ãŠäŸ¡æ Œãç°ãªããŸãããã¡ã¢ãªã8GBã®ã¢ãã«ã§ããã°ãAmazonã§17000åååŸã§å ¥æã§ããŸãããã ããã©ãºãã€ã¯æ¬äœã ãå ¥æããŠãäœãã§ããã黿ºãSDã«ãŒããæ¬äœã±ãŒã¹ãªã©å¿ èŠãªãã®ãæããå¿ èŠããããããŒã¿ã«ã§2ã3äžåã»ã©ãå¿ èŠãšãªããŸãã
æ¬çš¿ã§ã¯ã©ãºãã€ãç£èŠã«ã¡ã©ã®äœæã«äœ¿ããŸããããã®çšéã§ããã°ãäžäžä»£åã®ã©ãºãã€ã§ãå šãåé¡ãããŸãããçè ã¯ãRaspberry Pi 4Bã䜿ããŸããããããããå°ãæ©èœãåãã°ãRaspberry Pi 3Bã§ãåãããšã§ãããã
ãã¡ãããã©ãºãã€ã®æ§èœã¯æ°ããããŒãžã§ã³ãåºã床ã«äžãã£ãŠããŸããããµãŒããŒçšéãç£èŠçšéã«äœ¿ãã®ã§ããã°ããã·ã³ãã¯ãŒã¯ããã»ã©å¿ èŠãªããã§ã¯ãããŸããã
ä»åãç£èŠã«ã¡ã©ãäœãã®ã«æäœéå¿ èŠãšãªã®ã¯ã次ã®éãã§ãã
- ã©ãºãã€æ¬äœãšå¥å£²ãã®é»æº
- microSDã«ãŒã (32GB以äžãæšå¥š)
- USBæ¥ç¶ã®Webã«ã¡ã© (æ Œå®ã®ãã®ã§ã倧äžå€«)
äžèšã®ãã¡ã黿ºã«é¢ããŠãªã®ã§ãããã¹ããŒããã©ã³çšã®å é»åšã§ãåäœããã®ã§ãããã§ããã°å°çšã®é»æº(5V / 3A)ãè³Œå ¥ããã®ããªã¹ã¹ã¡ã§ããã¹ããŒããã©ã³çšã®å é»åšã¯ããªããšãèµ·åãããã®ã®åäœãäžå®å®ã«ãªããã¡ã§ããå ããŠãWebã«ã¡ã©ãUSBæ¥ç¶ãããšé»åäžè¶³ã«ãªãã®ã§ããã¯ãå°çšã®é»æºããªã¹ã¹ã¡ã§ãã
ãããŠãã©ãºãã€ãã»ããã¢ããããã®ã«ããããšäŸ¿å©ãªã®ããæ¬¡ã®ãã®ã§ãã
- HDMIæ¥ç¶ã®ã¢ãã¿ãŒ
- USBæ¥ç¶ã®ããŒããŒã
- SDã«ãŒãæžã蟌ã¿çšã®PC(Windows/macOS/Linux)
å€ãã®å ŽåãHDMIæ¥ç¶ã®ã¢ãã¿ãŒã¯ãèªå® ã®TVãããœã³ã³ã®ã¢ãã¿ãŒã掻çšã§ããŸãããã¹ã¯ãããPCã䜿ã£ãŠããæ¹ã§ããã°ãUSBæ¥ç¶ã®ããŒããŒãããã®ãŸãŸå©çšã§ããŸãã
ããããå¿ é ã§ã¯ãªããšããã®ããã€ã³ãã§ãSSHçµç±ã§ã©ãºãã€ã®ã»ããã¢ãããå¯èœãšãªã£ãŠããŸããã©ãºãã€ã§ã¯SDã«ãŒãã«OSãã€ã³ã¹ããŒã«ããã®ã§ããããã®éãSSHãæå¹ã«ããWi-Fiãã¹ã¯ãŒããæå®ããããšã§ãPCããSSHæ¥ç¶ãã§ããããã§ãã
ãšã¯èšããã³ãã³ãã©ã€ã³ãSSHã«äžæ £ããªæ¹ã¯ãäžå€ã·ã§ããã§å®ãUSBããŒããŒããå ¥æããã®ãå®å¿ãããããŸãããèè¶³ã§ãããçè ã¯ãããããªBluetoothæ¥ç¶ã®ããŒããŒããæã£ãŠãããã®ã®ãæ®å¿µãªããã©ãºãã€ã®ã»ããã¢ãããå®äºããŠããã§ãªããšBluetoothæ¥ç¶ã¯äœ¿ããŸããã§ããã
Raspberry Piã®OSãã»ããã¢ããããã
æŒãå ¥ãã«ç ã£ãŠããã©ãºãã€ãåŒã£åŒµãåºããŠãã人ã®å€ãã¯ãOSã®ã»ããã¢ãããããçŽã矜ç®ã«ãªããŸãããšèšãã®ããOSã®ãµããŒããåããŠããŸã£ãŠããããã§ãã2024幎ã«Debian 10(buster)ã¯æ¢ã«ãµããŒããçµäºããŠãããä»ã¯Debian 12(bookworm)ãããŒã¹ãšããRaspberry Pi OSãæäŸãããŠããŸãããã®ãããä¹ ã ã«ã©ãºãã€ãåŒã£åŒµãã ããŠãã人ã¯ãã¯ãªãŒã³ã€ã³ã¹ããŒã«ããŠãŒãããå§ããã®ããã©ãã«ãå°ãªããªã¹ã¹ã¡ã§ãã
ããæè¿ãã©ãºãã€ã®OSã»ããã¢ããã®æéã¯ããã¶ã楜ã«ãªã£ãŠããŸããç¹ã«SDã«ãŒãã®ã€ã¡ãŒãžäœæã¯ãšãŠãç°¡åã«ãªããŸããã以åã¯æé ã調ã¹ãªããã³ãã³ããæã€å¿ èŠããããŸããããçŸåšã¯å ¬åŒã®ãRaspberry Pi Imagerãã䜿ãã°ãæ°ã¯ãªãã¯ã§ææ°ã®OSãæžã蟌ããŸãã
OSã®éžæããWi-Fièšå®ãSSHã®æå¹åãŸã§äºåã«ãŸãšããŠæå®ã§ãããããååèµ·ååŸããã«äœ¿ãå§ããããŸããã»ããã¢ããã§ã€ãŸããããšã¯ã»ãšãã©ãªãã§ãããã
ãRaspberry Pi Imagerãã¯ãã¡ããããWindows/macOS/Linuxåãã®ãã®ãããŠã³ããŒãã§ããŸãã
ãRaspberry Pi Imagerããèµ·åããããæã£ãŠããããã€ã¹ãéžæãOSãéžæãšããæ¬¡ãžããã¿ã³ãé ã«ã¯ãªãã¯ããŠããã°ããã£ãšããéã«ã»ããã¢ãã宿ã§ããImagerã䜿ã£ãŠãWi-Fiã®èšå®ãã§ããã®ã§ãšãŠã楜ã§ãã
Raspberry Pi OSã®ãã¹ã¯ããããå ªèœããã
ããã©ã«ãã®Raspberry Pi OSã§ã¯ãGUIãæå¹ãšãªã£ãŠããŸãããã¹ã¯ãŒããå ¥ããŠãã°ã€ã³ãããšãäžè¬çãªãã¹ã¯ãããPCã®ããã«å©çšã§ããŸããå·Šäžã®ã©ãºãã€ã¢ã€ã³ã³ãã¯ãªãã¯ãããšãã¡ãã¥ãŒã衚瀺ãããã®ã§ããã©ãŠã¶ãªã©ããããããªã¢ããªãèµ·åã§ããŸãã
ããã©ã«ãã§ã¯ãæäœéã®ã¢ããªããå ¥ã£ãŠããŸããããDebian/Linuxç±æ¥ã®å€ãã®ããªãŒãœãããç°¡åã«ã€ã³ã¹ããŒã«ããŠäœ¿ãããšãã§ããŸããã©ãºãã€ã¡ãã¥ãŒã®ãPreferences > Recommended Software(ãªã¹ã¹ã¡ã®ãœãããŠã§ã¢ïŒããã¯ãªãã¯ãããšãäžèЧããã¢ããªãéžãã§ã€ã³ã¹ããŒã«ã§ããŸãã
ããã°ã©ãã³ã°ã«äŸ¿å©ãªãVisual Studio Codeããæè»œã«ã€ã³ã¹ããŒã«ã§ããŸãããProgramming > Visual Studio Codeãããã§ãã¯ããŠå³äžã®ãApplyããã¯ãªãã¯ãããšã€ã³ã¹ããŒã«ãå§ãŸããŸãã
ãŸããããŸãWi-Fiãèšå®ã§ããŠããªãã£ãå Žåã«ã¯ãå³äžã®Wi-Fiã¢ã€ã³ã³ãããGUIã§Wi-Fiã®èšå®ãã§ããŸãã以åã¯ãGUIããWi-Fiã®èšå®ãã§ããªãã£ãã®ã§ãããã¶ãæ¹è¯ãããŠããŸãã
äžçªç°¡å - Webã«ã¡ã©ãšPi-Connectã§ç£èŠã«ã¡ã©ãäœãã
ããŠãäžéãã»ããã¢ããã§ããããç£èŠã«ã¡ã©ã®å¶äœã«ææŠããŸãããããšèšã£ãŠããUSBæ¥ç¶ã®Webã«ã¡ã©ãUSBããŒãã«æãããããŒããŠã§ã¢ã¯å®æã§ãã
ç¶ããŠãã«ã¡ã©ãæ£ããæ¥ç¶ããããã©ããã確èªããŠã¿ãŸããããGuvcviewã䜿ããšãæè»œã«åäœç¢ºèªãã§ããŸããã©ãºãã€ã§ãã¿ãŒããã«(Terminal)ãéããŠã以äžã®ã³ãã³ããå®è¡ãããšãGuvcviewãã€ã³ã¹ããŒã«ã§ããŸãã
# ããã±ãŒãžäžèŠ§ãæŽæ°
sudo apt update
# Guvcviewãã€ã³ã¹ããŒã«
sudo apt install guvcview
# Guvcviewãèµ·å
guvcview
ãããšã次ã®ç»é¢ã®ããã«ãWebã«ã¡ã©ã®æ åãGuvcviewã«æ ãåºãããŸããæ£ããã«ã¡ã©ãæ¥ç¶ãããŠããªãå Žåãããã€ã¹éžæç»é¢ãã§ãŸããã«ã¡ã©ç»é¢ã®åŸãã«ããUIã«ãããCap.Imageãã®ãã¿ã³ãæŒããšãç»åãã¡ã€ã«ãä¿åã§ããŸãããCap.Videoããã¿ã³ãæŒããšåç»ãä¿åã§ããŸãã
ç¶ããŠãRaspberry Pi Connectãã»ããã¢ããããŸããããã¯ãããœã³ã³ã®ãã©ãŠã¶ãªã©ããRaspberry Piã®ç»é¢ããªã¢ãŒãã·ã§ã«ã«ã¢ã¯ã»ã¹ã§ãã䟿å©ãªãµãŒãã¹ã§ãããã¡ãã§ã¢ã«ãŠã³ããäœæããããã©ãºãã€æ¬äœã®å³äžã«ãããRaspberry Pi Connectãã«ãµã€ã³ã€ã³ããŸãã
-

Raspberry Pi Connectã«ãµã€ã³ã€ã³ãããšãç»é¢ãã·ã§ã«ããã©ãŠã¶ããæäœã§ããããã«ãªã
ãããŠãããœã³ã³ã®ãã©ãŠã¶ãéããŠãPi Connectã«ãµã€ã³ã€ã³ããŸãããã¡ãã«ãã端æ«äžèЧã®ç»é¢ãéããŠããConnect via > Screen sharingããã¯ãªãã¯ããŸãããããšã次ã®ç»é¢ã®ããã«ã©ãºãã€ã®ç»é¢ã衚瀺ãããŸãã
Pi Connectã䜿ããšãæè»œã«ç»é¢å ±æãã§ããã®ã§ãããã©ãºãã€ã®èšå®ã«ãã£ãŠãããŸãå ±æã§ããªãå Žåãããããã§ããã©ãºãã€ã®ã¿ãŒããã«ã§ãsudo raspi-configããå®è¡ããŠããDisplay Options ïŒ 4Kp6-HDMIãããYesãã«èšå®ãããªã©ãèšå®ã倿ŽããŠã¿ãŠãã ããã
Pi Connectã®ç»é¢å ±æã䜿ã£ãŠããç¶æ³ã§ãGuvcviewãèµ·åãããšããã€ã§ãWebã«ã¡ã©ã®ç»åã確èªã§ããŸãããã®ããã«ãäœãããã°ã©ã ãäœããªããŠããç°¡åãªç£èŠã«ã¡ã©ãšããŠäœ¿ãããšãã§ããŸãã
ãªããPi Connectã¯å人å©çšã®ç¯å²ã§ã¯åºæ¬çã«ç¡æã§äœ¿ããŸã ããæ³äººåãã®ææãªãã·ã§ã³ãååšããŸããå€åºå ããã©ãºãã€ã«æ¥ç¶ããæ¹æ³ã¯ãä»ã«ããããããããŸãã®ã§ã詊ããŠã¿ããšè¯ãã§ãããã
宿çã«ç»åãä¿åããããã«ããã
äžèšã®Pi Connectãäœ¿ãæ¹æ³ã ãšãã«ã¡ã©ç»åãä¿åããããšãã§ããŸãããããã§ãPythonã®ããã°ã©ã ãäœã£ãŠãWebã«ã¡ã©ã®ç»åã«å€åããã£ããšãããŸãã¯ãäžå®æéãéãããšãã«ãã¡ã€ã«ã«ç»åãä¿åããããã«ããŠã¿ãŸãããã
ã«ã¡ã©ç»åãååŸããã®ã«OpenCVãå©çšããŸããã©ãºãã€ã®ã¿ãŒããã«ãèµ·åããŠãPythonãšå¿ èŠãªã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããŸãããã
# ã©ã€ãã©ãªã®ã€ã³ã¹ããŒã«
sudo apt update
sudo apt install build-essential libffi-dev libssl-dev zlib1g-dev liblzma-dev libbz2-dev \
libreadline-dev libsqlite3-dev libopencv-dev tk-dev
sudo apt install -y python3 python3-pip python3-full python3-venv python3-opencv
ãã®äžã§ãäžèšã®ããã°ã©ã ããcamera_capture.pyããšããååã§ä¿åããŸãããªããããã°ã©ã ã¯ããã¡ãã«ãã¢ããããŒãããŠããŸãã
#!/usr/bin/env python3
"""Webã«ã¡ã©ããç»åããã£ããã£ããåãæ€åºæãšå®æçã«ä¿åããããã°ã©ã """
import cv2
import os
import shutil
import time
from datetime import datetime
# èšå® --- (*1)
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
SAVE_DIR = os.path.join(ROOT_DIR, "statics", "images") # ç»åä¿åãã£ã¬ã¯ããª
NOW_FILE = os.path.join(SAVE_DIR, "now.jpg") # ææ°ç»åã®ä¿åå
MOTION_THRESHOLD = 5000 # åãæ€åºã®éŸå€
PERIODIC_SAVE_INTERVAL = 600 # 宿ä¿åã®ééïŒç§ïŒ 10å = 600ç§
FRAME_WIDTH = 640 # ãã¬ãŒã ã®å¹
FRAME_HEIGHT = 480 # ãã¬ãŒã ã®é«ã
def get_filename():
"""çŸåšã®æ¥æããã¡ã€ã«åãšããŠååŸ""" # --- (*2)
now = datetime.now()
filedir = os.path.join(SAVE_DIR, now.strftime("%Y%m%d"))
if not os.path.exists(filedir):
os.makedirs(filedir)
filename = now.strftime("%H%M%S.jpg")
return os.path.join(filedir, filename)
def save_image(frame, reason=""):
"""ç»åãä¿å""" # --- (*3)
filename = get_filename()
cv2.imwrite(filename, frame)
print(f"ä¿å: {filename} {reason}")
# ææ°ç»åãšããŠãã¡ã€ã«ã³ããŒ
shutil.copyfile(filename, NOW_FILE)
return filename
def detect_motion(frame1, frame2):
"""2ã€ã®ãã¬ãŒã éã®åããæ€åº""" # --- (*4)
# ã°ã¬ãŒã¹ã±ãŒã«ã«å€æ
gray1 = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)
# ã¬ãŠã·ã¢ã³ãã©ãŒãé©çšããŠãã€ãºãæžãã
gray1 = cv2.GaussianBlur(gray1, (21, 21), 0)
gray2 = cv2.GaussianBlur(gray2, (21, 21), 0)
# ãã¬ãŒã å·®åãèšç®
frame_diff = cv2.absdiff(gray1, gray2)
_, thresh = cv2.threshold(frame_diff, 25, 255, cv2.THRESH_BINARY)
# å·®åã®åèšãèšç®
diff_sum = thresh.sum()
return diff_sum > MOTION_THRESHOLD
def main():
"""ã¡ã€ã³åŠç"""
print("Webã«ã¡ã©ç»åãã£ããã£ããã°ã©ã ãèµ·åããŸã...")
# ä¿åãã£ã¬ã¯ããªã®æºå
os.makedirs(SAVE_DIR, exist_ok=True)
# Webã«ã¡ã©ãéã --- (*5)
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("ãšã©ãŒ: ã«ã¡ã©ãéããŸããã§ãã")
return
# ã«ã¡ã©ã®è§£å床ãèšå®
cap.set(cv2.CAP_PROP_FRAME_WIDTH, FRAME_WIDTH)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, FRAME_HEIGHT)
print(f"ã«ã¡ã©ãèµ·åããŸããïŒè§£å床: {FRAME_WIDTH}x{FRAME_HEIGHT}ïŒ")
print(f"åãæ€åºéŸå€: {MOTION_THRESHOLD}")
print(f"宿ä¿åéé: {PERIODIC_SAVE_INTERVAL}ç§ïŒ{PERIODIC_SAVE_INTERVAL // 60}åïŒ")
print("çµäºããå Žå㯠Ctrl+C ãæŒããŠãã ãã")
# æåã®ãã¬ãŒã ãååŸ --- (*6)
ret, prev_frame = cap.read()
if not ret:
print("ãšã©ãŒ: ãã¬ãŒã ãèªã¿èŸŒããŸããã§ãã")
cap.release()
return
# æåŸã«ä¿åããæå»ãèšé² --- (*7)
last_save_time = time.time()
try:
while True:
# ãã¬ãŒã ãååŸ --- (*8)
ret, current_frame = cap.read()
if not ret:
print("ãšã©ãŒ: ãã¬ãŒã ãèªã¿èŸŒããŸããã§ãã")
break
# çŸåšã®æå»
current_time = time.time()
# åãæ€åº --- (*9)
motion_detected = detect_motion(prev_frame, current_frame)
if motion_detected:
save_image(current_frame, "(åãæ€åº)")
# ä¿ååŸã¯åãã¬ãŒã ãæŽæ°
prev_frame = current_frame.copy()
# 宿ä¿åïŒ10åããšïŒ --- (*10)
if current_time - last_save_time >= PERIODIC_SAVE_INTERVAL:
save_image(current_frame, "(宿ä¿å)")
last_save_time = current_time
# ãã¬ãã¥ãŒãªãã®å Žåã¯çãåŸ
æ©ã®ã¿
time.sleep(0.1)
if not motion_detected:
prev_frame = current_frame.copy()
except KeyboardInterrupt:
print("\nããã°ã©ã ãçµäºããŸã...")
finally:
# ãªãœãŒã¹ãè§£æŸ
cap.release()
cv2.destroyAllWindows()
print("ã«ã¡ã©ãè§£æŸããŸãã")
if __name__ == "__main__":
main()
ãããŠãã¿ãŒããã«ã§äžèšã®ã³ãã³ããå®è¡ãããšããã°ã©ã ãå®è¡ãããŸãã
python3 camera_capture.py
ã«ã¡ã©ã«å€åããã£ããšãããããã¯ã10åãçµéãããšãã«ç»åããã¡ã€ã«(statics/images/å¹Žææ¥/æåç§.jpg)ã«ä¿åããŸãããŸããææ°ã®ç»åãnow.jpgãšãããã¡ã€ã«åã§ä¿åããã®ã§ãåºæ¬çã«ãã®ãã¡ã€ã«ã確èªããã°ãææ°ã®ã«ã¡ã©ã®ç»åã確èªã§ããŸãã
ããã°ã©ã ã®ä»çµã¿ã確èªããŸãããã
(ïŒ1)ã§ã¯ãããã°ã©ã å šäœã«å¿ èŠãªèšå®å€ãå®çŸ©ããŠããŸããç»åã®ä¿åå ãåãæ€åºã®æåºŠïŒãã¯ã»ã«å·®ã®åèšïŒã宿ä¿åã®æéééãã«ã¡ã©è§£å床ãªã©ãèšå®ãããŠããŸããããã«ãããããã°ã©ã ãæè»ã«èª¿æŽã§ããŸãã
(ïŒ2)ã§ã¯ãçŸåšã®æ¥æã«åºã¥ããŠãã¡ã€ã«åïŒä¿åå ã®ãã¹ïŒãçæããŠããŸããæ¥ä»ããšã«ãã£ã¬ã¯ããªãåãããã¡ã€ã«åã¯æå»ã«ããŠãããããä¿åç»åãæŽçãããŠç®¡çãããããªã£ãŠããŸãã
(ïŒ3)ã§ã¯ãç»åããã¡ã€ã«ãšããŠä¿åãããã®ç»åããææ°ç»åïŒnow.jpgïŒããšããŠã³ããŒããŠããŸãã
(ïŒ4)ã§ã¯ãåãæ€åºã®åŠçãããŠããŸãã2ã€ã®ãã¬ãŒã ãã°ã¬ãŒã¹ã±ãŒã«ã«ããŠãã©ãŒåŠçã§ãã€ãºãæžãããåŸãå·®åç»åãååŸããŠãçœããªã£ãéšåã®ãã¯ã»ã«å€ã®åèšãéŸå€ãè¶ ããŠããã°ãåãããããšå€æããŸãã
(ïŒ5)ã§ã¯ãWebã«ã¡ã©ãèµ·åããŠããŸãããŸããã«ã¡ã©ã®è§£å床ãèšå®ããŠããã¬ãŒã ãµã€ãºãäžå®ã«ããŠããŸãã
(ïŒ6)ã§ã¯ãã«ã¡ã©ç»åãååŸããŸããååã®ãã¬ãŒã ãèªã¿èŸŒã¿ãåãæ€åºã®æ¯èŒå ïŒåã®ãã¬ãŒã ïŒãšããŠäœ¿çšããæºåãããŠããŸãã
(ïŒ7)ã§ã¯ãæåŸã«ç»åãä¿åããæéãèšé²ããŠããŸãããã®æ å ±ã䜿ã£ãŠã宿ä¿åã®ã¿ã€ãã³ã°ã管çããŸãã
(ïŒ8)以éã§ã¯ãç¹°ãè¿ãã«ã¡ã©ç»åãååŸããŠãçŸåšã®ãã¬ãŒã ãååŸããŸãã(ïŒ9)ã§ã¯ãåããæ€åºãããå Žåã«ç»åãä¿åããŸããä¿ååŸã¯ãæ€åºã®åºæºã«ãªãåã®ãã¬ãŒã ãæŽæ°ããŸãã
(ïŒ10)ã§ã¯ã10åããšã®å®æä¿åãè¡ã£ãŠããŸããåãããªãã£ãå Žåã§ãããã®ééã§ææ°ã®æ§åãèšé²ããããšãã§ããŸãã
ã©ãºãã€ã«ãããããªã»ã³ãµãŒãç¹ãã§ã¿ãã
å®ã¯ã以åãæ è¡ããåž°å® ãããããã¬ãããšã¢ã³ã³ããªã³ã®ãŸãŸã ã£ãããšããããŸããæ å ããã«ã¡ã©ç»åã確èªã§ããŠããã°ãã¹ããŒãããŒã ã®ãªã¢ã³ã³ã䜿ã£ãŠãå€ãããªãã«ããããšãã§ããŸãã
ãŸããã©ãºãã€ã®è¯ãã¯ãæ°è»œã«ã枩床ã»ã³ãµãŒãªã©å¥œããªã»ã³ãµãŒãæ¥ç¶ã§ããç¹ã«ãããŸããã©ãºãã€ãäžå¿ãšããŠãèªåã®å¥œããªã»ã³ãµãŒãæ¥ç¶ããããšã§ããããããªçšéã«äœ¿ããŸãã
ãŸãšã
以äžãæ¬çš¿ã§ã¯ãã©ãºãã€ãšWebã«ã¡ã©ãå©çšããç°¡åãªç£èŠã«ã¡ã©ã®äœææ¹æ³ã解説ããŸãããä»å玹ä»ããããã«ãRaspberry Pi OSã«ã¯ãã¹ã¯ãããç»é¢ããããç»é¢ããã©ãŠã¶ãã確èªã§ãã䟿å©ãªæ©èœããããŸãããã®ãããåºæ¬çã«ã¯ã«ã¡ã©ãã©ãºãã€ã«ç¹ããã ãã§ãçŸåšã®ã«ã¡ã©ã確èªã§ããŸãã
èªç±åããã°ã©ããŒããããã¯ãã©ã«ãŠãããã°ã©ãã³ã°ã®æ¥œãããäŒããæŽ»åãããŠããã代衚äœã«ãæ¥æ¬èªããã°ã©ãã³ã°èšèªããªã§ããã ãããã¹ã鳿¥œããµã¯ã©ããªã©ã2001幎ãªã³ã©ã€ã³ãœãã倧è³å ¥è³ã2004幎床æªèžãŠãŒã¹ ã¹ãŒããŒã¯ãªãšãŒã¿èªå®ã2010幎 OSSè²¢ç®è ç« åè³ããããŸã§50å以äžã®æè¡æžãå·çãããçŽè¿ã§ã¯ããå€§èŠæš¡èšèªã¢ãã«ã䜿ãããªãããã®ããã³ãããšã³ãžãã¢ãªã³ã°ã®æç§æž(ãã€ããåºç)ããPythonã§ã€ãããã¹ã¯ãããã¢ããª(ãœã·ã )ããå®è·µåã身ã«ã€ãã Pythonã®æç§æž 第2çããã·ãŽããã¯ãã©ã PythonèªååŠçã®æç§æž(ãã€ããåºç)ããªã©ã









