Arduinos vises vanligvis som USB-serielle enheter. De nåværende kortene bruker USB-seriell driver innebygd i hovedmikroprosessoren, men eldre Arduinos (og kloner) brukte separate tredjeparts USB-serielle brikker.
For å bare motta Serial.print
data på Raspberry Pi fra Arduino, jeg bruker GNU Screen -programmet som en grunnleggende terminal: skjerm [seriell-port] [baud-rate]
(for eksempel skjerm / dev / ttyACM0 9600 ).
Jeg testet tre forskjellige Arduinos, og en ganske annen klon. De nyere variantene dukket opp som / dev / ttyACM0
porter, og de eldre / dev / ttyUSB0
. Dette er hva jeg fant, under Raspbian:
Raspberry Pi gir kanskje ikke nok strøm til å drive en Arduino, så du trenger kanskje ekstern strøm. For fullstendighet testet jeg også en Prolific PL2303, selv om den ikke er på noen Arduino jeg kjenner til. Det virket ganske lykkelig som /dev/ttyUSB0
.
For mer kompleks kommunikasjon med sensorer kan du vurdere Firmata, "en generell protokoll for å kommunisere med mikrokontrollere fra programvare på vertsdatamaskinen ". Den har implementeringer for Arduino og Python-biblioteker for å kjøre på Raspberry Pi-siden.
Her er et lite eksempel som bruker pyFirmata for å lese en LM35 og endre lysstyrken på en LED:
#! / usr / bin / python # - * - koding: utf-8 - * - # enkel test av pyfirmata og Arduino; lest fra en LM35 på A0,
# lys en LED på D3 ved hjelp av PWM # scruss, 2012-08-14 - testet på Arduino Uno & Raspberry Pi (Raspbian) import pyfirmata # Opprett et nytt kort, spesifiser seriell portboard = pyfirmata.Arduino ('/ dev / ttyACM0') # start en iteratortråd slik at seriell buffer ikke overløper pin3 = board.get_pin ('d: 3: p') # D3 PWM Output (LED) # VIKTIG! kast først til A0 får noe gyldig mens pin0.read () er Ingen: passfor i i rekkevidde (10): pin3.write (i / 10.0) # sett D3 til 0, 10%, 20%, ... lysstyrkeutskrift " PWM:% d %% Temperatur% .1f ° C "% (i * 10, pin0.read () * 5 * 100) board.pass_time (1) # pause 1 secondpin3.write (0) # turn LED back offboard. exit ()
Det er noen advarsler når du bruker pyFirmata:
- Analog lesing og PWM-skriving normaliseres til et 0 .. 1 område, og ikke standard Arduino 0 .. 255 og 0 .. 1023.
- Du må virkelig starte en egen iteratortråd for å stoppe gamle avlesninger som overløper den serielle bufferen
- Siden Arduino leses asynkront, sørg for at pyFirmata-tilkoblingen er fullstendig initialisert før du leser fra porter. Ellers følger
Ingen
-verdier.