
Wio Terminal’ı piyasaya sürdüğümüzden bu yana 3 ay geçti. Topluluktan birçok olumlu geri dönüş ve harika projeler aldık. Daha fazla bilgi için sürekli güncellenen blogumuza Wio Terminal için Kaynak Toplama: Topluluktan Eğitimler, İncelemeler ve Projeler başlığına bakabilirsiniz. Bu sevimli IoT cihazını beğendiğiniz için hepinize teşekkür ederiz!
Bu blogda, Wio Terminal’da pasta grafiği ve metre okumalarını göstermek için Ardupy’yi nasıl basit bir şekilde kullanacağınızı inceleyeceğim. Öncelikle, Seeed ekibi tarafından yeni piyasaya sürülen bu son derece kolay IDE hakkında henüz duymadıysanız, Ardupy’nin ne olduğunu anlamaya çalışalım.
ArduPy’nin Kısa Tanıtımı
ArduPy, Arduino ve MicroPython kombinasyonudur. MicroPython, donanımı kontrol etmek için evrensel Arduino API’sini kullanır, böylece yeni platformlarla hızlı bir şekilde uyumlu hale gelebilir. Aynı zamanda, aip paket yöneticisini sağlıyoruz. Favori Arduino kütüphanenizi bir MicroPython kütüphanesine dönüştürebilirsiniz. ArduPy aracılığıyla, fikirlerinizi hızlı bir şekilde doğrulamak, Python programlamayı öğrenmek ve Açık Kaynak donanımını öğrenmek için Python kullanabilirsiniz.
Başlarken
ArduPy ile başlamak için öncelikle aip – ArduPy Entegre Platformu‘nu kurmanız gerekiyor; bu, ArduPy geliştirmek ve ArduPy kartıyla etkileşimde bulunmak için bir yardımcı programdır. Kullanıcıların Ardupy ile hızlı bir şekilde başlamasını sağlar. aip, basit bir komut satırı aracı olarak tasarlanmıştır. Ardupy hakkında daha fazla ayrıntı bilmeden kendi Ardupy yazılımınızı özelleştirebilirsiniz.
macOS ile Kurulum
macOS kullanıcıları, ArduPy-aip’i kurmak için Terminal’de aşağıdakileri çalıştırabilir:
pip3 install ardupy-aip
Not: macOS’ta Python 3‘ün kurulu olduğundan emin olun. Python 3’ü kurmak için, macOS için bir yazılım paket yöneticisi olan Homebrew‘u kullanabilirsiniz. Homebrew kurulduktan sonra, python 3’ü kurmak için aşağıdakileri çalıştırın: brew install python3. Ayrıca Python 3’ü resmi Python web sitesinden indirip kurabilirsiniz.
Windows ile Kurulum
Windows için ArduPy’nin en son sürümlerini aşağıdaki bölümden indirebilirsiniz. İndirildikten sonra, ikili aip‘yi PATH‘te bulunan bir dizine çıkarın.
VEYA eğer Python 3 ortamınız varsa, pip3 kullanarak da kurulum yapabilirsiniz:
pip3 install ardupy-aip
Linux ile Kurulum
Linux kullanıcıları, ArduPy-aip’i kurmak için Terminal’de aşağıdakileri çalıştırabilir:
pip3 install ardupy-aip
Not: Python 3’ün kurulu olduğundan ve pip3‘ün güncel olduğundan emin olun.
ArduPy-aip CLI ile Başlarken
aip ArduPy için bir Komut Satırı Arayüzü (CLI)‘dir, aip‘yi kullanarak ArduPy kütüphanelerini kurabilir, ArduPy yazılımını donanıma kolayca oluşturup yükleyebilirsiniz. Daha fazla bilgi almak için basitçe help komutunu kullanın:
aip help

- Kart bilgilerini almak için:
aip board
- ArduPy ile bağlanan Arduino kütüphanelerini kurmak için:
aip install <ArduPy LibraryPath>
# Örnek Kullanım:
# aip install Seeed-Studio/seeed-ardupy-ultrasonic-sensor
- ArduPy kütüphanelerini kaldırmak için:
aip uninstall <ArduPy LibraryPath># Örnek Kullanım:# aip uninstall Seeed-Studio/seeed-ardupy-ultrasonic-sensor
- Yüklenmiş ArduPy Kütüphanelerini listelemek için:
aip list
- Yüklediğiniz kütüphaneleri ve temel ArduPy özelliklerini içeren ArduPy Yazılımını oluşturmak için:
aip build
- ArduPy Yazılımını donanıma yüklemek için:
aip flash
- Kartla etkileşimde bulunmak için (shell tabanlı dosya gezgini):
aip shell
Not: Bir kez ardupy-mpfshell‘e girdiğinizde, daha fazla bilgi ve komutlar için help komutunu kullanabilirsiniz.
- Python dosyasını çalıştırmak için:
aip shell -n -c "runfile <YourPythonFilePath> [Path]"# Örnek Kullanım:# aip shell -n -c "runfile /Users/ansonhe/Desktop/ur.py"
- Shell kullanarak dosyaları karta yüklemek için:
aip shell -n -c "put <YourPythonFilePath> [Path]"# Örnek Kullanım:# aip shell -n -c "put /Users/ansonhe/Desktop/ur.py"
- REPL moduna girmek için:
aip shell -c "repl"

ArduPy hakkında daha ayrıntılı talimatlar için lütfen ArduPy Başlangıç Kılavuzu‘nu ziyaret edin.
Acil Kullanımlar
Wio Terminal ile ArduPy kullanmanın sonuçlarını gösteren iki örnek burada:
Kullanım 1 (Pasta Grafiği):
aip shell -n -c "runfile <YourPythonFilePath> [Path]"
# Örnek Kullanım:
# aip shell -n -c "runfile F:\Ardupy-wio_terminal\PieChart.py
Tüm ayarlar düzgün bir şekilde kurulduysa, sonuç Wio Terminal ekranında aşağıdaki gibi görüntülenecektir.

Kullanım Kodu:
from machine import LCD, Sprite import time, math DEG2RAD = 0.0174532925 lcd = LCD() lcd.fillScreen(lcd.color.BLACK) # DAİRE SEGMENTLERİNİ ÇİZ # x,y == dairenin merkezinin koordinatları # start_angle = 0 - 359 # sub_angle = 0 - 360 = alt açı # r = yarıçap # colour = 16 bit renk değeri def fillSegment(x, y, startAngle, subAngle, r, color): # Segment başlangıcı için ilk koordinat çiftini hesapla sx = math.cos((startAngle - 90) * DEG2RAD) sy = math.sin((startAngle - 90) * DEG2RAD) x1 = sx * r + x y1 = sy * r + y # Her inc derecede renk blokları çiz for i in range(startAngle, startAngle+subAngle, 1): # Segment sonu için koordinat çiftini hesapla x2 = math.cos((i + 1 - 90) * DEG2RAD) * r + x y2 = math.sin((i + 1 - 90) * DEG2RAD) * r + y lcd.fillTriangle(int(x1), int(y1), int(x2), int(y2), x, y, color) # Bir sonraki segment için segment sonunu segment başlangıcına kopyala x1 = x2 y1 = y2 def main(): # 4 pasta grafik segmenti çiz fillSegment(160, 120, 0, 60, 100, lcd.color.RED) fillSegment(160, 120, 60, 30, 100, lcd.color.GREEN) fillSegment(160, 120, 60 + 30, 120, 100, lcd.color.BLUE) fillSegment(160, 120, 60 + 30 + 120, 150, 100, lcd.color.YELLOW) time.sleep(1) fillSegment(160, 120, 0, 360, 100, lcd.color.BLACK) if __name__ == "__main__": while True: main()
Kullanım 2 (Meter):
aip shell -n -c "runfile [Yol]"# Örnek Kullanım:# aip shell -n -c "runfile F:\Ardupy-wio_terminal\Meter.py"

Kullanım kodu:
“`html
from machine import LCD import time, math M_SIZE = 1.3333 LOOP_PERIOD = 35 ltx = 0 osx = M_SIZE * 120 osy = M_SIZE * 120 updateTime = 0 old_analog = -999 d = 0 tft = LCD() tft.fillScreen(tft.color.BLACK) def valmap(value, istart, istop, ostart, ostop): return ostart + (ostop - ostart) * ((value - istart) / (istop - istart)) def plotNeedle(value, ms_delay): global old_analog global osx, osy, ltx tft.setTextColor(tft.color.BLACK, tft.color.WHITE) if (value < -10): value = -10 # Değeri iğne son duraklarını taklit etmek için sınırla if (value > 110): value = 110 while(value != old_analog): if (old_analog < value): old_analog+=1 else: old_analog-=1 if (ms_delay == 0): old_analog = value sdeg = valmap(old_analog, -10, 110, -150, -30) # Değeri açıya eşle # İğnenin ucu koordinatlarını hesapla sx = math.cos(sdeg * 0.0174532925) sy = math.sin(sdeg * 0.0174532925) # İğnenin başlangıç x delta'sını hesapla (pivot noktasında başlamaz) tx = math.tan((sdeg + 90) * 0.0174532925) # Eski iğne görüntüsünü sil tft.drawLine(int(M_SIZE * (120 + 20 * ltx - 1)), int(M_SIZE * (140 - 20)), int(osx - 1), int(osy), tft.color.WHITE) tft.drawLine(int(M_SIZE * (120 + 20 * ltx)), int(M_SIZE * (140 - 20)), int(osx), int(osy), tft.color.WHITE) tft.drawLine(int(M_SIZE * (120 + 20 * ltx + 1)), int(M_SIZE * (140 - 20)), int(osx + 1), int(osy), tft.color.WHITE) # İğnenin altındaki metni yeniden çiz tft.setTextColor(tft.color.BLACK); tft.drawCentreString("%RH", int(M_SIZE * 120), int(M_SIZE * 70), 4); # Font 4'ü önlemek için yorum satırı yap # Yeni iğne son koordinatlarını bir sonraki silme için sakla ltx = tx osx = M_SIZE * (sx * 98 + 120) osy = M_SIZE * (sy * 98 + 140) # İğneyi yeni pozisyonda çiz, magenta iğneyi biraz kalınlaştırır # İğneyi kalınlaştırmak için 3 çizgi çizer tft.drawLine(int(M_SIZE * (120 + 20 * ltx - 1)),int( M_SIZE * (140 - 20)), int(osx - 1), int(osy), tft.color.RED) tft.drawLine(int(M_SIZE * (120 + 20 * ltx)), int(M_SIZE * (140 - 20)), int(osx), int(osy), tft.color.MAGENTA) tft.drawLine(int(M_SIZE * (120 + 20 * ltx + 1)), int(M_SIZE * (140 - 20)), int(osx + 1), int(osy), tft.color.RED) if(math.fabs(old_analog - value) < 10): ms_delay += ms_delay / 5 time.sleep(ms_delay) def analogMeter(): tft.fillRect(0, 0, int(M_SIZE * 239), int(M_SIZE * 126), tft.color.LIGHTGREY) tft.fillRect(5, 3, int(M_SIZE * 230), int(M_SIZE * 119), tft.color.WHITE) tft.setTextColor(tft.color.BLACK) # -50 ile +50 derece arasında her 5 derecede işaretler çiz for i in range(-50, 51, 5): # Uzun ölçek işaret uzunluğu tl = 15 # Çizilecek işaretin koordinatları sx = math.cos((i - 90) * 0.0174532925) sy = math.sin((i - 90) * 0.0174532925) x0 = sx * (M_SIZE * 100 + tl) + M_SIZE * 120 y0 = sy * (M_SIZE * 100 + tl) + M_SIZE * 140 x1 = sx * M_SIZE * 100 + M_SIZE * 120 y1 = sy * M_SIZE * 100 + M_SIZE * 140 # Bölge doldurma için bir sonraki işaretin koordinatları sx2 = math.cos((i + 5 - 90) * 0.0174532925) sy2 = math.sin((i + 5 - 90) * 0.0174532925) x2 = sx2 * (M_SIZE * 100 + tl) + M_SIZE * 120 y2 = sy2 * (M_SIZE * 100 + tl) + M_SIZE * 140 x3 = sx2 * M_SIZE * 100 + M_SIZE * 120 y3 = sy2 * M_SIZE * 100 + M_SIZE * 140 # Sarı bölge sınırları if (i >= -50 and i < 0): tft.fillTriangle(int(x0), int(y0), int(x1), int(y1), int(x2), int(y2), tft.color.GREEN) tft.fillTriangle(int(x1), int(y1), int(x2), int(y2), int(x3), int(y3),tft.color.GREEN) # Yeşil Bölge sınırları if (i >= 0 and i < 25): tft.fillTriangle(int(x0), int(y0), int(x1), int(y1), int(x2), int(y2), tft.color.YELLOW) tft.fillTriangle(int(x1), int(y1), int(x2), int(y2), int(x3), int(y3), tft.color.YELLOW) # Turuncu bölge sınırları if (i >= 25 and i < 50): tft.fillTriangle(int(x0), int(y0), int(x1), int(y1), int(x2), int(y2), tft.color.ORANGE) tft.fillTriangle(int(x1), int(y1), int(x2), int(y2), int(x3), int(y3), tft.color.ORANGE) # Kısa ölçek işaret uzunluğu if (i % 25 != 0): tl = 8 # İşaret uzunluğu değişirse koordinatları yeniden hesapla x0 = sx * (M_SIZE * 100 + tl) + M_SIZE * 120 y0 = sy * (M_SIZE * 100 + tl) + M_SIZE * 140 x1 = sx * M_SIZE * 100 + M_SIZE * 120 y1 = sy * M_SIZE * 100 + M_SIZE * 140 # İşareti çiz tft.drawLine(int(x0), int(y0), int(x1), int(y1), tft.color.BLACK) # Etiketlerin çizilip çizilmeyeceğini kontrol et, pozisyon ayarlamaları ile if (i % 25 == 0): x0 = sx * (M_SIZE * 100 + tl + 10) + M_SIZE * 120 y0 = sy * (M_SIZE * 100 + tl + 10) + M_SIZE * 140 if(i/25 == -2 ): tft.drawCentreString("0", int(x0), int(y0) - 12, 2) elif (i/25 == -1 ): tft.drawCentreString("25", int(x0), int(y0) - 9, 2) elif (i/25 == -0 ): tft.drawCentreString("50", int(x0), int(y0) - 7, 2) elif (i/25 == 1 ): tft.drawCentreString("75", int(x0), int(y0) - 9, 2) elif (i/25 == 2 ): tft.drawCentreString("100", int(x0), int(y0) - 12, 2) # Şimdi ölçeğin yayını çiz # sx = math.cos((i + 5 - 90) * 0.0174532925) # sy = math.sin((i + 5 - 90) * 0.0174532925) # x0 = sx * M_SIZE * 100 + M_SIZE * 120 # y0 = sy * M_SIZE * 100 + M_SIZE * 140 # # Yay yayını çiz, son kısmı çizme # if (i < 50): # tft.drawLine(int(x0), int(y0), int(x1), int(y1), tft.color.BLACK) tft.drawString("%RH", int(M_SIZE * (5 + 230 - 40)), int(M_SIZE * (119 - 20)), 2); # Birimler sağ altta tft.drawCentreString("%RH", int(M_SIZE * 120), int(M_SIZE * 70), 4); # Font 4'ü önlemek için yorum satırı yap tft.drawRect(5, 3, int(M_SIZE * 230), int(M_SIZE * 119), tft.color.BLACK); # Çerçeve çizgi çiz plotNeedle(0, 0) def initial(): analogMeter() updateTime = time.ticks_ms() def main(): global updateTime, d if (updateTime <= time.ticks_ms()): updateTime = time.ticks_ms() + 100 d += 4 if (d >= 360): d = 0 value = 50 + 50 * math.sin((d+0)*0.0174532925) print(value) plotNeedle(value, 0) if __name__ == "__main__": initial() while True: main()
“`
İlginç kullanımlar için WikiForum
