Merhabalar bir önceki yazımda MicroPython kurulum ve kullanımı ile ilgili bir yazı yayınlamıştım.
Şimdi ise MicroPython icin geliştirilen IDE’lerden uPyCraft IDE nin kurulumunu ve bir ufak örnekle kullanımını anlatmaya çalışacağım.
uPyCraft IDE, DFRobot tarafından geliştirilmiş ,kullanımı kolay ve yeni başlayanlar için önerilen
bir IDE ‘dir.
https://github.com/DFRobot/uPyCraft bağlantısından Windows için uPyCraft_V1.0.exe dosyasını indirip işe başlayalım.
İndirdiğiniz dosyayı çift tıkladığınız da, uPyCraft IDE aşağıda gösterildiği gibi açılacaktır.
Şimdi UPyCraft IDE’ye daha yakından bakalım ve IDE’nin her bir bölümünü tanıyalım.
uPyCraft IDE’nin 4 bölümü vardır:
1- Klasor ve Dosyalar:
- Device cihaz klasörü, ESP kartında depolanan dosyaları içerir. Bu klasör ayrıca varsayılan olarak boot.py içerir ve programınızı yazmak için main.py ile başka bir dosya oluşturmanız gerekir.
- SD klasörü, SD kartta saklanan dosyaları içerir. PyBoard gibi SD kartı destekleyen çeşitli kartlar vardır.
- uPy_lib yerleşik MicroPython IDE kütüphaneleri içerir.
- Workspace çalışma alanı, PC’nize kaydedeceğiniz dosyaları içerir.
2- Editor:
Bu bölüm python kodunu yazmak ve düzenlemek içindir. Editör’de birden fazla python dosyası açılabilir.
3- Terminal:
Bu bölüm ESP kartındaki kabuk komutlarını yazmak ve yürütmek içindir. Bu bölüm ayrıca programın durumunu, hataları, yazdırma mesajlarını vb. Gösterir.
4- Araçlar:
Bu bölüm yeni bir dosya oluşturma, dosyayı kaydetme, dosyayı yükleme, anakartın bağlanması / bağlantısını kesme vb. Seçenekleri içerir.
Şimdi sira ESP-01 modulumuzu bağlayıp ayarlarını yapmaya geldi.
Tools->board acılan pencereden size uygun olan modeli seciyorsunuz. Default olarak ESP32 gelmektedir. Bu uygulamada ESP-01 kullandığımız için ESP8266 yi seciyoruz.
Board seçme işlemi bittikten sonra şimdi. Bağlantı noktası ayarımız kaldı.
Onun içinde Tools->serial-> artık burda modulunuz hangi portu kullanıyorsa onu seciyorsunuz.
Secim yapıldıktan sonra aşağıdaki gibi bir ekran karşımıza cıkacaktır. Termanil bölümünde >>> ibaresi belirir.
ESP-01 modulunuzu resetlediğimiz de herhangi bir uygulama yoksa aşağıdaki görüntüyü görürüz.
Artık modulumuz kullanıma hazırdır. İster Terminalden komut yazarak devam ederiz yada üst kısımda Editor bolumunde kodları yazarak sağ taraftaki araçlardan Play tuşuna basarak ta programı modülümuze yükleriz.
Örnek olarak Terminalden girmiş olduğumuz kodun çıktısı
Şimdi gelelim ufak bir uygulama yapmaya. Örneğimiz de 0.96” i2c Oled ekrana Merhaba MicroPython yazısını yazdırmak. Uygulamada i2c arabirimini kullanmamdaki amaç Micropython’la ne kadar kolay olduğunu göstermek.
Uygulamasını yapaçağımız ekran ile ESP-01 bağlantı şeması.
İlk adım olarak eğer ilk defa uygulama yapıyorsak modul içinde main.py dosyası olmayacaktır.
ssd1306.py dosyasi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# MicroPython SSD1306 OLED driver, I2C and SPI interfaces from micropython import const import framebuf # register definitions SET_CONTRAST = const(0x81) SET_ENTIRE_ON = const(0xA4) SET_NORM_INV = const(0xA6) SET_DISP = const(0xAE) SET_MEM_ADDR = const(0x20) SET_COL_ADDR = const(0x21) SET_PAGE_ADDR = const(0x22) SET_DISP_START_LINE = const(0x40) SET_SEG_REMAP = const(0xA0) SET_MUX_RATIO = const(0xA8) SET_COM_OUT_DIR = const(0xC0) SET_DISP_OFFSET = const(0xD3) SET_COM_PIN_CFG = const(0xDA) SET_DISP_CLK_DIV = const(0xD5) SET_PRECHARGE = const(0xD9) SET_VCOM_DESEL = const(0xDB) SET_CHARGE_PUMP = const(0x8D) # Subclassing FrameBuffer provides support for graphics primitives # http://docs.micropython.org/en/latest/pyboard/library/framebuf.html class SSD1306(framebuf.FrameBuffer): def __init__(self, width, height, external_vcc): self.width = width self.height = height self.external_vcc = external_vcc self.pages = self.height // 8 self.buffer = bytearray(self.pages * self.width) super().__init__(self.buffer, self.width, self.height, framebuf.MONO_VLSB) self.init_display() def init_display(self): for cmd in ( SET_DISP | 0x00, # off # address setting SET_MEM_ADDR, 0x00, # horizontal # resolution and layout SET_DISP_START_LINE | 0x00, SET_SEG_REMAP | 0x01, # column addr 127 mapped to SEG0 SET_MUX_RATIO, self.height - 1, SET_COM_OUT_DIR | 0x08, # scan from COM[N] to COM0 SET_DISP_OFFSET, 0x00, SET_COM_PIN_CFG, 0x02 if self.width > 2 * self.height else 0x12, # timing and driving scheme SET_DISP_CLK_DIV, 0x80, SET_PRECHARGE, 0x22 if self.external_vcc else 0xF1, SET_VCOM_DESEL, 0x30, # 0.83*Vcc # display SET_CONTRAST, 0xFF, # maximum SET_ENTIRE_ON, # output follows RAM contents SET_NORM_INV, # not inverted # charge pump SET_CHARGE_PUMP, 0x10 if self.external_vcc else 0x14, SET_DISP | 0x01, ): # on self.write_cmd(cmd) self.fill(0) self.show() def poweroff(self): self.write_cmd(SET_DISP | 0x00) def poweron(self): self.write_cmd(SET_DISP | 0x01) def contrast(self, contrast): self.write_cmd(SET_CONTRAST) self.write_cmd(contrast) def invert(self, invert): self.write_cmd(SET_NORM_INV | (invert & 1)) def show(self): x0 = 0 x1 = self.width - 1 if self.width == 64: # displays with width of 64 pixels are shifted by 32 x0 += 32 x1 += 32 self.write_cmd(SET_COL_ADDR) self.write_cmd(x0) self.write_cmd(x1) self.write_cmd(SET_PAGE_ADDR) self.write_cmd(0) self.write_cmd(self.pages - 1) self.write_data(self.buffer) class SSD1306_I2C(SSD1306): def __init__(self, width, height, i2c, addr=0x3C, external_vcc=False): self.i2c = i2c self.addr = addr self.temp = bytearray(2) self.write_list = [b"\x40", None] # Co=0, D/C#=1 super().__init__(width, height, external_vcc) def write_cmd(self, cmd): self.temp[0] = 0x80 # Co=1, D/C#=0 self.temp[1] = cmd self.i2c.writeto(self.addr, self.temp) def write_data(self, buf): self.write_list[1] = buf self.i2c.writevto(self.addr, self.write_list) class SSD1306_SPI(SSD1306): def __init__(self, width, height, spi, dc, res, cs, external_vcc=False): self.rate = 10 * 1024 * 1024 dc.init(dc.OUT, value=0) res.init(res.OUT, value=0) cs.init(cs.OUT, value=1) self.spi = spi self.dc = dc self.res = res self.cs = cs import time self.res(1) time.sleep_ms(1) self.res(0) time.sleep_ms(10) self.res(1) super().__init__(width, height, external_vcc) def write_cmd(self, cmd): self.spi.init(baudrate=self.rate, polarity=0, phase=0) self.cs(1) self.dc(0) self.cs(0) self.spi.write(bytearray([cmd])) self.cs(1) def write_data(self, buf): self.spi.init(baudrate=self.rate, polarity=0, phase=0) self.cs(1) self.dc(1) self.cs(0) self.spi.write(buf) self.cs(1) |
Üst ksımdaki kodu file kısmından veya araçlar bölümünden yeni bir dosya oluşturup içerisine kopyalayıp ss1306.py adıyla kaydediyoruz.
Not:
Burdan bu işlemi yapmadan da ssd1306.py dosyasını direkt olarak komut satırından
Set AMPY_PORT=COM18
Ampy put ssd1306.py diyerekte modul icine yükleyebiliriz..
Ssd1306.py dosyanın linki:
https://github.com/micropython/micropython/blob/master/drivers/display/ssd1306.py
Yazılan kodun yüklenme aşaması
Yükleme sonrası ekran görüntüsü.
Not:
-
- Dosya gözükmezse bağlantıyı koparıp tekrar bağlanın.
-
- Şimdi main programı yazıp yüklemeye geldi sıra.
- Üst kısımda yaptığımız gibi yeniden yeni bir pencere açıp içine
1 2 3 4 5 6 7 8 9 10 11 |
from machine import I2C, Pin import ssd1306 import math i2c = I2C(-1, scl=Pin(2), sda=Pin(0)) display = ssd1306.SSD1306_I2C(128, 64, i2c) display.fill(0) display.text('Merhaba', 0, 0) display.text('MicroPython', 0, 10) display.show() |
- kodunu yapıştırıp main.py olarak kayıttan sonra araçlardan programı yüklüyoruz. Yükledikten sonra aşağıdaki resmi görmeliyiz
Not:
- uPyCraft ide acılırken font dosyası isteyebilir. İstediği takdirde altaki linkten ilgili font dosyası alınıp windows’un font klasorune kopyalanır.
- uPyCraft ide’nin v1.1 versiyon için altaki linki kullanabilirsiniz.
- uPyCraft ide ile ESP lerimize micropython firmware olan xxx.bin dosyaları da yükleyebiliyoruz.
Font dosyasi icin link: https://github.com/DFRobot/uPyCraft_src
uPyCraft v1.1 icin link: https://randomnerdtutorials.com/uPyCraftWindows
- Bir başka yazıda 0.96” i2c Oled kullanımı hakkında detaylı bir yazıyla görüşmek üzere.
- Saygı ve sevgilerimle.
- Mehmet BEBEK