semaver
New member
Bu özel blog baskısı Python programlama dilinden bahsediyor. Kesinlikle Python gibi terimler, uzak bir arduino'yu kontrol etmek için kullanılabilir. Veya bir Arduino kartı ile iletişim kurmak için.
Bir programlama dili olarak Python, özellikle bilimsel-matematiksel alanda birçok destekçiye sahiptir. Raspberry Pi, “Pi” ilavesini en azından Python diline borçludur, bu da Monty Python dizilerine benzer bir kült statüsüne sahip. Bu bölümde, Arduino Python'un sevgilisi de bir seçenek olup olmadığı sorusuyla yüzleşmek istiyoruz.
Gerçekte Python için bir çalışma zamanı ortamı, örneğin Yun (Arduino.cc, Arduino.org) veya Tian (Arduino.org) için Linino veya OpenWRT dağılımlarında sadece başka bir Linux sistemine sahip Arduino kartlarında anlamlıdır.
Kahraman insanlar Pymite ile Mega gibi daha güçlü mikrodenetleyici kartlar için de bir Python ortamı olduğunu bilirler. Bununla birlikte, kişisel olarak ek katma değer görmüyorum, çünkü boyut nedeniyle, ne önemli Python kitapçıları kullanılamaz, ne de kodunuz için yeterli alan değildir.
Python, JavaScript ile karşılaştırılabilir bir uzaktan kumanda seçeneği olarak kesinlikle bir seçenektir.
Şirket eskiz
Bu sefer illüstrasyona Arduino'ya erişen bir Python programı ile başlamak istiyorum. Burada biri kütüphanede olmak üzere iki temel seçenek var seri Ve yukarıda Pyfurmed. İkinci varyant, Arduino Konseyi'ndeki şirketi gerektirir.
Sonra menü üzerinden şarj edin Dosya | Örnekler | Ajans Arduino Konseyinizde Standart Eskiz Şirketi.
Python'u kurun
Bu makalede Python 2.7.x. Daha yeni üçüncü yıllık sürümler var, ancak tüm ilgili kitapçılar en son sürümler için hala mevcut değil. Bununla birlikte, gelecekteki dil sürümlerinde bir Python 2.7.x programının da yapılacağı garanti edilmektedir. Bu bağlamda, her şey üstesinden gelmek iyidir.
3.4 ve 2.7.9 Python sürümleri programı getiriyor Pip Bununla yüklemeliydin. Bu, Python için önerilen paketlerin kurulum yöneticisidir. İşletim sisteminiz için Python indirmeleri Python.org web sitesinden alınabilir.
Bu makale için gereken kütüphanelere Pyfurmed VEYA pyseria Yüklemek için, kullanın Pip Konsol/Terminal komut satırında aşağıdaki gibi:
pip install pyserial
VE
pip install pyfirmata
Zaten gerekli tüm hazırlık çalışmalarıydı.
Python programlama
Mac, Linux veya Windows'ta gerçekleştirilebilen aşağıdaki Python programında, bir Arduino uno'nun 9, 10, 11'ine bağlı üç LED'e erişirsiniz. Bu nedenle Python programı, daha önce bir ikili küpün uygulanması için sunulan Arduino kütüphanesini de sunan işlevleri de uygular.
Python'un sözdizimini açıklayacak alan eksikliği var. Bu nedenle ilgili taraflar bu tür öğreticilere yöneliktir. C: Python'a benzer dil dünyasının globtrutinleri için, akrabaları olan sınırlı bloklar veya bir yapılandırma ajanı olarak sınırlı anahtar kelimeler yerine kullanılan bir öneri izin verilir. A Eğer-C'deki talimatlar
if (x > y)
....;
max = x;
} else {
....;
max = y;
}
printf("Hello Worldn");
Python programcılarını aşağıdaki gibi yazın:
if (x > y):
....
max = x
else:
....
max = y
print('Hello World');
Bir Python programını, örneğin en sevdiğiniz editörle değiştirebilirsiniz. Başlangıç daha sonra komut satırında gerçekleşir Python myrogram.py. Ayrıca, yeni Python kurulumları aktif olmayan (entegre geliştirme ve öğrenme ortamı) içerir. Daha rahat bir şekilde ihtiyacınız varsa, aşağıdaki seçeneklerden birini alın:
Python Arduino'yu arar
Ama şimdi gerçek Python programına geliyoruz. İlk olarak rastgele bir jeneratör, 1 ila 6 arasında sonsuz bir döngüde üretilir. Bu nedenle doğranmış göz sayısı üç bölgeli bir ikili değer olarak yayılır, böylece LED'ler tek tek bitlere karşılık gelir. Goodie gibi, Python programı da bir listedeki gözlerin olası tüm gözlerini şu ana kadar ne sıklıkta meydana geldiklerini hatırlıyor.
# Bibliotheken pyFirmata und random importieren
import pyfirmata
import random
RedPin = 9
YellowPin = 10
GreenPin = 11
Delay = 1 # Eine Sekunde Pause pro Iteration
Iteration = 0
Port = '/dev/cu.usbmodem143311' # Unter Windows und Linux ändern
# Neues Board anlegen
board = pyfirmata.Arduino(Port) # Mit Firmata verbinden
resList = [0,0,0,0,0,0] # Liste mit allen Vorkommen von Ergebnissen
while True:
Iteration += 1 # nächste Runde
dice = random.randrange(1,7) # Würfeln
resList[dice - 1] = resList[dice - 1] + 1
print('Wuerfel zeigt an: ' + str(dice))
if dice // 4 == 1:
board.digital[RedPin].write(1)
dice = dice % 4
else:
board.digital[RedPin].write(0)
if dice // 2 == 1:
board.digital[YellowPin].write(1)
dice = dice % 2
else:
board.digital[YellowPin].write(0)
board.digital[GreenPin].write(dice)
print(resList); # bisher gewürfelte Augenzahlen
board.pass_time(Delay)
Listede bir Arduino/gerçek olanın kullanılabilirliğini talep ediyorum:
board = pyfirmata.Arduino(Port)
Kullanımda bir mega olsaydı, bunun yerine şöyle yazmalıyım:
board = pyFirmata.ArduinoMega(Port)
Uzun bir süre sonra bilgisayarımda gerçekleştirilen programın ara puanı:
....
Wuerfel zeigt an 3
[2188, 2234, 2126, 2180, 2203, 2251]
Wuerfel zeigt an 3
[2188, 2234, 2127, 2180, 2203, 2251]
Wuerfel zeigt an 3
[2188, 2234, 2128, 2180, 2203, 2251]
Wuerfel zeigt an 5
[2188, 2234, 2128, 2180, 2204, 2251]
Wuerfel zeigt an 5
[2188, 2234, 2128, 2180, 2205, 2251]
Listedeki rakamlar, göz sayısının zaten gerçekleştiği sıklığını göstermektedir. Göz sayısının dağılımının beklentilerin istatistiksel değerine yaklaştığını kolayca görebilirsiniz.
bu ve bu
İşte bazı önemli özellikler Pyfurmed Özetle. İçinde Pyfurmed İşlev var Iteoretore (). Bu bir iş parçacığını açar ve bir arabellek kullanarak seri çizgiden okunan değerleri yönetir. Bu işlev olmadan, seri kapı taşmaya yol açabilir:
import os #OS Funktionen einbinden
from pyfirmata import Arduino, util
from time import sleep
port = 'dev/ttyACM0' # Linux Port
board = Arduino(Port)
sleep(10)
it = util.Iterator(board)
it.start()
a0 = board.get_pin('a:0:i')
try:
while True:
p = a0.read()
print p
except: KeyboardInterrupt:
board.exit()
os._exit()
Bu örnekte, kartın pimlerini belirtmenin başka bir yolu da vardır.
a0 = board.get_pin('a:0:i')
Medya: a => analog, 0 => pin, i => giriş. Bu nedenle, bu noktadan itibaren bir eğitimde A0.read () olası. Bu şekilde, PWM pimini belirtmek de mümkündür (PWM = modülasyonlu darbe). Beyanname
pwmPort = board.get_pin('d:12
')
PWM modunda DigitalPin 12'yi kaldırın.
Bir çağrı
pwmPort.write(0.30)
Yüzde 30 çalışma döngüsü var. Ortalama olarak, 5 V bağlantı noktası 1.5 V'lik bir voltajdır. Alternatif olarak, aşağıdaki gibi ilerleyebilirsiniz:
board.digital[13].mode = PWM
board.digital[13].write(0.30)
Ayrıca izin verilen Pyfurmed . Servo-Yöntemler. Hizmetkar Açıkçası servomotorun kontrolü içindir. Aşağıdaki talimat dizisi, 90 ° döndürülen Porta 13'e bağlı bir motor servo tanımlar.
board.digital[13].mode = SERVO
angle = 90
board.digital[13].write(angle)
İçinde Pyfurmed Mevcut kartlar kompozit nesneler (sözlük nesneleri) aracılığıyla belirtilir.
Örneğin bir Arduino Promini, aşağıdaki gibi uzlaştırılabilir:
ProMini = {
'digital' : tuple(x for x in range(14)),
'analog' : tuple(x for x in range(8)),
'pwm' : (3, 5, 6, 9, 10, 11),
'use_ports' : True,
'disabled' : (0, 1) # Rx, Tx, Crystal
}
Sisteme başlatılmada bir Arduino kartı verdikten sonra …
port = 'dev/ttyACM0' # Linux Port
board = Arduino(Port)
… Birleşmiş Milletler kartının üzerine yazabiliriz, Promino skorbordunun düzeni ile:
board.setup_layout(ProMini)
Pyserier kullanarak Arduino ve Python arasındaki iletişim
İlk eskizde, şirketi Python üzerinden Arduino kartını kontrol etmek için kullandık. Saf iletişim söz konusu olduğunda, örneğin PC ve Arduino, Arduino ve Arduino veya diğer donanım ve Arduino arasında kütüphane geldi pyseria kullanılmış. Bu seri iletişimi uygular. Bu şekilde, örneğin, USB aracılığıyla bağlı bir Arduino ile bir Python programından “sohbet” yapabilirsiniz.
Arduino'nun taslağı aşağıdadır. İlk olarak, eskiz, seri kapıdan 64 uzunluğunda bir halka arabelleği üzerindeki verileri okur. Arduino daha sonra göndereni gönderene gönderen gönderene okur: Ters arabellek (dizin)
const int BUFSIZE = 64; // Größe des Puffers
char buffer[64]; // Puffer
void setup() {
Serial.begin(9600);
}
void loop() {
int index = 0;
// erst lesen ...
while (Serial.available() > 0) {
buffer[index++] = Serial.read();
index = index % BUFSIZE; // Ringpuffer Modus
}
// ... dann Nachricht rückwärts über die Leitung
// zurücksenden:
reverseBuffer(index);
delay(100); // Kleine Pause
}
// Wir lesen den Puffer rückwärts
// und senden Byte für Byte über die Leitung
void reverseBuffer(int len) {
int index = len - 1;
while (index >= 0) {
Serial.print(buffer[index--]);
}
}
Python programı artık karmaşık değil. Arduino ile bağlantıyı kurar, zorlu karakterlerden oluşan bir zincir yazar, oradan ekrana harcayan bir cevap alır. Arduino Limanı'nı Arduino fikrinde görebilirsiniz. Arduino eskiz penceresindeki doğru arka plana baktığınızda.
import serial # pySerial importieren
# Ersetzen Sie den Port auf Ihrem Betriebssystem durch den vom
# Arduino genutzten Port
arduino = serial.Serial('/dev/cu.usbmodem143311', 9600, timeout=2)
while True:
# erst an den Arduino schreiben ...
arduino.write('This is a test string')
# dann zurückgeliefertes Ergebnis lesen
line = arduino.readline();
print(line) # Ausgabe der empfangenen Daten
Seri kapı ile ilgili sorunlardan kaçının
Seri kapıya erişirken Arduino eskizini veya Python programının hata mesajlarını yüklemede senkronizasyon hataları alırsanız, farklı uygulamaların aynı anda erişmek istediği sorunla karşılaştınız ve sadece bir kişi üst el alır. Bundan kaçınmak için aşağıdaki gibi ilerleyin.
Hipotez: Ne de Arduino kimliğindeki seri monitör aktifti ne de Arduino'ya yüklenmiş/başlatıldı. Python programına bile başlamadınız.
Adımlar:
Ayrıca, şimdiye kadar Python programlarında Arduino'nun ilgili tavsiyeleriyle bağlantıyı sonuçlandırmak için hiçbir şey yapmadık. Küp programında, kullanıcı herhangi bir zamanda Control-C ekleyerek Python programını durdurabilir. Bu durumda, kartla bağlantıyı serbest bırakmak için, küp komut dosyasının sonsuz döngüsünü bir deneme/tran bildirimi ile yönetmeliyiz. Çağrı Board.exit () Bağlantıyı açıkça serbest bırakıyoruz.
try:
while True:
Iteration += 1
dice = random.randrange(1,7)
resList[dice - 1] = resList[dice - 1] + 1
print('Wuerfel zeigt an: ' + str(dice))
if dice // 4 == 1:
board.digital[RedPin].write(1)
dice = dice % 4
else:
board.digital[RedPin].write(0)
if dice // 2 == 1:
board.digital[YellowPin].write(1)
dice = dice % 2
else:
board.digital[YellowPin].write(0)
board.digital[GreenPin].write(dice)
print(resList);
board.pass_time(Delay)
except KeyboardInterrupt:
print('connection to board closed')
board.exit()
Özet
Blogumun bu kısa sürümü, Horizon geliştiricisinin genişlemesiyle karşı karşıya kaldı. JavaScript'e ek olarak, Python, ister saf iletişim olsun, ister standart şirket aracılığıyla Arduinos'u kontrol etmek için Arduino kartlarına erişmek için iyi bir seçenektir. Python, Raspberry Pi'de çok yaygın bir dili temsil ettiğinden, ahududu ve Arduino arasındaki bağlantı için yeni fırsatlar açılır. Umarım bu yeni fırsatı benim kadar eğlenceli seviyorum.
()
Bir programlama dili olarak Python, özellikle bilimsel-matematiksel alanda birçok destekçiye sahiptir. Raspberry Pi, “Pi” ilavesini en azından Python diline borçludur, bu da Monty Python dizilerine benzer bir kült statüsüne sahip. Bu bölümde, Arduino Python'un sevgilisi de bir seçenek olup olmadığı sorusuyla yüzleşmek istiyoruz.
Gerçekte Python için bir çalışma zamanı ortamı, örneğin Yun (Arduino.cc, Arduino.org) veya Tian (Arduino.org) için Linino veya OpenWRT dağılımlarında sadece başka bir Linux sistemine sahip Arduino kartlarında anlamlıdır.
Kahraman insanlar Pymite ile Mega gibi daha güçlü mikrodenetleyici kartlar için de bir Python ortamı olduğunu bilirler. Bununla birlikte, kişisel olarak ek katma değer görmüyorum, çünkü boyut nedeniyle, ne önemli Python kitapçıları kullanılamaz, ne de kodunuz için yeterli alan değildir.
Python, JavaScript ile karşılaştırılabilir bir uzaktan kumanda seçeneği olarak kesinlikle bir seçenektir.
Şirket eskiz
Bu sefer illüstrasyona Arduino'ya erişen bir Python programı ile başlamak istiyorum. Burada biri kütüphanede olmak üzere iki temel seçenek var seri Ve yukarıda Pyfurmed. İkinci varyant, Arduino Konseyi'ndeki şirketi gerektirir.
Sonra menü üzerinden şarj edin Dosya | Örnekler | Ajans Arduino Konseyinizde Standart Eskiz Şirketi.
Python'u kurun
Bu makalede Python 2.7.x. Daha yeni üçüncü yıllık sürümler var, ancak tüm ilgili kitapçılar en son sürümler için hala mevcut değil. Bununla birlikte, gelecekteki dil sürümlerinde bir Python 2.7.x programının da yapılacağı garanti edilmektedir. Bu bağlamda, her şey üstesinden gelmek iyidir.
3.4 ve 2.7.9 Python sürümleri programı getiriyor Pip Bununla yüklemeliydin. Bu, Python için önerilen paketlerin kurulum yöneticisidir. İşletim sisteminiz için Python indirmeleri Python.org web sitesinden alınabilir.
Bu makale için gereken kütüphanelere Pyfurmed VEYA pyseria Yüklemek için, kullanın Pip Konsol/Terminal komut satırında aşağıdaki gibi:
pip install pyserial
VE
pip install pyfirmata
Zaten gerekli tüm hazırlık çalışmalarıydı.
Python programlama
Mac, Linux veya Windows'ta gerçekleştirilebilen aşağıdaki Python programında, bir Arduino uno'nun 9, 10, 11'ine bağlı üç LED'e erişirsiniz. Bu nedenle Python programı, daha önce bir ikili küpün uygulanması için sunulan Arduino kütüphanesini de sunan işlevleri de uygular.
Python'un sözdizimini açıklayacak alan eksikliği var. Bu nedenle ilgili taraflar bu tür öğreticilere yöneliktir. C: Python'a benzer dil dünyasının globtrutinleri için, akrabaları olan sınırlı bloklar veya bir yapılandırma ajanı olarak sınırlı anahtar kelimeler yerine kullanılan bir öneri izin verilir. A Eğer-C'deki talimatlar
if (x > y)
....;
max = x;
} else {
....;
max = y;
}
printf("Hello Worldn");
Python programcılarını aşağıdaki gibi yazın:
if (x > y):
....
max = x
else:
....
max = y
print('Hello World');
Bir Python programını, örneğin en sevdiğiniz editörle değiştirebilirsiniz. Başlangıç daha sonra komut satırında gerçekleşir Python myrogram.py. Ayrıca, yeni Python kurulumları aktif olmayan (entegre geliştirme ve öğrenme ortamı) içerir. Daha rahat bir şekilde ihtiyacınız varsa, aşağıdaki seçeneklerden birini alın:
Python Arduino'yu arar
Ama şimdi gerçek Python programına geliyoruz. İlk olarak rastgele bir jeneratör, 1 ila 6 arasında sonsuz bir döngüde üretilir. Bu nedenle doğranmış göz sayısı üç bölgeli bir ikili değer olarak yayılır, böylece LED'ler tek tek bitlere karşılık gelir. Goodie gibi, Python programı da bir listedeki gözlerin olası tüm gözlerini şu ana kadar ne sıklıkta meydana geldiklerini hatırlıyor.
# Bibliotheken pyFirmata und random importieren
import pyfirmata
import random
RedPin = 9
YellowPin = 10
GreenPin = 11
Delay = 1 # Eine Sekunde Pause pro Iteration
Iteration = 0
Port = '/dev/cu.usbmodem143311' # Unter Windows und Linux ändern
# Neues Board anlegen
board = pyfirmata.Arduino(Port) # Mit Firmata verbinden
resList = [0,0,0,0,0,0] # Liste mit allen Vorkommen von Ergebnissen
while True:
Iteration += 1 # nächste Runde
dice = random.randrange(1,7) # Würfeln
resList[dice - 1] = resList[dice - 1] + 1
print('Wuerfel zeigt an: ' + str(dice))
if dice // 4 == 1:
board.digital[RedPin].write(1)
dice = dice % 4
else:
board.digital[RedPin].write(0)
if dice // 2 == 1:
board.digital[YellowPin].write(1)
dice = dice % 2
else:
board.digital[YellowPin].write(0)
board.digital[GreenPin].write(dice)
print(resList); # bisher gewürfelte Augenzahlen
board.pass_time(Delay)
Listede bir Arduino/gerçek olanın kullanılabilirliğini talep ediyorum:
board = pyfirmata.Arduino(Port)
Kullanımda bir mega olsaydı, bunun yerine şöyle yazmalıyım:
board = pyFirmata.ArduinoMega(Port)
Uzun bir süre sonra bilgisayarımda gerçekleştirilen programın ara puanı:
....
Wuerfel zeigt an 3
[2188, 2234, 2126, 2180, 2203, 2251]
Wuerfel zeigt an 3
[2188, 2234, 2127, 2180, 2203, 2251]
Wuerfel zeigt an 3
[2188, 2234, 2128, 2180, 2203, 2251]
Wuerfel zeigt an 5
[2188, 2234, 2128, 2180, 2204, 2251]
Wuerfel zeigt an 5
[2188, 2234, 2128, 2180, 2205, 2251]
Listedeki rakamlar, göz sayısının zaten gerçekleştiği sıklığını göstermektedir. Göz sayısının dağılımının beklentilerin istatistiksel değerine yaklaştığını kolayca görebilirsiniz.
bu ve bu
İşte bazı önemli özellikler Pyfurmed Özetle. İçinde Pyfurmed İşlev var Iteoretore (). Bu bir iş parçacığını açar ve bir arabellek kullanarak seri çizgiden okunan değerleri yönetir. Bu işlev olmadan, seri kapı taşmaya yol açabilir:
import os #OS Funktionen einbinden
from pyfirmata import Arduino, util
from time import sleep
port = 'dev/ttyACM0' # Linux Port
board = Arduino(Port)
sleep(10)
it = util.Iterator(board)
it.start()
a0 = board.get_pin('a:0:i')
try:
while True:
p = a0.read()
print p
except: KeyboardInterrupt:
board.exit()
os._exit()
Bu örnekte, kartın pimlerini belirtmenin başka bir yolu da vardır.
a0 = board.get_pin('a:0:i')
Medya: a => analog, 0 => pin, i => giriş. Bu nedenle, bu noktadan itibaren bir eğitimde A0.read () olası. Bu şekilde, PWM pimini belirtmek de mümkündür (PWM = modülasyonlu darbe). Beyanname
pwmPort = board.get_pin('d:12
PWM modunda DigitalPin 12'yi kaldırın.
Bir çağrı
pwmPort.write(0.30)
Yüzde 30 çalışma döngüsü var. Ortalama olarak, 5 V bağlantı noktası 1.5 V'lik bir voltajdır. Alternatif olarak, aşağıdaki gibi ilerleyebilirsiniz:
board.digital[13].mode = PWM
board.digital[13].write(0.30)
Ayrıca izin verilen Pyfurmed . Servo-Yöntemler. Hizmetkar Açıkçası servomotorun kontrolü içindir. Aşağıdaki talimat dizisi, 90 ° döndürülen Porta 13'e bağlı bir motor servo tanımlar.
board.digital[13].mode = SERVO
angle = 90
board.digital[13].write(angle)
İçinde Pyfurmed Mevcut kartlar kompozit nesneler (sözlük nesneleri) aracılığıyla belirtilir.
Örneğin bir Arduino Promini, aşağıdaki gibi uzlaştırılabilir:
ProMini = {
'digital' : tuple(x for x in range(14)),
'analog' : tuple(x for x in range(8)),
'pwm' : (3, 5, 6, 9, 10, 11),
'use_ports' : True,
'disabled' : (0, 1) # Rx, Tx, Crystal
}
Sisteme başlatılmada bir Arduino kartı verdikten sonra …
port = 'dev/ttyACM0' # Linux Port
board = Arduino(Port)
… Birleşmiş Milletler kartının üzerine yazabiliriz, Promino skorbordunun düzeni ile:
board.setup_layout(ProMini)
Pyserier kullanarak Arduino ve Python arasındaki iletişim
İlk eskizde, şirketi Python üzerinden Arduino kartını kontrol etmek için kullandık. Saf iletişim söz konusu olduğunda, örneğin PC ve Arduino, Arduino ve Arduino veya diğer donanım ve Arduino arasında kütüphane geldi pyseria kullanılmış. Bu seri iletişimi uygular. Bu şekilde, örneğin, USB aracılığıyla bağlı bir Arduino ile bir Python programından “sohbet” yapabilirsiniz.
Arduino'nun taslağı aşağıdadır. İlk olarak, eskiz, seri kapıdan 64 uzunluğunda bir halka arabelleği üzerindeki verileri okur. Arduino daha sonra göndereni gönderene gönderen gönderene okur: Ters arabellek (dizin)
const int BUFSIZE = 64; // Größe des Puffers
char buffer[64]; // Puffer
void setup() {
Serial.begin(9600);
}
void loop() {
int index = 0;
// erst lesen ...
while (Serial.available() > 0) {
buffer[index++] = Serial.read();
index = index % BUFSIZE; // Ringpuffer Modus
}
// ... dann Nachricht rückwärts über die Leitung
// zurücksenden:
reverseBuffer(index);
delay(100); // Kleine Pause
}
// Wir lesen den Puffer rückwärts
// und senden Byte für Byte über die Leitung
void reverseBuffer(int len) {
int index = len - 1;
while (index >= 0) {
Serial.print(buffer[index--]);
}
}
Python programı artık karmaşık değil. Arduino ile bağlantıyı kurar, zorlu karakterlerden oluşan bir zincir yazar, oradan ekrana harcayan bir cevap alır. Arduino Limanı'nı Arduino fikrinde görebilirsiniz. Arduino eskiz penceresindeki doğru arka plana baktığınızda.
import serial # pySerial importieren
# Ersetzen Sie den Port auf Ihrem Betriebssystem durch den vom
# Arduino genutzten Port
arduino = serial.Serial('/dev/cu.usbmodem143311', 9600, timeout=2)
while True:
# erst an den Arduino schreiben ...
arduino.write('This is a test string')
# dann zurückgeliefertes Ergebnis lesen
line = arduino.readline();
print(line) # Ausgabe der empfangenen Daten
Seri kapı ile ilgili sorunlardan kaçının
Seri kapıya erişirken Arduino eskizini veya Python programının hata mesajlarını yüklemede senkronizasyon hataları alırsanız, farklı uygulamaların aynı anda erişmek istediği sorunla karşılaştınız ve sadece bir kişi üst el alır. Bundan kaçınmak için aşağıdaki gibi ilerleyin.
Hipotez: Ne de Arduino kimliğindeki seri monitör aktifti ne de Arduino'ya yüklenmiş/başlatıldı. Python programına bile başlamadınız.
Adımlar:
- Arduino'daki taslağı indirin, ancak seri monitörü etkinleştirin Olumsuz!
- Python programını başlatın.
Ayrıca, şimdiye kadar Python programlarında Arduino'nun ilgili tavsiyeleriyle bağlantıyı sonuçlandırmak için hiçbir şey yapmadık. Küp programında, kullanıcı herhangi bir zamanda Control-C ekleyerek Python programını durdurabilir. Bu durumda, kartla bağlantıyı serbest bırakmak için, küp komut dosyasının sonsuz döngüsünü bir deneme/tran bildirimi ile yönetmeliyiz. Çağrı Board.exit () Bağlantıyı açıkça serbest bırakıyoruz.
try:
while True:
Iteration += 1
dice = random.randrange(1,7)
resList[dice - 1] = resList[dice - 1] + 1
print('Wuerfel zeigt an: ' + str(dice))
if dice // 4 == 1:
board.digital[RedPin].write(1)
dice = dice % 4
else:
board.digital[RedPin].write(0)
if dice // 2 == 1:
board.digital[YellowPin].write(1)
dice = dice % 2
else:
board.digital[YellowPin].write(0)
board.digital[GreenPin].write(dice)
print(resList);
board.pass_time(Delay)
except KeyboardInterrupt:
print('connection to board closed')
board.exit()
Özet
Blogumun bu kısa sürümü, Horizon geliştiricisinin genişlemesiyle karşı karşıya kaldı. JavaScript'e ek olarak, Python, ister saf iletişim olsun, ister standart şirket aracılığıyla Arduinos'u kontrol etmek için Arduino kartlarına erişmek için iyi bir seçenektir. Python, Raspberry Pi'de çok yaygın bir dili temsil ettiğinden, ahududu ve Arduino arasındaki bağlantı için yeni fırsatlar açılır. Umarım bu yeni fırsatı benim kadar eğlenceli seviyorum.
()