Python だけを使って Arduino ボードを制御できることをご存知ですか? Arduino のネイティブ言語は C++ に基づいていますが、PySerial などの専用ライブラリのおかげで、Python を使用して Arduino プロジェクトをプログラムおよび通信するかなりアクセスしやすい方法があります。この 2 つの世界の組み合わせは、興味深いだけでなく、特に電子機器とデータ処理、コンピューター ビジョン、さらには人工知能を統合しようとしている人にとっては非常に強力です。このトピックについてさらに詳しく知りたい場合は、 実用ガイド.
この記事では、必要なもの、Arduino を Python に接続する方法、いくつかの実用的な例について説明しました。 Python スクリプトを使用してボードの制御を開始するには、手順に従ってください。これらすべては、初心者と、プログラミングや電子工学の知識をすでに持っている人の両方を対象に、わかりやすく説明されています。
Arduino は Python で直接プログラムできますか?
はい、ニュアンスはありますが。 Arduino は、C++ ベースの言語を使用する独自の開発環境 (Arduino IDE) を使用してネイティブにプログラムされます。しかし、 PySerialのようなライブラリの使用のおかげで また、Snek や MicroPython などの他の代替手段 (ただし、ハードウェアの制限あり) を使用すると、Python と Arduino 間の通信を確立して、ボードを制御したり、周辺機器と対話したりすることができます。 MicroPythonの詳細については、次の記事をご覧ください。 MicroPythonの新機能.
Arduino にデータを送信する最も一般的な方法は、Python を使用することです。 シリアルポートを介して信号が送られ、ボードがそれを解釈して物理的なアクション(LED の点灯やセンサーの読み取りなど)を実行します。逆のこともでき、Arduino から Python にデータを送信し、それを表示、処理、または保存することができます。
始めるのに必要なツール
ケーブルとコードに取り掛かる前に、いくつかの基本的なアイテムを準備する必要があります。
- Arduinoボードどのモデルでも構いませんが、最も一般的なのは Arduino UNO または Nano。
- ケーブルUSB Arduino をコンピューターに接続します。
- コンピュータにPythonがインストールされている。こちらから入手できます Pythonの公式ウェブサイト.
- PySerialのインストールArduino と Python 間のシリアル通信を可能にするライブラリ。ターミナルで次のコマンドを実行してインストールできます:
pip install pyserial
PySerialが鍵となる これにより、まるで電子ロボットとチャットしているかのように、Python からコマンドを送信し、Arduino からの応答を受信できるようになります。
ステップ1: シリアルポート経由でArduinoをPythonに接続する
最も一般的なインタラクション形式の 1 つは、Python スクリプトから Arduino にデータを送信して LED のオン/オフを切り替えることです。。それを段階的に行う方法を見てみましょう。
1. 基本的なプログラムをArduinoにアップロードする
このコードは Arduino IDE からロードされ、シリアル ポート経由で受信したデータに応じて、ピン 13 に統合された LED を制御します。
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
char data = Serial.read();
if (data == '1') {
digitalWrite(13, HIGH);
} else if (data == '0') {
digitalWrite(13, LOW);
}
}
}
このスケッチはシリアルポートで受信したデータを解釈します。 「1」を受信すると、LED が点灯します。 「0」を受信した場合はオフになります。 Arduinoプロジェクトのその他の例については、次の記事をご覧ください。 Arduinoでチェスセットを作る方法.
2. Pythonからコマンドを送信する
コードがボードにロードされたら、コマンドを送信する Python スクリプトを作成します。
import serial
import time
# Inicializa la conexión
arduino = serial.Serial('COM3', 9600)
time.sleep(2)
# Enciende el LED
arduino.write(b'1')
print("LED encendido")
time.sleep(2)
# Apaga el LED
arduino.write(b'0')
print("LED apagado")
# Cierra la conexión
arduino.close()
「COM3」を対応するポートに置き換える必要があることに注意してください。 オペレーティング システムによって異なります。 Windows では通常 COM3 または COM4 です。 Linux では、/dev/ttyUSB0 のようなものです。
Arduinoに接続されたセンサーからデータを読み取る
命令を送信するだけでなく、Pythonを使用してArduinoから送信されたデータを読み取ることもできます。たとえば温度センサーからなど。さまざまなセンサーの使い方については、 DPS310センサーに関するこの記事.
1. センサーを読み取るArduinoコード
次のルーチンは、アナログ値 (LM35 センサーの出力など) を読み取り、シリアル ポートを介して送信します。
int sensorPin = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(sensorPin);
Serial.println(sensorValue);
delay(1000);
}
2. 値を読み取るPythonスクリプト
Python からこのデータを読み取って画面に表示することができます。
import serial
import time
arduino = serial.Serial('COM3', 9600)
time.sleep(2)
while True:
sensor_data = arduino.readline().decode('utf-8').strip()
print(f"Valor del sensor: {sensor_data}")
time.sleep(1)
この単純なループにより、測定値を端末に直接表示できます。
PythonからArduinoへのデータ送信と実例
Python から 1 から 9 までの数字を送信し、Arduino が LED をその回数だけ点滅させる別の例を見てみましょう。
Arduinoのスケッチ
const int pinLED = 13;
void setup() {
Serial.begin(9600);
pinMode(pinLED, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
char option = Serial.read();
if (option >= '1' && option <= '9') {
option -= '0';
for (int i = 0; i < option; i++) {
digitalWrite(pinLED, HIGH);
delay(100);
digitalWrite(pinLED, LOW);
delay(200);
}
}
}
}
値を送信するPythonスクリプト
import serial
import time
arduino = serial.Serial("COM4", 9600)
time.sleep(2)
arduino.write(b'5') # Parpadea 5 veces
arduino.close()
このタイプのインタラクションは、Python でユーザー インターフェイスを作成するのに最適です。、そして物理的なデバイスを直感的に制御できることがわかります。この文脈では、さらに詳しく調べることができます Arduinoで電子ディスプレイを使う方法.
高度な例: コンピュータービジョンによる検出
ArduinoとPythonを組み合わせることの威力を示すより高度なプロジェクトは、 OpenCVとMediaPipeを使ったコンピュータービジョン 人がマスクを着用しているかどうかを検出し、その検出結果に基づいて Arduino 上の LED を制御します。
Arduino: 2つのLEDを制御する
int led1 = 50;
int led2 = 51;
int option;
void setup() {
Serial.begin(9600);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
}
void loop() {
if (Serial.available() > 0){
option = Serial.read();
if(option == 'P'){
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
}
if(option == 'N'){
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
}
}
}
OpenCVとMediaPipeを使ったPython
Python コードでは、カメラ画像が分析され、顔が検出され、マスクを着用しているかどうかに応じて、対応する値が送信されます。
# fragmento clave
if LABELS] == "Con_mascarilla":
ser.write(b'P')
else:
ser.write(b'N')
この例は、Python と Arduino の組み合わせがいかに強力であるかを示しています。顔認識や物体検出などの高度なアルゴリズムと物理的な世界をリンクできるようになるためです。
Python で Arduino をプログラミングするのは完全に可能で、アクセスしやすく、しかも楽しいです。 LED の点灯から、センサーとコンピューター ビジョンを使用した複雑なシステムの実装まで、可能性は無限です。 Python は、Arduino プロジェクトを次のレベルに引き上げることができる強力なインターフェースとして機能します。プログラミング スキルを適用したり、Arduino ボードに第二の人生を与えたりするための実用的な方法を探しているなら、この組み合わせは間違いなく最適です。