การสื่อสารระหว่าง Python และ Arduino UNO มากกว่าอนุกรมช่วยให้คุณสามารถควบคุมฮาร์ดแวร์โดยใช้สคริปต์ Python หรือส่งข้อมูลจาก Arduino ไปยัง Python สำหรับการประมวลผล บทช่วยสอนนี้จะแนะนำคุณผ่านการตั้งค่าและใช้ Python เพื่อสื่อสารกับ Arduino Uno ผ่านการเชื่อมต่ออนุกรม
สิ่งที่คุณต้องการ
- Arduino Uno พร้อมสาย USB
- Python ติดตั้งบนคอมพิวเตอร์ของคุณ (แนะนำเวอร์ชัน 3.x)
- Arduino IDE ติดตั้ง
- ห้องสมุดสำหรับการสื่อสารอนุกรม Python (เช่น
pyserial
)
ขั้นตอนที่ 1: ติดตั้งซอฟต์แวร์ที่จำเป็น
1. ติดตั้ง Python
หากคุณไม่ได้ติดตั้ง Python ให้ดาวน์โหลดจาก python.org และทำตามคำแนะนำการติดตั้ง
2. ติดตั้ง Arduino IDE
ดาวน์โหลดและติดตั้ง Arduino IDE จาก arduino.cc.
3. ติดตั้งไลบรารี pyserial
Pyserial เป็นสิ่งจำเป็นสำหรับ Python ในการสื่อสารผ่านพอร์ตอนุกรม ติดตั้งโดยใช้คำสั่งต่อไปนี้:
pip install pyserial
ขั้นตอนที่ 2: เขียนและอัปโหลดรหัส Arduino
Arduino จะส่งและรับข้อมูลผ่านพอร์ตอนุกรม ด้านล่างเป็นตัวอย่างร่าง:
รหัส Arduino
void setup() {
Serial.begin(9600); // Start serial communication at 9600 baud
while (!Serial); // Wait for the serial port to connect
Serial.println("Arduino is ready!");
}
void loop() {
// Check if data is available on the serial port
if (Serial.available()) {
String data = Serial.readString(); // Read the incoming data
Serial.print("Received: ");
Serial.println(data); // Echo the data back
// Optional: Respond based on the received data
if (data.trim() == "LED_ON") {
Serial.println("Turning LED on");
} else if (data.trim() == "LED_OFF") {
Serial.println("Turning LED off");
}
}
}
- เปิด Arduino IDE
- วางรหัสข้างต้นลงในตัวแก้ไข
- เลือกที่ถูกต้อง กระดาน และ ท่าเรือ ภายใต้ เครื่องมือ เมนู.
- คลิก อัพโหลด เพื่ออัปโหลดรหัสไปยัง Arduino Uno
ขั้นตอนที่ 3: เขียนรหัส Python
ด้านล่างเป็นตัวอย่างสคริปต์ Python เพื่อสื่อสารกับ Arduino:
รหัส Python
import serial
import time
# Configure the serial connection
arduino = serial.Serial(port='COM3', baudrate=9600, timeout=1) # Replace 'COM3' with your Arduino's port
def send_data(data):
print(f"Sending: {data}")
arduino.write(f"{data}\n".encode()) # Send data to Arduino
time.sleep(0.1)
response = arduino.readline().decode().strip() # Read response from Arduino
if response:
print(f"Arduino responded: {response}")
if __name__ == "__main__":
time.sleep(2) # Wait for Arduino to initialize
print("Connected to Arduino")
# Example: Send commands to Arduino
send_data("LED_ON")
time.sleep(2)
send_data("LED_OFF")
# Close the serial connection
arduino.close()
ขั้นตอนที่ 4: ทดสอบการตั้งค่า
- เชื่อมต่อ Arduino กับคอมพิวเตอร์ของคุณผ่าน USB
- ค้นหาพอร์ตของ Arduino:
- บน Windows: ตรวจสอบพอร์ตในตัวจัดการอุปกรณ์ (เช่น COM3)
- บน macOS/linux: ใช้ไฟล์
ls /dev/tty.*
คำสั่งเพื่อค้นหาพอร์ตที่ถูกต้อง (เช่น/dev/ttyUSB0
).
- อัปเดต
port
ค่าในสคริปต์ Python เพื่อให้ตรงกับพอร์ต Arduino ของคุณ - เรียกใช้สคริปต์ Python โดยใช้คำสั่ง:
python your_script_name.py
- สังเกตการสื่อสารระหว่าง Python และ Arduino ในเทอร์มินัลและจอภาพอนุกรม
แอปพลิเคชันของการสื่อสาร Python-Arduino
- งานฮาร์ดแวร์อัตโนมัติ (เช่นเปิดไฟ LED การควบคุมมอเตอร์)
- การบันทึกข้อมูลเซ็นเซอร์ไปยังไฟล์หรือฐานข้อมูล
- การสร้าง GUIs ที่กำหนดเองสำหรับโครงการ Arduino โดยใช้ไลบรารี Python เช่น tkinter หรือ pyqt
- การรวม Arduino เข้ากับแพลตฟอร์ม IoT
การแก้ไขปัญหา
-
ไม่มีการเชื่อมต่อกับ Arduino:
- ตรวจสอบให้แน่ใจว่ามีการระบุพอร์ตที่ถูกต้องในสคริปต์ Python
- ตรวจสอบว่าอัตราการรับส่งข้อมูลตรงกับภาพร่าง Arduino
-
ไม่มีการตอบสนองจาก Arduino:
- เพิ่มความล่าช้าหลังจากเปิดการเชื่อมต่ออนุกรม (
time.sleep(2)
). - ตรวจสอบให้แน่ใจว่าไม่มีการใช้ Arduino โดยโปรแกรมอื่น (เช่นมอนิเตอร์อนุกรมใน Arduino IDE)
- เพิ่มความล่าช้าหลังจากเปิดการเชื่อมต่ออนุกรม (
-
unicodedecodeerror:
- ตรวจสอบการเข้ารหัสข้อมูลที่ถูกส่ง/รับ ใช้
.decode(errors='ignore')
หากจำเป็น
- ตรวจสอบการเข้ารหัสข้อมูลที่ถูกส่ง/รับ ใช้
บทสรุป
คุณได้ตั้งค่าการสื่อสารระหว่าง Python และ Arduino Uno ให้สำเร็จมากกว่าอนุกรม สิ่งนี้จะเปิดโอกาสที่ไม่มีที่สิ้นสุดสำหรับการรวมไลบรารีอันทรงพลังของ Python เข้ากับความสามารถด้านฮาร์ดแวร์ของ Arduino ทดลองเพิ่มเติมโดยการเพิ่มเซ็นเซอร์มอเตอร์หรือการสร้าง GUIs ที่ใช้งูเหลือมสำหรับโครงการของคุณ!