Pyduino, gränssnitt Arduino med Python via seriell kommunikation (2 / 4 steg)
Steg 2: Konfigurera Pyduino biblioteket
Spara del av koden nedan till en fil med namnet pyduino.py
Denna del av koden skickar en seriell meddelande instruktioner till våra arduino. Arduinoen sedan tolka instruktionen och utföra denna uppgift. Dessa seriell meddelanden är bara några få tecken. Pyduino biblioteket måste kombineras med en arduino skiss på nästa steg för att det ska fungera.
Detta bibliotek stöder endast några av de funktioner som arduino har.
set_pin_mode (pin_number, läge) == pinMode (ledde, OUTPUT);
digital_write (pin_number, digital_value) == digitalWrite (ledde, högt);
digital_read(pin_number) == digitalRead(pin);
analog_read(pin_number) == analogRead(pin);
analog_write (pin_number, analog_value) == analogWrite (pin, värde);
Ta en titt på källkoden nedan för att se exakt hur det fungerar. Python-koden ansluter till arduino första gången du initierar en förekomst av klassen Arduino. Efteråt klassen har olika funktioner där det kommer att generera ett litet meddelande som vi skickar till våra arduino.
"""
Ett bibliotek för att gränssnittet Arduino via seriell anslutning
"""
importera följetong
klass Arduino():
"""
Modeller en Arduino anslutning
"""
def __init__ (self, serial_port = '/ dev/ttyACM0', baud_rate = 9600,
read_timeout = 5):
"""
Initierar seriell anslutning till Arduino styrelsen
"""
Self.Conn = följetong. Följetong (serial_port, baud_rate)
Self.Conn.timeout = read_timeout # Timeout för readline()
def set_pin_mode (self, pin_number, läge):
"""
Utför en pinMode() på pin_number
Internt skickar b är {läge} {pin_number} där läge kan vara:
-Jag för indata
-O för utdata
-P för INPUT_PULLUP MO13
"""
kommandot = (''.join(('M',mode,str(pin_number))).encode()
#print ' set_pin_mode =',command,(''.join(('M',mode,str(pin_number)))
Self.Conn.write(Command)
def digital_read (self, pin_number):
"""
Utför en digital läsa på pin_number och returnerar värdet (1 eller 0)
Internt skickar b'RD {pin_number} "över seriell anslutning
"""
kommandot = ('' .join (('RD ', str(pin_number))).encode()
Self.Conn.write(Command)
line_received = self.conn.readline().decode().strip()
sidhuvud, värde = line_received.split(':') # t ex D13:1
om rubriken == (hade ' + str(pin_number)):
# Om header matcher
återgå int(value)
def digital_write (self, pin_number, digital_value):
"""
Skriver digital_value på pin_number
Internt skickar b'WD {pin_number}: {digital_value} "över seriella
anslutning
"""
kommandot = ('' .join (("WD", str(pin_number), ':',
Str(digital_value))).encode()
Self.Conn.write(Command)
def analog_read (self, pin_number):
"""
Utför en analog läsa på pin_number och returnerar värdet (0 till 1023)
Internt skickar b'RA {pin_number} "över seriell anslutning
"""
kommandot = ('' .join (("RA", str(pin_number))).encode()
Self.Conn.write(Command)
line_received = self.conn.readline().decode().strip()
sidhuvud, värde = line_received.split(':') # t ex A4:1
om rubriken == ("A" + str(pin_number)):
# Om header matcher
återgå int(value)
def analog_write (self, pin_number, analog_value):
"""
Skriver det analoga värdet (0 till 255) på pin_number
Internt skickar b'WA {pin_number}: {analog_value} "över seriella
anslutning
"""
kommandot = ('' .join (("WA", str(pin_number), ':',
Str(analog_value))).encode()
Self.Conn.write(Command)
def close(self):
"""
Att se till vi ordentligt stänger vår anslutning till den
Arduino enhet.
"""
Self.Conn.Close()
Skriv ut "-anslutning till Arduino stängd"