Raspberry Pi Pico, MicroPython ve Visual Studio Code ile güzel zamanlar

semaver

New member


  1. Raspberry Pi Pico, MicroPython ve Visual Studio Code ile güzel zamanlar

Yolculuğumuza Pico köyünden devam ediyoruz. Geçen bölümde Thonny Python IDE ele alınırken, mevcut ve gelecek bölümler sırasıyla Python ve C ve C++ dillerinde Pico için Visual Studio Code geliştirmeye odaklanıyor.


Thonny IDE, Raspberry Pi Pico ile deneyler için olduğu kadar, Python veya MicroPython programlama dili ile başlamak için de eşit derecede uygundur. Bu yüzden geçen bölümde Thonny’nin (yarı)profesyonel geliştiricilerle bir saksı kazanamayacağına dair ipucum biraz saygısızdı. Sonuçta ideal bir oyun alanı sağlıyor.

Ancak basit bir IDE, daha karmaşık kod ve daha fazla katılımcı içeren daha büyük projelere ölçeklenemez. Örneğin, geliştiricilerin kaynak kodu yönetim araçlarına, daha gelişmiş test seçeneklerine ve kitaplıklar gibi verimli kaynak yönetimine ihtiyacı vardır.

Gerekli yazılım bileşenleri


Ama onu nereden alıyorsun ve çalmıyorsun? Zeki Python geliştiricilerinin, yalnızca 64 bit işletim sistemlerinin mümkün olduğu bir Linux, macOS veya Windows ana bilgisayarında Raspberry Pi Pico uygulamaları geliştirmek için dört şeye ihtiyacı vardır:

  • geçerli bir sürümde Python SDK,
  • Modüler bir programlama ortamı olarak Visual Studio Code (VS Code) (bu blog makalesine bakın),
  • Node.js ve
  • Pico-Go adlı VS Code için bir uzantı. Bu, Pycom’un PyMakr uzantısının bir türevidir.
Bu arada: Apple Silicon’a sahip bir bilgisayarın sahipleri, M1 tabanlı bir sistemde tüm araçların da mevcut olmasından memnun olabilir.

Daha iyi haber: Bahsedilen uygulamalar ücretsiz olarak sunuluyor.


Pico Git


Pico-Go geliştiricisi Chris Wood, komboyu kurmak için web sitesinde zaten ayrıntılı İngilizce belgeler sağlıyor. Bu nedenle, bu noktada yalnızca karşılık gelen referansların bir özet özeti:

Gösterilen tüm paketler çalışır durumdayken, Chris Wood’un Pico-Go uzantısını VS Code’a kurabilirsiniz.




Pico-Go uzantısı, Visual Studio Code altında Raspberry Pi Pico için MicroPython geliştirmesine yardımcı olur



Pico-Go uzantısı, Visual Studio Code altında Raspberry Pi Pico için MicroPython geliştirmesine yardımcı olur



Eğlence başlasın


Öncelikle Python projeleri için bir klasör oluşturmanız, VS Code altında açmanız tavsiye edilir. Ctrl + Üst Karakter + P (Windows, Linux) sırasıyla Command+Shift+p (Mac) Komutu çalıştırmak için komut paletini yükleyin Pico Git | projeyi yapılandır palet üzerinden çalıştırın. Bu, diğer şeylerin yanı sıra kod tamamlama ve sözdizimi denetimini (tiftik) kullanılabilir hale getirir.

Kullanıcılar bir Raspberry Pi Pico’yu ana sisteme bağlar bağlamaz, Pico-Go bunu tanır ve IDE’nin alt durum çubuğu aracılığıyla bildirir.

Artık VS Code’a sahip geliştiriciler bir program dosyası oluşturabilir ( .py) MicroPython kaynak kodunu oraya koymak için. Bitmiş program aracılığıyla indirilebilir koşmak-Pico veya con üzerinde komutu çalıştırın (aşağıdaki VS Kodu durum çubuğu!) Yükleniyor karta kopyalayın, bundan sonra Pico bir sıfırlama yapar ve ardından program otomatik olarak başlar. Önemli: Yürütülebilir bir dosya yüklemeden önce, geliştiriciler dosyayı şu adrese yüklemelidir: main.py yeniden adlandırın, çünkü aksi halde Pico programı daha fazla ilgilenmeden arşivleyecektir.

Örnek proje “Haberler Wetter”


Pico-Go’yu başarıyla kurup yapılandırdıktan sonra, Pico için entegre bir proje olan işinize başlama zamanı. Amaç, sıcaklığı, nemi ve atmosferik basıncı periyodik olarak ölçen küçük bir meteoroloji istasyonu oluşturmak için BME280 sensörünü kullanmaktır.




BME280 hava durumu sensörü, devrenin kalbini oluşturur



BME280 hava durumu sensörü, devrenin kalbini oluşturur



Temel fikir: Pico aracılığıyla, sıcaklık, nem ve hava basıncı için ölçülen değerleri kaydetmekten sorumlu olan BME280 sensörüne erişirsiniz. Meteoroloji istasyonu, ilgili değerleri SSD 1306’nın ekranında gösterir. Aynı zamanda, mevcut “hava durumu” ile ilgili kodlanmış bir kural vardır. Değerler rahat bir aralıkta ise program yeşil LED’i etkinleştirir. Nem ve sıcaklık konfor bölgenizin dışındaysa kırmızı LED yanacaktır. Değerler ortadaysa, uygulama bunu sarı LED ile bildirir. Bu kural ayrı bir fonksiyon olarak kodlanmıştır ve buna göre uyarlanabilir. Ayrıca sorgular arasındaki süre (SLEEPTIME yapılandırılabilir).




128 x 64 piksel çözünürlüğe sahip ucuz OLE ekranı, kullanım amacı için yeterlidir.



128 x 64 piksel çözünürlüğe sahip ucuz OLE ekranı, kullanım amacı için yeterlidir.



Bu arada, parmak uçlarınızı BME280’in üzerine koymanız sıcaklık ve nemin keskin bir şekilde yükselmesine neden olabilir. Bu bağlamda, iklim kuralı manuel olarak kontrol edilebilir.

Donanım Malzeme Listesi (BOM)


Proje için aşağıdaki parça listesine ihtiyacımız var:

  • Ahududu Pi Pico: yaklaşık 5 Euro
  • İki sıra 20 iğne başlığı: yaklaşık 0,50 €
  • Doğrama tahtası 3,50 Euro
  • Pico Micro-USB’yi ana bilgisayarın USB arayüzüne bağlamak için kablo: yaklaşık 3 avro
  • Her biri bir kırmızı, sarı, yeşil LED: yaklaşık 0,30 Euro
  • 3 direnç (ör. 120 ohm, 150 ohm veya 220 ohm): yaklaşık 0,10 Euro
  • I2C veri yolu ile Bosch Sensortec BME280 kesme kartı: yaklaşık 6 Euro
  • 128×64 piksel ve I2C veri yolu ile SSD1306 OLED ekran: yaklaşık 6 Euro
  • 14 erkek-erkek jumper bağlantısı: 120’lik bir pakette yaklaşık 5 Euro
Toplam: yaklaşık 29 Euro

Çin’deki olağan şüphelileri vurursanız, satın alma fiyatını daha da düşürebilirsiniz.

Devre


Fritzing ile çizilen devre şemasında sağ altta 128×68 piksel çözünürlüğe sahip SSD1306 OLED ekran, sağ üstte ise BME280 çevre sensörü gösteriliyor. Her ikisi de Pico’nun I2C veriyoluna bağlı, SDA pin 6’da (= GPIO 4) ve SCL pin 7’de (= GPIO 5). GPIO, Genel Amaçlı IO’nun kısaltmasıdır.




Fritzing diyagramı olarak meteoroloji istasyonunun devresi



Fritzing diyagramı olarak meteoroloji istasyonunun devresi



Uyarı: Fiziksel pinlerin mantıksal tanımlarıyla doğrudan bir ilişkisi yoktur. Örneğin, fiziksel pin 6, GPIO mantıksal pin 4’e, fiziksel pin 25, GPIO mantıksal pin 19’a karşılık gelir. Pico veya başka bir Raspberry Pi kartı için uygulamalarda, genellikle mantıksal adlar amaçlanır.

  • Pico, bileşenleri Vcc çıkışı (pin 36) ve birkaç GND bağlantı noktasından biri (şematikte: pim 38) aracılığıyla 3,3V ile besler.
  • Pin 25 (kırmızı), pin 26 (sarı) ve pin 27 (yeşil), LED’lerin her biri 150 ohm’luk bir dirençle bağlanması için sağlanmıştır. Bu, 19, 20 ve 21 numaralı GPIO bağlantı noktalarına karşılık gelir.



Pico'nun pin düzeni.  Uyarı: Mantık pinleri fiziksel pinlerle aynı değildir.



Pico’nun pin düzeni. Uyarı: Mantık pinleri fiziksel pinlerle aynı değildir.



Bu, devre hakkında önemli olan her şeyi söylüyor.

Programlama


Yazılıma geldik. İlk aşamada SSD1306 OLED ekran için bir sürücü gerekiyor. Leipzig Plastik Merkezi’nden Stefan Lehmann bunu çoktan hayata geçirdi. Sürücü, Github sayfası aracılığıyla içe aktarılabilir.

Bosch’un BME280 kontrolü için bazı örnek uygulamaları yakından inceledim ve bunları sürücüm için bir şablon olarak kodladım. Bu amaçla Bosch Sensortec, web sitesinde yardımcı bir sensör belgesi sağlar.

Sensör, sıcaklığa (Santigrat cinsinden) ve neme (yüzde olarak) ek olarak atmosfer basıncını da (mbar veya HectoPascal cinsinden) ölçer. Nemi ölçmeden yapabiliyorsanız, daha ucuz olan BMP280 modelini kullanmalısınız. Bu sensör bazen çevrimiçi olarak bir eurodan daha ucuza satın alınabilir.

Kodu bir Github sayfasında sağladım, böylece hiç kimse zahmetli bir şekilde örnek programı yazmak veya onu kesip yapıştırmak zorunda kalmasın. İşte GitHub deposunun bağlantısı.

Aşağıda, temel olarak anlamaya hizmet eden bazı önemli parçalar tartışılmaktadır.

Çoğu Pico veya Micropython SDK’larından olmak üzere, program uygulaması için bazı kitaplıklar gereklidir. Daha önce de belirtildiği gibi, OLED ekran kontrol kitaplığı GitHub’da bulunabilir.

from machine import Pin, I2C # Wir brauchen Pin und I2C des Pico
from micropython import const
from ustruct import unpack as unp
from ssd1306 import SSD1306_I2C # Modul für SSD1306
import utime # Zwei Zeit-Bibliotheken
import time

İşlev, havanın iyi, kötü veya ortalama olduğuna karar vermek için kullanılır. condition(). Bu, herkesin kendisi için değiştirebileceği kendi kuralını içerir:

#--Condition ----------------------
COND_RED = 1 # Schlechtes Klima
COND_GREEN = 2 # Angenehmes Klima
COND_YELLOW = 3 # Mittleres Klima
#----------------------------------
ComfortZoneTemp = (15,25) # Meine Komfortzone für Temperatur liegt zwischen 15 und 25 Grad
ComfortZoneHumi = (10,40) # Meine Komfortzone für Feuchtigkeit liegt zwischen 10 und 40%
#
def condition(temperature, humidity, pressure):
niceTemperature = temperature >= ComfortZoneTemp[0] and temperature <= ComfortZoneTemp[1]
niceHumidity = humidity >= ComfortZoneHumi[0] and humidity <= ComfortZoneHumi[1]
if niceHumidity and niceTemperature:
return COND_GREEN
elif (niceHumidity != niceTemperature): # XOR
return COND_YELLOW
else:
return COND_RED
Die Anwendung initialisiert den I2C-Bus zum Zugriff auf BME280 und SSD1306:#


Uygulama, BME280 ve SSD1306’ya erişmek için I2C veri yolunu başlatır:

sda = Pin(4) # BME280 und SSD1306 sind an GPIO 4 und 5 angeschlossen
scl = Pin(5)
i2c = I2C(0,sda=sda,scl=scl,freq=400000) # I2C-Bus 0
i2c_addr_bme = 0x76 # Ich gehe davon aus, der BME280 liegt an 0x76

LED’ler GPIO bağlantı noktaları 19, 20, 21’de bulunur:

GreenLED = Pin(21, Pin.OUT) # Grüne LED an GPIO 21
YellowLED = Pin(20, Pin.OUT) # Gelbe LED an GPIO 20
RedLED = Pin(19, Pin.OUT) # Rote LED an GPIO 19

Değişken SLEEPTIME iki ölçüm arasındaki süreyi tanımlar:

SLEEPTIME = 5

sınıfın arkasında BMX280 ortam sensörü için sürücüyü gizler. Yapıcısı bir dizi başlatma gerçekleştirir. Kullanıcılar için ana ilgi yöntemidir. measure()çünkü basınç, nem ve sıcaklık verir.

class BMX280:
# Im Konstruktor werden primäre Datenmember und Konstanten belegt
def __init__(self, i2c, i2c_addr_bme)
def measure(self)
# ... diverse Hilfsmethoden ...

Yazılımın ana programı, önce I2C veriyolundaki sensörleri ve aktüatörleri arar – isteğe bağlıdır çünkü boole değişkeninin atanmasına bağlıdır debug.

if debug:
print('Ich habe an folgenden Adressen Komponenten am I2C-Bus entdeckt:')
devices = i2c.scan()
if devices:
for i in devices:
print(hex(i))
utime.sleep_ms(2000)

Uygulanabilir debug == Trueekran çıktısı, IDE terminalinde başka bir yerde gerçekleşir.

Ardından uygulama, SSD1306 (sınıf SSD1306_I2C) ve BME280 veya BMP280 (sınıf BMX280).

Ana döngüde kod yeniden okunur measure() hava durumu değerleri, ölçülen değerlere bağlı olarak LED’i kırmızı, yeşil veya sarı olarak değiştirir ve değerleri OLED ekranda gösterir Bir bekleme süresinden sonra, bir sonraki ölçüm döngüsüne geçiş aşağıdaki gibidir:

oled = SSD1306_I2C(128,64,i2c)
bme = BMX280(i2c = i2c, i2c_addr_bme = i2c_addr_bme)
oled.fill(0)
oled.show()

# HAUPTSCHLEIFE #
while True:
temperature, humidity, pressure = bme.measure()
#......................
currentState = condition(temperature, humidity, pressure)
if currentState == COND_GREEN:
GreenLED.value(1)
YellowLED.value(0)
RedLED.value(0)
if debug:
print("Angenehmes Klima")
elif currentState == COND_YELLOW:
GreenLED.value(0)
YellowLED.value(1)
RedLED.value(0)
if debug:
print("Geht so")
elif currentState == COND_RED:
GreenLED.value(0)
YellowLED.value(0)
RedLED.value(1)
if debug:
print("Unangenehmes Klima")
# ......................
oled.fill(0)
oled.text("Haberler Wetter", 5, 10)
# Formatierte Ausgabe mit 7 Ziffern bei 2 Nachkommastellen
oled.text(str('% 7.2f' % temperature) + " Grad", 5,20)
oled.text(str('% 7.2f' % humidity) + " %",5,30)
oled.text(str('% 7.2f' % pressure) + " HPa",5,40)
# Und jetzt enthuellen
oled.show()
utime.sleep(SLEEPTIME) # Schlafen bis zur nächsten Messung


Bitmiş ve çalışan test kurulumu şöyle görünür:




Prototip yapıda bitmiş proje



Prototip yapıda bitmiş proje



Çözüm


Örnek proje, Visual Studio Code’da Pico’nun MicroPython programlaması hakkında erken bir fikir sağladı.Şu anda hala belirgin olan bir sorun, özellikle ara panolar ve daha karmaşık sensörler olmak üzere bazı bileşenleri kontrol etmek için modüllerin olmamasıdır. Pico henüz çok yeni olduğundan, bunun önümüzdeki aylarda değişmesi muhtemeldir ve Arduino, Espressif (ESP32, ESP8266), Raspberry Pi tek kartlı bilgisayarlar, Adafruit, Sparkfun ve ST Microelectronics’te görüldüğü gibi eşit derecede büyük bir ekosistem yaratacaktır. dava.

Elbette, gösterilen örnek için çeşitli optimizasyon seçenekleri vardır, örneğin:

  • Program enerji verimliliği ile ilgilenmez. Elektrik şebekesinden bağımsız bir meteoroloji istasyonu kullanmak istiyorsanız, örneğin Pico’nun farklı uyku seçeneklerini ve kullanılan bileşenleri kullanabilirsiniz.
  • Devre, örneğin fırtına, yağmur, toprak nemi, hava kalitesi, partikül madde ve CO algılama sensörleri eklenerek daha da genişletilebilir.2-Sorumluluk.
  • BME280’in yanı sıra meteorolojik ölçümler için kullanılabilecek birçok alternatif vardır, örneğin DHT22.
  • Bazı BME280 veya SSD1306 kesme kartları, farklı kablolama gerektiren I2C veri yolu yerine SPI veri yolunu kullanır.
  • Uygun sürücü yazılımının şirket içinde mevcut olması veya geliştirilmesi koşuluyla, daha yüksek çözünürlüklü ve/veya daha fazla renkli ekranlar gibi tek renkli SSD1306 dışındaki ekranlar da düşünülebilir.
  • BME280 yerine yeni BME680 sensörü de kullanılabilirdi ancak bunun fiyata etkisi var. Bu durumda maliyet yaklaşık 20 Euro’dur. Ayrıca, henüz bunun için bir sürücü bulamadım. BME680’in avantajı, hava kalitesi hesaplaması olacaktır.
İlgilenen okuyucuların stres atmak için hala birçok fırsatı var.

Bu makalenin odak noktası MicroPython’du. Bu arada, alternatif olarak CircuitPython (Adafruit tarafından geliştirilmiştir) da var, ancak kavramsal farklılıklar oldukça küçük olduğu için daha fazla detaya girmeyeceğiz. Bir sonraki bölüm, C veya C++ programlama hakkındadır.

O zamana kadar hayal kurmanın tadını çıkarın.


()



Haberin Sonu
 
Üst