Arduinos आमतौर पर USB सीरियल डिवाइस के रूप में दिखाई देते हैं। वर्तमान बोर्ड मुख्य माइक्रोप्रोसेसर में निर्मित USB सीरियल ड्राइवर का उपयोग करते हैं, लेकिन पुराने Arduinos (और क्लोन) ने अलग-अलग तृतीय-पक्ष USB-सीरियल चिप्स का उपयोग किया है।
बस Serial.print
Arduino से रास्पबेरी पाई पर डेटा प्राप्त करने के लिए , मैं एक बुनियादी टर्मिनल के रूप में GNU स्क्रीन प्रोग्राम का उपयोग करता हूं : screen [serial-port] [baud-rate]
(उदाहरण के लिए screen /dev/ttyACM0 9600
)।
मैंने तीन अलग-अलग Arduinos का परीक्षण किया, और एक के बजाय अलग क्लोन। नए वेरिएंट सभी /dev/ttyACM0
पोर्ट और पुराने के रूप में दिखाई दिए /dev/ttyUSB0
। यह मुझे रास्पबियन के तहत मिला:
रास्पबेरी पाई एक Arduino को चलाने के लिए पर्याप्त शक्ति प्रदान नहीं कर सकती है, इसलिए आपको बाहरी शक्ति की आवश्यकता हो सकती है। पूर्णता के लिए, मैंने एक प्रोलिफिक PL2303 का भी परीक्षण किया , भले ही यह किसी भी Arduino पर नहीं है जिसे मैं जानता हूं। यह काफी खुशी से दिखाई दिया /dev/ttyUSB0
।
सेंसर के साथ अधिक जटिल संचार के लिए, आप फर्मेटा पर विचार कर सकते हैं , "एक मेजबान पर सॉफ्टवेयर से माइक्रोकंट्रोलर के साथ संचार करने के लिए एक सामान्य प्रोटोकॉल"। रास्पबेरी पाई की तरफ चलने के लिए इसमें Arduino और Python पुस्तकालयों के लिए कार्यान्वयन है।
यहाँ एक छोटा सा उदाहरण दिया गया है, जो एक LM35 पढ़ने और एक एलईडी की चमक को बदलने के लिए pyFirmata का उपयोग कर रहा है:
#!/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 का उपयोग करते समय कुछ चेतावनी हैं:
- एनालॉग पढ़ता है और पीडब्लूएम लिखता है एक 0 .. 1 श्रेणी के लिए सामान्यीकृत होता है, न कि मानक Arduino 0 .. 255 और 0 से 1023।
- धारावाहिक बफ़र से बहने वाली पुरानी रीडिंग को रोकने के लिए आपको वास्तव में एक अलग चलना शुरू करने की आवश्यकता है
- चूंकि Arduino को अतुल्यकालिक रूप से पढ़ा जाता है, इसलिए सुनिश्चित करें कि पोर्ट से पढ़ने से पहले pyFirmata कनेक्शन पूरी तरह से आरंभिक है। अन्यथा,
None
मूल्य सुनिश्चित होते हैं।