Raspberry Pi Pico, Microphthon ve Visual Studio Kodu ile İyi Hava

semaver

New member


  1. Raspberry Pi Pico, Microphthon ve Visual Studio Kodu ile İyi Hava

Pico ülkesinde yolculuğa devam edin. Python-iide Thonny son bölümde ortaya çıkarken, mevcut ve varış bölümü Python ve C veya C ++ altındaki Pico'nun geliştirilmesi için görsel stüdyo koduna odaklanıyor.

Thonny-Aid, bir Python veya Micropython programlama dilini ve ahududu pico ile yapılan deneyler için uygundur. Bu nedenle, geçmiş bölümdeki önerim bir şekilde saygısızdı, Thonny geliştiriciler (tohum) profesyonelleri ile bir çiçek vazo kazanamadı. Sonuçta, ideal bir oyun alanı sağlar.

Bununla birlikte, basit bir kimlik, daha karmaşık kod ve birkaç katılımcı ile daha büyük projelere uyum sağlamaz. Örneğin, geliştiricilerin kaynak kodunun yönetimi için araçlara, daha sofistike test seçeneklerine ve kütüphaneler gibi kaynakların verimli yönetilmesine ihtiyaçları vardır.

Törende istenen yazılım


Ama nereden alıp çalmıyorsun? Dört şeyin, Linux, macOS veya Windows ana bilgisayarında Raspberry Pi Pico için uygulamalar geliştirmek için daha zorlu Python geliştiricilerine ihtiyacı var, bunun için sadece 64 -Bit işletim sisteminin kabul edilebilir olduğu:

  • Mevcut bir sürümde Python SDK,
  • Modüler Programlama Ortamı olarak Visual Studio Kodu (VS Kodu) (bu blog makalelerine bakın),
  • Node.js e
  • VS kodu için pico-go adı verilen bir genişleme (İngilizce uzantısı). Bu, Pymak'ın Pymakr uzantısından bir türev.
Bu arada: Apple Silikonlu Bir Bilgisayarın Sahipleri, tüm araçların M1'e dayalı bir sistemle de mevcut olduğu için mutlu olabilir.

Diğer iyi haberler: Yukarıda belirtilen uygulamalar ücretsiz olarak mevcuttur.

Pic-go


Kombinasyonun kurulumu için Pico-Go geliştiricisi Chris Wood, web sitesinde İngilizce olarak ayrıntılı belgeler sunuyor. Bu nedenle, bu noktaya karşılık gelen referansların sadece yaklaşık bir özeti:

Gösterilen tüm paketler çalışmaya hazırsa, Chris Wood'un Pico-Go Code Vs.




Pico-Go uzantısı, kod Visual Studio'daki Raspberry Pi Pico için mikrofonun geliştirilmesine yardımcı olur



Pico-Go uzantısı, kod Visual Studio'daki Raspberry Pi Pico için mikrofonun geliştirilmesine yardımcı olur



Eğlence başlıyor


Her şeyden önce, Python projeleri için bir klasör oluşturulmanız, VS kodu altında açmanız tavsiye edilir Ctrl + Shift + P (Windows, Linux) veya Komut + Shift + P (Mac) komuta komuta komuta yüklemek için komuta yüklemek Pico-go | Projeyi yapılandırın Paletten gerçekleştirmek için. Bu, kodun tamamlanmasının ve Sözdizimi Sınavının (Flue) kullanılmasının mümkün olduğu anlamına gelir.

Kullanıcılar bir Raspberry Pi Pico'yu ana bilgisayar sistemine bağlar kurmaz, Pico-Go bunu tanır ve fikrin alt durum çubuğu aracılığıyla paylaşır.

Artık geliştiriciler kod kodunu ve bir programı kullanabilir (final .py) Mikrofon kaynak kodunu girmek için oluşturun. Bitmiş program, koşmak-Komand (daha düşük durum çubuğu vs kod!) Pico'da veya Yükleme Karta kopyalayın, ardından Pico bir geri yükleme gerçekleştirir ve bu nedenle program otomatik olarak başlar. Önemli: Bir program dosyası yüklemeden önce, geliştiriciler kendilerini bulmalıdır main.py Pico, aksi takdirde programı yalnızca daha fazla düşünmeden kaldırdığı için geri yüklendi.

“Haberler Wetter” Örnek Projesi


Pico-go'nun kurulumunu ve yapılandırmasını düzelttikten sonra, Pico için dahil edilen bir proje olan gerçek konuya adamanın zamanı geldi. BME280 sensörü kullanılarak, sıcaklığı, hava nemini ve hava basıncını periyodik olarak ölçen küçük bir meteoroloji istasyonu oluşturulmalıdır.




BME280 Meteorolojik Sensör devrenin kalbini oluşturur



BME280 Meteorolojik Sensör devrenin kalbini oluşturur



Temel fikir: PICO, sıcaklık, hava nemi ve hava basıncı için ölçülen değerlerin kaydedilmesinden sorumlu olan BME280 sensörü tarafından erişilir. SSD1306 ekranındaki meteoroloji istasyonu karşılık gelen değerlerdir. Aynı zamanda mevcut “iklime” kodlanmış bir kural vardır. Değerler hoş bir alanda bulunuyorsa, program yeşil LED'i etkinleştirir. Nem ve sıcaklık konfor alanının ötesinde, kırmızı LED yanar. Değerler ortada bir yerdeyse, uygulama onu sarı LED aracılığıyla paylaşır. Bu kural ayrı bir işlev olarak kodlanı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 ekonomik OLE ekranı amaç için yeterlidir.



128 x 64 piksel çözünürlüğe sahip ekonomik OLE ekranı amaç için yeterlidir.



Bu arada, parmağın bir ucunu sıcaklık ve neme BME280 üzerine atmak aniden artabilir. Bu bağlamda, iklim kural manuel olarak test edilebilir.

Donanım Bom (Malzeme Faturası)


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

  • Raspberry Pi Pico: Ca. 5 Euro
  • İki 20 dosya dosyası: Yaklaşık. 0,50 Euro
  • 3.50 Euro Breadboard
  • Pico Micro USB'yi ana bilgisayarın USB arayüzüne bağlamak için kablo: Yaklaşık. 3 Euro
  • Kırmızı, sarı, yeşil bir LED: ca. 0.30 Euro
  • 3 direnç (örneğin 120 ohm, 150 ohm veya 220 ohm): Yaklaşık. 0.10 Euro
  • Bosch Sensortec BME280 I2C otobüslü Breakout Board: Ca. 6 Euro
  • 128×64 piksel ve I2C otobüslü SSD1306-OLED ekran: Ca. 6 Euro
  • 14 Erkek üzerinde iplik jumper'ın erkek bağlantıları: Yaklaşık. 120 pakette 5 Euro
Toplam: ca. 29 Euro

Çin'deki olağan şüphelere çarpan herkes satın alma miktarını daha da azaltabilir.

Devre


128×68 noktalı OLED SSD1306 ekranı, sağ altta fritzing ile tasarlanan devrenin diyagramında ve sağ üstte çevre sensörü BME280'de gösterilmiştir. Her ikisi de PICO I2C veri yoluna bağlanır, SDA orada Pin 6 (= GPIO 4) ve Pin 7'de (= GPIO 5) SCL'de bulunur. GPIO genel bir amaç içindir.




Kızarmış bir diyagram olarak meteoroloji istasyonunun devresi



Kızarmış bir diyagram olarak meteoroloji istasyonunun devresi



Dikkat: Fiziksel pimlerin mantıksal isimlerine doğrudan referansı yoktur. Fiziksel pim 6, örneğin, mantıksal pin GPIO 4, fiziksel pim 25 GPIO 19'a karşılık gelir. PICO veya başka bir Raspberry Pi kartı uygulamalarında, mantıksal adlar genellikle anlaşılır.

  • PICO bileşenleri VCC çıkışı (pin 36) ve çeşitli GND bağlantı noktalarından biri (diyagramda: pin 38) aracılığıyla 3.3 V ile sağlanır.
  • Pim 25 (kırmızı), pim 26 (sarı) ve pim 27 (yeşil), LED'leri 150 ohm dirençle bağlamayı amaçlamaktadır. Bu, Gipio 19, 20 ve 21 kapılara karşılık gelir.



Pin del pico düzeni. Dikkat: Mantıksal pimler eşit olmayan fiziksel pimlerdir



Pin del pico düzeni. Dikkat: Mantıksal pimler eşit olmayan fiziksel pimlerdir



Yani her şeyin devre için gerekli olduğu söyleniyor.

Programlama


Yazılıma geliyoruz. İlk adımda, OLED SSD1306 ekranı için bir sürücüye ihtiyaç vardır. Leipzig Plastik Merkezi'nden Stefan Lehmann bunu zaten uyguladı. Sürücü GitHub sayfasından içe aktarılabilir.

Bosch'tan BME280'in kontrolü için bazı örnek uygulamalara yaklaştım ve sürücüm için bir model olarak kodlandım. Bu amaçla, Bosch Sensortec, web sitesindeki sensörde yararlı bir belge sunar.

Sıcaklığa (santigrat derecelerinde) ve neme (yüzde olarak) ek olarak, sensör ayrıca havanın basıncını (mbar veya ektopascal içinde) ölçer. Havanın neminin ölçümü olmadan yapabiliyorsanız, en ucuz varyant BMP280'e erişmeniz gerekir. Bu sensör zaten internette bir euro'dan daha az satın alınabilir.

Kimsenin örnek programına dokunmaması veya bir kopya ve yapıştırma ile bir araya gelmemesi için kodu bir GitHub sayfasında sağladım. İşte GitHub deposu için bağlantı.

Aşağıda, esas olarak anlamak için kullanılan bazı önemli parçalar vardır.

Bazı kütüphaneler programın uygulanması için, çoğu SDK Pico- veya Micropython. Daha önce de belirtildiği gibi, OLED ekran kontrol kitaplığı GitHub'da.

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

Hava iyi, kötü, ortase, işlev hareket ederse condition(). Bu, herkesin kendileri için değiştirebileceği ayrı bir kural 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 19, 20, 21 Gates'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 İki ölçüm arasındaki zamanı belirtir:

SLEEPTIME = 5

Sınıfın arkasında BMX280 Sürücü çevre sensörü için gizlidir. Üreticileri bir dizi başlatma gerçekleştirir. Yöntem esas olarak kullanıcılar için ilginçtir measure()Çünkü basınç, nem ve sıcaklık sağlar.

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

Boolena değişkeninin işgaline bağlı olarak başlangıçta I2C otobüsüne bağlı veri yolunda sensörler ve aktüatörler arayan ana yazılım programı 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)

Uygulanır debug == TrueIDP terminalindeki ekran çıkışı başka noktalarda gerçekleşir.

Uygulama daha sonra SSD1306 için sürücüleri başlatır (sınıf SSD1306_I2C) ve BME280 veya BMP280 (sınıf BMX280).

Ana döngüde, hukuk kodu measure() Kırmızı, yeşil veya sarı LED'in ölçülen değerlerine göre aktive edilen ve OLED ekrandaki değerleri temsil eder. Bekleme süresinden sonra, bir sonraki ölçüm turuna geçişi takip eder:

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ışma testinin yapılandırması şöyle görünüyor:




Proje bir prototip yapısında bitti



Proje bir prototip yapısında bitti



Çözüm


Örnek proje, Visual Studio kodu altında Pico Microphon'un programlanmasını sağladı. Şu anda hala belirgin bir sorun, bazı bileşenlerin kontrolü için modül yoktur, özellikle de kırılma kartları ve daha karmaşık sensörler. Pico hala çok yeni olduğundan, bu önümüzdeki aylarda değişmeli ve Arduino, Espressif (ESP32, ESP8266), bilgisayar Raspberry Pi, Adafruit, Sparkfun ve Mikroelektronikler için olduğu gibi eşit derecede büyük bir ekosistem oluşturulacak.

Tabii ki, gösterilen örnek için aşağıdakiler gibi çeşitli optimizasyon seçenekleri vardır:

  • Program enerji verimliliği ile ilgilenmiyor. Elektrik ızgarasına bakılmaksızın bir meteoroloji istasyonunu yönetmek istiyorsanız, örneğin çeşitli pico uyku seçeneklerini ve kullanılan bileşenleri kullanabilirsiniz.
  • Devre daha da genişletilebilir, örneğin fırtına, yağmur, toprak nemi, hava kalitesi, ince toz ve co'nun tanınması için sensörler ekleyerek2-Yük.
  • BME280'e ek olarak, hava ölçümleri için, örneğin DHT22 gibi kullanılabilecek birçok alternatif vardır.
  • BME280 veya SSD1306 için bazı koparma kartları, farklı bir kablolama gerektiren I2C veri yolu yerine SPI veri yolu kullanın.
  • Ayrıca, daha yüksek çözünürlük ve/veya daha fazla renge sahip bir ekran olarak, uygun sürücü yazılımının evinde varlığı veya geliştirme olarak tek renkli ASD1306'ya ek olarak düşünülebilir.
  • BME280 yerine, etkisi olan yeni BME680 sensörü de kullanılabilir. Bu durumda, maliyetler yaklaşık 20 Euro'dur. Ayrıca, henüz bir sürücü keşfetmedim. BME680'in avantajı hava kalitesinin hesaplanması olacaktır.
İlgilenen okuyucular hala buhardan ayrılmaya devam etmek için yeterli fırsata sahipler.

Bu makalenin odak noktası Microphthon'daydı. Bu arada, CircuitPython (Adofruit tarafından geliştirilen) de bir alternatiftir, ancak kavramsal farklılıklar oldukça marjinal olduğundan başka konuşmalar olmamalıdır. Bir sonraki bölüm C veya C ++ ile programlama ile ilgilidir.

O zamana kadar çok komik yemekler.


()
 
Üst