Arduinos genellikle USB seri aygıtlar olarak görünür. Mevcut kartlar, ana mikroişlemciye yerleşik USB seri sürücüsünü kullanıyor, ancak daha eski Arduinos (ve klonlar) üçüncü taraf USB seri yongaları kullanıyordu.
Serial.print
Raspberry Pi hakkında Arduino'dan veri almak için GNU Screen programını temel bir terminal olarak kullanıyorum: screen [serial-port] [baud-rate]
(örneğin screen /dev/ttyACM0 9600
).
Üç farklı Arduino ve bir tane daha farklı klon test ettim. Yeni varyantların tümü /dev/ttyACM0
port, daha eskileri olarak göründü /dev/ttyUSB0
. Raspbian'ın altında bulduğum şey bu:
Ahududu Pi bir Arduino'yu sürecek kadar güç sağlamayabilir, bu nedenle harici güce ihtiyaç duyabilirsiniz. Tamamlanması için, bildiğim herhangi bir Arduino'da olmasa da, Prolific PL2303'ü test ettim. Oldukça mutlu göründü /dev/ttyUSB0
.
Sensörler ile daha karmaşık iletişim için , "bir ana bilgisayardaki yazılımdan gelen mikrodenetleyicilerle iletişim kurmak için genel bir protokol" olan Firmata'yı düşünebilirsiniz . Arduino ve Raston Pi tarafında çalışacak Python kütüphaneleri için uygulamaları var.
İşte kullanarak küçük bir örnek pyFirmata bir LM35 okuyup LED'in parlaklığını değiştirmek için:
#!/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 kullanırken bazı uyarılar vardır:
- Analog okur ve PWM yazmaları standart Arduino 0 .. 255 ve 0 .. 1023 değil, 0 .. 1 aralığına normalleştirilir.
- Seri arabellek taşması eski okumaları durdurmak için gerçekten ayrı bir yineleyici iş parçacığı başlatmanız gerekir
- Arduino asenkron olarak okunduğundan, portlardan okumadan önce pyFirmata bağlantısının tamamen başlatıldığından emin olun. Aksi takdirde
None
değerler ortaya çıkar.