Arduinos มักจะปรากฏเป็นอุปกรณ์ USB อนุกรม บอร์ดปัจจุบันใช้ไดรเวอร์อนุกรม USB ที่สร้างไว้ในไมโครโพรเซสเซอร์หลัก แต่ Arduinos รุ่นเก่า (และโคลน) ใช้ชิปอนุกรม USB ของ บริษัท อื่นแยกต่างหาก
เพื่อรับSerial.print
ข้อมูลเกี่ยวกับ Raspberry Pi จาก Arduino ฉันใช้โปรแกรมหน้าจอ GNUเป็นเทอร์มินัลพื้นฐาน: screen [serial-port] [baud-rate]
(ตัวอย่างscreen /dev/ttyACM0 9600
)
ฉันทดสอบ Arduinos ที่ต่างกันสามอันและโคลนอีกอันหนึ่งแตกต่างกัน สายพันธุ์ใหม่ทั้งหมดดูเหมือนจะเป็นพอร์ตและคนเก่า/dev/ttyACM0
/dev/ttyUSB0
นี่คือสิ่งที่ฉันพบภายใต้ Raspbian:
Raspberry Pi อาจให้พลังงานไม่เพียงพอในการขับเคลื่อน Arduino ดังนั้นคุณอาจต้องใช้พลังงานจากภายนอก เพื่อความสมบูรณ์ฉันยังทดสอบ Prolific PL2303แม้ว่ามันจะไม่ได้อยู่ใน Arduino ที่ฉันรู้จัก มันดูมีความสุข/dev/ttyUSB0
มาก
สำหรับการสื่อสารที่ซับซ้อนยิ่งขึ้นด้วยเซ็นเซอร์คุณอาจพิจารณาFirmata "โปรโตคอลทั่วไปสำหรับการสื่อสารกับไมโครคอนโทรลเลอร์จากซอฟต์แวร์บนคอมพิวเตอร์โฮสต์" มีการติดตั้งใช้งานสำหรับ Arduino และห้องสมุด Python เพื่อใช้งานบนฝั่ง Raspberry Pi
นี่คือตัวอย่างเล็ก ๆ ที่ใช้pyFirmataเพื่ออ่าน LM35 และเปลี่ยนความสว่างของ LED:
#!/usr/bin/python
# -*- coding: utf-8 -*-
# simple test of pyfirmata and Arduino; read from an LM35 on A0,
# brighten an LED on D3 using PWM
# scruss, 2012-08-14 - tested on Arduino Uno & Raspberry Pi (Raspbian)
import pyfirmata
# Create a new board, specifying serial port
board = pyfirmata.Arduino('/dev/ttyACM0')
# start an iterator thread so that serial buffer doesn't overflow
it = pyfirmata.util.Iterator(board)
it.start()
# set up pins
pin0=board.get_pin('a:0:i') # A0 Input (LM35)
pin3=board.get_pin('d:3:p') # D3 PWM Output (LED)
# IMPORTANT! discard first reads until A0 gets something valid
while pin0.read() is None:
pass
for i in range(10):
pin3.write(i/10.0) # set D3 to 0, 10%, 20%, ... brightness
print "PWM: %d %% Temperature %.1f °C" % (i * 10, pin0.read() * 5 * 100)
board.pass_time(1) # pause 1 second
pin3.write(0) # turn LED back off
board.exit()
มีข้อควรระวังบางประการเมื่อใช้ pyFirmata:
- การอ่านแบบอะนาล็อกและการเขียน PWM ถูกทำให้เป็นมาตรฐานในช่วง 0 .. 1 และไม่ใช่ Arduino 0 .. 255 และ 0 .. 1023 มาตรฐาน
- คุณจำเป็นต้องเริ่มเธรดตัววนซ้ำแบบแยกต่างหากเพื่อหยุดการอ่านค่าเก่าที่มากเกินไปของบัฟเฟอร์อนุกรม
- เนื่องจาก Arduino ได้อ่านแบบอะซิงโครนัสตรวจสอบให้แน่ใจว่าการเชื่อมต่อ pyFirmata นั้นเริ่มต้นอย่างสมบูรณ์ก่อนที่จะอ่านจากพอร์ต มิฉะนั้น
None
ค่าจะตามมา