IoT・電子工作

ArduinoとPythonを連携させてIoTデバイスを自作しよう!電子工作入門チュートリアル

ArduinoとPythonって一緒に使えるの?」「IoTデバイスって自分で作れるもの?」そんな疑問を持っている方、多いんじゃないでしょうか。😊

結論から言うと、ArduinoとPythonは相性抜群で、組み合わせることでIoTデバイスを自作できるんです。しかも思ったよりずっとシンプルに始められます。

今回は「ArduinoもPythonも少しだけ触ったことある」という方に向けて、ゼロからIoTデバイスを自作するチュートリアルをお届けします。実際に動くサンプルコードつきで解説するので、一緒に手を動かしてみましょう!

🔰 この記事の対象読者・難易度

Arduino electronics
Arduino electronics / Photo by Chengxin Zhao via Pexels
  • ✅ Pythonの基本構文(変数・ループ・関数)を知っている
  • ✅ Arduinoをセットアップしたことがある、または興味がある
  • ✅ 電子工作・IoTに興味があるけど「むずかしそう」と感じている
  • ✅ 難易度:初〜中級者向け

この記事を読み終えれば、ArduinoとPythonを連携させるざっくりとした流れがつかめるはずです。「むずかしそう」が「できそう」に変わると思いますよ!

🤔 そもそもなぜArduinoとPythonを連携させるの?

ArduinoはセンサーやLEDなどハードウェアの制御が得意なマイコンボードです。一方Pythonはデータ処理・通信・GUIなどが得意な言語。

イメージとしては、こんな感じです👇

  • 🤖 Arduino = 現場で働く作業員。センサーを読んだりLEDを光らせたりする
  • 🧠 Python = 司令塔。データを受け取って処理したり、命令を送ったりする

この2つを組み合わせることで、「センサーの値をPCでリアルタイムに処理する」「Pythonからモーターを制御する」といった本格的なIoTデバイスが作れるようになります。

⚙️ 準備するもの

まず必要なものを確認しておきましょう。

  • Arduino本体(Arduino Uno など)
  • USBケーブル(ArduinoとPCを接続)
  • LED・抵抗・ブレッドボード(今回のサンプル用)
  • Arduino IDE(スケッチの書き込みに使用)
  • Python 3.x がインストール済みのPC
  • Pythonライブラリ:pyserial(シリアル通信用)

pyserialのインストールはターミナルで1行です。

pip install pyserial

これで準備はOKです!

📡 ArduinoとPythonの連携の仕組み

つまり、2つをつなぐ方法は「シリアル通信」です。

シリアル通信とは、USBケーブルを通じてArduinoとPCがデータをやりとりする仕組みのこと。Arduinoが「温度:25.3℃」とPCに送り、Pythonがその値を受け取って処理する、というイメージです。

流れをざっくりまとめると👇

  1. ArduinoがセンサーのデータをシリアルポートへPrintする
  2. PythonがそのポートをListenしてデータを受け取る
  3. Pythonがデータを処理・加工・表示する

とてもシンプルですよね。では実際にコードを書いていきましょう。

🛠️ STEP 1:ArduinoスケッチでデータをPCへ送る

まずはArduino側のコードです。今回はシンプルにアナログピンの値(センサー値に見立てて)を一定間隔で送信するスケッチを書きます。

// Arduinoスケッチ:センサー値をシリアルで送信
void setup() {
  // シリアル通信を9600bpsで開始
  Serial.begin(9600);
}

void loop() {
  // A0ピンのアナログ値を読み取る(0〜1023)
  int sensorValue = analogRead(A0);

  // 読み取った値をシリアルポートへ送信
  Serial.println(sensorValue);

  // 500ミリ秒待つ
  delay(500);
}

ポイントをまとめるとこんな感じです👇

  • Serial.begin(9600):通信速度(ボーレート)を9600に設定。Python側と必ず合わせること!
  • analogRead(A0):A0ピンのアナログ値(0〜1023)を取得
  • Serial.println():値を改行つきで送信する

このスケッチをArduino IDEでボードに書き込んでおきましょう。

🐍 STEP 2:PythonでArduinoのデータを受け取る


次にPython側です。pyserialを使ってArduinoからの値を受け取ります。

import serial  # シリアル通信ライブラリ
import time

# --- 設定 ---
# ポート名はOSによって異なります
# Windows: 'COM3' など / Mac・Linux: '/dev/ttyUSB0' など
PORT = '/dev/ttyUSB0'  # ← 自分の環境に合わせて変更!
BAUD_RATE = 9600        # Arduinoのbaud rateと合わせる

# シリアルポートを開く
ser = serial.Serial(PORT, BAUD_RATE, timeout=1)
time.sleep(2)  # Arduinoのリセット待ち(重要!)

print('Arduinoとの接続を開始しました!')

try:
    while True:
        # Arduinoからのデータを1行読み取る
        line = ser.readline()

        if line:
            # バイト列 → 文字列 → 数値に変換
            value = int(line.decode('utf-8').strip())
            print(f'センサー値: {value}')

except KeyboardInterrupt:
    print('\n終了します')
    ser.close()  # ポートを閉じる

ここが重要です!

  • PORTの指定はOSによって異なります。Windowsは「デバイスマネージャー」、Mac・Linuxはls /dev/tty*コマンドで確認できます
  • time.sleep(2):接続直後にArduinoはリセットされるため、少し待たないとデータがうまく取れません。これ、うっかり忘れがちなので注意してください⚠️
  • decode(‘utf-8’).strip():受け取ったバイト列を文字列に変換し、余分な改行を除去します

これを実行すると、500msごとにセンサー値が表示されるはずです。

🔁 STEP 3:PythonからArduinoへ命令を送る(双方向通信)

次のステップとして、PythonからArduinoにコマンドを送ることもできます。たとえば「1」を送ったらLEDをON、「0」を送ったらOFFにする、といった制御です。

Arduino側のスケッチはこうなります。

// Arduinoスケッチ:Pythonからの命令でLEDを制御
const int LED_PIN = 13;  // 内蔵LEDのピン番号

void setup() {
  Serial.begin(9600);
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  // Pythonから文字が送られてきた場合
  if (Serial.available() > 0) {
    char command = Serial.read();

    if (command == '1') {
      digitalWrite(LED_PIN, HIGH);  // LEDをON
      Serial.println('LED: ON');
    } else if (command == '0') {
      digitalWrite(LED_PIN, LOW);   // LEDをOFF
      Serial.println('LED: OFF');
    }
  }
}

Python側からはser.write(b'1')のように送ればOKです。「1」を送ればLEDが光り、「0」で消える。これだけでもう立派なIoT的な制御ですよね!😄

💡 よくあるトラブルと対処法

実際に動かしてみると詰まりやすいポイントがあります。確認しておきましょう。

  • ポートが見つからない → Arduino IDEの「ツール→ポート」で確認。Arduino IDEのシリアルモニタを閉じてからPythonを実行
  • 文字化け・値がおかしい → baud rateがArduinoとPythonで一致しているか確認
  • 最初の数行がゴミデータ → time.sleep(2)を忘れずに入れる
  • Permission denied(Mac・Linux)sudo chmod 666 /dev/ttyUSB0 を実行

📝 まとめ

今回はArduinoとPythonをシリアル通信で連携させてIoTデバイスを自作する基本の流れを解説しました。

  • ✅ ArduinoはUSBシリアル通信でPCとデータをやりとりできる
  • ✅ PythonはpyserialでArduinoのデータを受信・送信できる
  • ✅ 双方向通信でセンサー読み取り+デバイス制御の両方が実現できる

「IoTってむずかしそう」と思っていた方も、基本はシリアル通信という1本のパイプだということが伝わったでしょうか?😊

まずはこのサンプルを手元で動かしてみてください。センサーを温度センサーや距離センサーに変えるだけで、応用の幅がぐっと広がります。ぜひ自分だけのIoTデバイスを作ってみてください!一緒に電子工作の世界を楽しんでいきましょう🚀

📡 Arduinoをもっと深く学ぼう!

Arduino・ラズパイ・ロボットプログラミングを体系的に学びたい方へ。おすすめのUdemyコースや電子部品もまとめています。

Arduinoロボット入門のおすすめコース・部品を見る →

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る

Arduinoをはじめよう 第4版 (Make: PROJECTS)

もしも

Arduinoをはじめよう 第4版 (Make: PROJECTS)

Arduino公式推薦の定番入門書

Amazonで見る

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

もしも

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

電子工作とプログラミングを同時に学べる

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です