folder Tahribat.com Forumları
linefolder Elektronik / Embedded / Mobil Cihazlar
linefolder ESP32 Üzerinde Python Yazmak - Micropython



ESP32 Üzerinde Python Yazmak - Micropython

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nick6
    0x656e
    0x656e's avatar
    Kayıt Tarihi: 19/Mayıs/2012
    Homo

    ESP32 ile nasıl çalışacağımıza ve cihaza hali hazırda daha önceki bir blog konusunda değinmiştik.

     

    İlgili yazı linki: ESP32 İle Çalışmak

     

    Yukarıda linkini vermiş olduğum yazıda ESP-IDF ve pip ile birlikte kurduğumuz ESPTool kullanıyorduk. İnternet üzerindeki bir çok elektronik konulu blog yazılarını incelediğinizde elektronik cihazlara ait kodlamaların genellikle C ile yazıldığını görebilirsiniz. C bilmeyen birisi için(Örn:Ben) projeyi ilerlettikçe bu oldukça içinden çıkılamaz bir durum halini alabiliyor. İşte bu sebepledir ki bazı arkadaşlarımız elektronik cihazlar üzerinde Python yazabilmemize olanak sağlayan bir dil yazmışlar. Kendileri bu dili yine C ile yazmış olup ismine de MicroPython ismini vermişler.

     

     

    MicroPython Nedir?

     

    Kendileri ESP32 veya diğer boardlar üzerinde Python(Python'a benzer kod) kodu yazmamızı sağlayan bir dil. İçerisinde implente olmuş bir biçimde Python 3.4 kullanıyor fakat normal bir Python'a göre farklılıkları da bulunmuyor değil.

     

    İlgili farklılıklara ulaşmak için: MicroPython differences from CPython

     

    MicroPython'ın desteklemiş olduğu boardlar:

     

    • Micro:bit
    • ESP8266
    • ESP32
    • Pyboard D-Series
    • WiPy ve CC3200
    • MicroPython pyboard

     

    MicroPython'ı ESP32'ye Nasıl Yükleriz?

     

    Bunun için aslında çok fazla bir ihtiyacımız bulunmamaktadır. MicroPython'ı yüklemek için "bin" dosyasını flashlamamız yeterli.

     

    Cihazınıza uygun firmware'i indirmek için : MicroPython Firmware for ESP32

     

    Yukarıda verilmiş link üzerinden en son sürüm "bin" dosyasını indirmeniz gerekmektedir. İndirdikten sonra aşağıda verilmiş olan komut ile "Linux" üzerinde bu işlemi yapabilirsiniz. Değiştirilmesi gereken parametreler komut altında açıklanacaktır.

     

    sudo esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 write_flash -z 0x1000 esp32-20190526-v1.10-387-g1470184bd.bin
    

     

    Değiştirilmesi gereken argümanlar/parametreler:

     

    • esp32-20190526-v1.10-387-g1470184bd.bin
    • 921600
    • İlgili değer baud değeridir. Bu değer saniye başı serial port üzerinden transfer edilebilecek bit sayısını belli etmektedir. flash atarken bu değerle yazdırdık, dinlerkende 115200 baud değerinde dinleme yapmamız gerekmektedir.
    • /dev/ttyUSB0
    • İlgili değer ise ESP32 cihazınızın hangi portundan bağlandığını göstermektedir.

     

    Yükledikten Sonra Nasıl Kod Yazacağız?

     

    Şimdi her şeyi yükledik. Ama kodu nasıl yazacağız derseniz terminal'e aşağıdaki komutu yazmanız yeterlidir.

     

    screen /dev/ttyUSB1 115200

     

    2 kere enter'a bastığınızda direkt olarak interactive prompt'a düşeceksinizdir. Örnek bir ekran görüntüsünü aşağıya ekliyor olacağım.

     

    Micropython Türkçe

     

    Micropython Türkçe

     

    Eğer bu şekilde(REPL) kod yazmak hoşunuza gitmiyorsa yazdığınız kodu ampy(dilerseniz rshell) ile ESP32 Boardınıza yükleyebilirsiniz.

     

    sudo ampy --port /dev/ttyUSB0 put main.py

     

    Ampy ile attığımız kod artık her boot edilişte otomatik olarak çalışacaktır.

     

    Ben aşağıdaki kodu attım ve sürekli çalışmasını sonsuz bir while döngüsü ile sağladım. Eğer sıcaklık 30 derece üstüne çıkarsa bize haber verecektir. Ekran görüntüsünü de aşağıda gösteriyor olacağım.

     

    import dht
    import machine
    d = dht.DHT11(machine.Pin(32))
    while True:
        temp = d.temperature()
        if temp > 30:
            print("Çok sıcak acil durum olarak API bilgi gönderildi")
            break
        else:
            print("Oda sıcaklığındayız mükemmel")
    

     

    Micropython Türkçe

     

    Bu yazı şimdilik bu kadar. Belki ileride (üşenmezsem) ESP32 üzerinden sürekli olarak sıcaklık değerlerini ağda bulunan bir API'a alarak onun veri görselleştirmesini yapabiliriz veya bir sunucu odasında olduğumuzu düşünüp belirli bir sıcaklık üstüne çıktığında farklı bir porttan veri göndermesini sağlayabiliriz.

     

    Okuduğunuz için teşekkür ederim. Yine bir klasik olarak şarkı paylaşacağım fakat bu sefer yine 2 tane paylaşacağım.

     

    https://www.youtube.com/watch?v=5hNT2wtVIBI

    https://www.youtube.com/watch?v=1gdihQ_cnfQ

    Kaynak: https://enesergun.net/esp32-ile-micropython.html

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek

    direkt python mu çalıştırıyor ?

     

    Benim bildiğim şu arduionu idesi C ile yazılan kodu Assembly'e çeviriyor. Bunun bir idesi var da bu ide de Assembly'e mi çeviriyor ben tam olarak anlamadım. Yoksa esp82 nin canı ne ki python kodlansın ?


    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nick6
    0x656e
    0x656e's avatar
    Kayıt Tarihi: 19/Mayıs/2012
    Homo
    MhmdAlmz bunu yazdı

    direkt python mu çalıştırıyor ?

     

    Benim bildiğim şu arduionu idesi C ile yazılan kodu Assembly'e çeviriyor. Bunun bir idesi var da bu ide de Assembly'e mi çeviriyor ben tam olarak anlamadım. Yoksa esp82 nin canı ne ki python kodlansın ?

    Direkt micropython yorumluyor işte hocam interactive bir şekilde de yazabiliyorsun. Çok derin bir bilgi sahibi olmasamda muhtemelen şöyle oluyordur micropython yorumlayıcısını ve built-in(az sayıda zaten) modülleri alıp yüklüyordur. Bilmiyorum Arduino IDE'yi sadece Example dosyasını açmak amacıyla kullandım.

    https://www.cnx-software.com/wp-content/uploads/2016/03/ESP8266_vs_ESP32.png

    0x656e tarafından 27/May/19 15:55 tarihinde düzenlenmiştir
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek

    Muhtemelen flashladığın zaman makina koduna çeviriyordur. Beğendim ama JAVA'nın da böyle bir kütüphanesi vardı o zamanlar kullanmıştım da çok bir artı getirmiyor ya.

    Yazdığın kod çok uber olmuyor. Genelde ya sinyal okuyorsun yada bir string.

    Oturup satırlarca kod yazmıyorsundur. 

    Yani büyük projelerde yük client'da değil de server'da diye düşünüyorum.

    Örneğin bir api lazım size havadurumu apisi bu apiye göre bir sonuç çıkarmak gerekiyor. Örneğin yağmurlu ise kepenkler açılsın güneşli ise kepenkler açılsın normal ise kepenkler kapalı kalsın diye bir modül geliştirmek istenilirse (sadece küçük bir chip ile de yaparsın ama ben büyük otomasyonlar için veya IOT için falan konuşuyorum.) Sunucu tarafında bu işlemler gerçekleştirilip daha sonra client'a push edilir diye düşünüyorum.

    Bu yüzden böyle atakların pek de bir işe yaradığını düşünmüyorum.

    Zaten böyle ufak kartların veya böyle ufak chiplerin üzerinde 10-15 satır kodlar çalışıyor o da basic C kodları ya :/ 

     

    Ama güzel yani eğlenceli elbette saçma değil de gereksiz işte :) 

    Belki Pythonda fark ettirir ama C#, Java gibi dillerden geçiş yapıp o C de kod yazanlar çok fazla zorlanmayacaklardır. Syntax Çok ama çok benzer zaten :D

     

    Bu arada ; eline koluna sağlık hocam. Güzel yazı olmuş.

    EDİT ; Bir önceki postumda esp82 demişim de 32 olcak o ikisi de wifi modülü sanırsam :D

     

    MhmdAlmz tarafından 27/May/19 16:03 tarihinde düzenlenmiştir

    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!