Python 3からArduino UNOを制御 – シリアル通信でLED点滅デモ
必要な部品と材料
| 部品 | 数量 |
|---|---|
| Arduino UNO | 1 |
| USBケーブル (A-Bタイプ) | 1 |
プロジェクト概要
Python 3からシリアル通信でArduinoにコマンドを送り、ボード上の内蔵LED(Lチカ)を制御する最小構成のデモです。Python 2系の情報が多い中、Python 3.7+での動作確認済みコードを提供します。

準備
- Python 3.xをインストール(公式サイトから)
pyserialパッケージをインストール:pip install pyserial- Arduino IDEでスケッチを書き込み
- Pythonスクリプトを実行
※必ず先にArduinoスケッチをアップロードしてからPythonを実行してください
Arduinoスケッチ
int dataFromUser = 0;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
if(Serial.available() > 0) {
dataFromUser = Serial.read();
}
if(dataFromUser == '1') {
digitalWrite(LED_BUILTIN, HIGH);
} else if(dataFromUser == '0') {
digitalWrite(LED_BUILTIN, LOW);
}
}
Python 3スクリプト
import serial
import time
# ポート名は環境に合わせて変更 (Windows: COM3など, Mac/Linux: /dev/ttyUSB0など)
arduino = serial.Serial(port='COM3', baudrate=9600, timeout=1)
time.sleep(2) # Arduinoリセット待ち
print("Enter 1 to turn ON LED, 0 to turn OFF LED")
while True:
cmd = input().strip()
if cmd == '1':
arduino.write(b'1')
print("LED turned ON")
elif cmd == '0':
arduino.write(b'0')
print("LED turned OFF")
else:
print("Invalid input. Use 1 or 0.")
ポイント
- Python 3では
serial.write()にバイト列(b'1')を渡す必要があります(Python 2は文字列可) timeout=1を指定してブロッキングを防止- ポート名はデバイスマネージャー(Windows)や
ls /dev/tty*(Mac/Linux)で確認 - ボーレートは両側で9600に統一
応用アイデア
- 複数コマンドで複数LEDやサーボ、モーターを制御
- センサー値をArduino→Pythonへ送信し、グラフ描画やログ保存
- GUI(tkinter, PyQt)やWebアプリ(Flask, FastAPI)から制御
製造プロセス
- シームレスMQTT統合:NodeMCU DHT22センサーとRaspberry Pi 3 B+ブローカー
- 1SheeldとArduinoで盲ろう者のコミュニケーションを支援する
- Arduino UNOで作るLCDアニメーション&ゲーム入門
- SERENA:Arduino Mega 2560とTFT LCDタッチスクリーン搭載カスタムアラームシステム
- Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
- Arduino Nanoと128x64 OLEDで実行するセルラーオートマトン「ライフゲーム」
- Arduino NanoとRDA5807Mで作るコンパクトFMラジオ
- MKR1000 + DHT22: 温湿度データをAzureへリアルタイム送信
- Raspberry Pi 3とArduinoで作る自作ノートPC:ステップバイステップガイド
- ArduinoとPythonで作るAIアシスタントロボット「ジャウndice」
- Arduinoセンサー:種類、応用、実世界プロジェクト