Raspberry Pi Pico W ile Telegram Bot (MicroPython)
|Merhabalar,
Bu konuda Raspberry Pi’ ın yeni tanıttığı Pico-W isimli mikrodenetleyici kartını inceleyeceğiz ve Telegram botuna bağlanıp, Telegram’ dan gönderdiğimiz komutlara göre Pico’ yu uzaktan kontrol edeceğiz. Normal Pico kartının kullanımının anlatıldığı konuya bağlantıdan ulaşabilirsiniz. (Önceki konuya gitmeden önce paragrafı sonuna kadar okumanızı tavsiye ederim.) MicroPython kullanacağımız için yazılım yükleme işlemleri birebir aynı olacaktır. Bu sebeple o kısımları tekrar anlatmayacağım. İlk defa kurulum yapıyorsanız indrmeniz gereken firmware önceki sayfadan farklıdır. Onu buradan indirmelisiniz. Ayrıca VsCode’ da meydana gelen bir güncelleme sonrası Pico-Go eklentisi çalışmamaya başlamıştı. Geçtiğimiz günlerde onun de yenisi VsCode eklentileri sayfasına eklendi. Yeni eklentiyi bağlantıdan indirebilirsiniz. Eklenti ismi aynı gibi görünse de yayınlayanların farklı olduğunu görebilirsiniz. VsCode olmadan da Thonny gibi IDE’ ler yardımı ile MicroPython yazabiliyor olsanızda kod tamamlama özelliği olmadan yazılım geliştirmek gerçekten çok can sıkıcı olabiliyor.
Pico-W önceki karttan farklı olarak sahip olduğu Wi-Fi modülü ile ön plana çıkmakta. Önceki kartın inceleme konusunda da bunun eksikliğinin hoş olmadığını belirtmiştim. Eklenen Wi-Fi ile çok daha kullanışlı bir kart haline geldi. Performansı da bence gayet yeterli özellikte. Özellikle fiyatı ile kıyaslandığında tam bir fiyat performans ürünü haline gelmiş durumda. Ancak ESP32 ile kıyaslayacak olursak hala ESP32 daha kullanışlı bir kart gibi. Özellikle fiziksel özelliklerini kıyaslayacak olursak. Tabi bu kart henüz daha yeni çıktı ve Raspberry Pi ürünü olduğu için topluluğu çok büyük olacaktır. Bu topluluk onu nerelere götürür bunu ileride göreceğiz. Ama ESP32 modül, hatta denetleyici halinde bile Wi-Fi ve Bleutooth özellikleri sunarken Pico kartı üzerinde Wi-Fi ve Bluetooth ek bir modül ile sağlanmakta. Bu da ürün geliştirimesi gereken durumlarda olumsuz etki olarak Pico’ ya yansıyor. Bu arada Pico-W kartı üzerinde Bluetooth 5′ de bulunmakta. Ancak henüz yazılımsal olarak erişilebilir değil. İlerleyen zamanlarda SDK’ sı yayınlanacaktır.
Yapacağımız uygulamaya geri dönecek olursak, bir Telegram botu yapacağız. Pico-W’ yi Telegram botuna bağlayabilmek için Telegram içerisinde bulunan Bot-Father isimli botu kullanacağız. Bu bot hem telegram API’ sine bağlanmak için key üretecek hem de botumuzu oluşturacak. Linke tıklayarak kendi Telegram’ ınız üzerinden bu bota mesaj gönderebileceksiniz. Bota göndereceğiniz komutlar sırası ile şu şekilde olmalıdır.
- /start: BotFather’ ın sizin hesabınızda aktifleştirir.
- /newbot: BotFather size yeni bir bot oluşturur.
- “Bot_ismi”: NewBot komutundan sonra botunuza vermek istediğiniz ismi girmelisiniz.
Bot ismi olarak girdiğiniz isim daha önceden alınmışsa farklı bir isim isteyecektir. Eğer daha önceden alınmamışsa aşağıdaki gibi bir cevap üretecektir. Bu cevapda kırmızı ile işaretli alan Telegram botuna bağlanmak için kullanacağımız API Key’ dir. Bu anahtarı bilen herhangi birisi botunuza erişebileceği için dikkatli muhafaza etmelisiniz.
API Key’ i de ürettiğimize göre yapacağımız sistemin bağlantı şemasına bakalım. Uygulamamızda bir Pico, iki adet LED, DHT11 sensör ve bir I2C LCD ekran kullanacağız. Yapacağımız uygulamada Telegram üzerinden gönderdiğimiz komutlar ile LED’ leri yakıp söndürebileceğiz ya da DHT11′ in okuduğu sıcaklık ve nem bilgisini Telegram üzerinde görüntüleyebileceğiz. Komut olarak gönderilmeyen bütün mesajlar ise LCD üzerinde görüntülenmesini sağlayacağız. Sistemimizin bağlantı şeması ise şu şekilde olmalıdır.
Bağlantı şemasını da verdiğimiz göre sıra geldi yazılım kısmına. Yazılım kısmında Telegram bağlantısı ve I2C LCD kullanımı için harici kütüphaneler kullanılmıştır. Bu sebeple bu kütüphaneleri Pico kartına dosya olarak yüklemelisiniz. DHT11 MicroPython’ un dahili kütüphanesi ile kullanılmıştır. Kullanılan kütüphane dosyalarına aşağıdaki bağlantılardan ulaşabilirsiniz.
- telegram: Micropython ile Telegram bağlantısını yapan kütüphane
- i2c_lcd: MicroPython ile I2C LCD kullanımını sağlayan kütüphane
Öncelikle yazılım içerisindeki tanımlar ile başlayalım. İlk başta I2C LCD ve DHT11 sensörünün pinlerinin tanımlarını yapalım. Ekran ile kullanacağımız I2C haberleşme frekansını 100Khz ile olarak seçmeliyiz.
I2C_ADDR = 0x27
totalRows = 2
totalColumns = 16
# telegram API key
telegram_api_key = "YOUR API KEY"
# I2C Pin Definitions
led = Pin("LED", Pin.OUT)
i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=100000)
lcd = I2cLcd(i2c, I2C_ADDR, totalRows, totalColumns)
lcd.clear()
# dht11 Pin Definition
d = dht.DHT11(machine.Pin(15))
Daha sonrasında WiFi bağlantısını gerçekleştirelim. Yazılım içerisinde WiFi bilgilerini kendi WiFi bağlantı bilgileriniz ile değiştirmeniz bağlantı için yeterli olacaktır. Aşağıdaki yazılım bağlantı gerçekleşene kadar yazılımı bloklaması için bir döngü içermektedir. WiFi bağlantısı gerçekleşince döngüden çıkıp IP bilgilerini görüntüleyecektir.
# Wifi Credentials and Wifi Conenctions
ssid = 'WIFI_SSID'
pswd = 'WIFI_PASWD'
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, pswd)
print("Connecting Wifi.", end='')
lcd.putstr("Connecting WiFi")
while not wlan.isconnected() and wlan.status() >= 0:
print('.', end='')
lcd.putstr(".")
time.sleep(0.5)
print('')
print(wlan.ifconfig())
WiFi için gerekli ayarlamayı yapıp WiFi bağlantısını yaptığımıza göre artık Telegram için gerekli bağlantıları da yapabiliriz. Telegram bağlantısı için başta da belirttiğim gibi Telegram API Key’ ine ihtiyacımız olacak. API Key’ ini Telegram botuna verdikten sonra bot ile kullanmak istediğimiz komutlar için callback fonksiyonları tanımlıyoruz. Böylece bota o komutları gönderdiğimizde bot callback fonksiyonu içerisinde tanımladığımız işlemleri yapacaktır. “set_default_handler” callback fonksiyonu, belirlenen komutlar dışında bir mesaj geldiğinde işlem yapılması için kullanılabilecek fonksiyondur. Tanımlanan callback fonksiyonlarından da görülebileceği üzere “ping”, “led”, “temp”, “hum”, “clear” komutlarım mevcut. İsimlerinden de anlaşılacağı üzere bu komutlar LED yakıp söndürmek ya da sıcaklık değerini istemek gibi işlemlere sahip olacaktır.
# start telegram bot
bot = utelegram.ubot(telegram_api_key)
bot.register('/ping', reply_ping) # ping message callback
bot.register('/led', led_cb) # led message callback
bot.register('/temp', temp_cb) # temp message callback
bot.register('/hum', hum_cb) # humdity message callback
bot.register('/clear', clear_cb) # clear screen callbacj
bot.set_default_handler(get_message) # default message callback
print('BOT LISTENING')
lcd.clear()
lcd.putstr("BOT LISTENING")
bot.listen()
Callback fonksiyonlarının bağlantılarını yaptıktan sonra şimdi fonksiyonların içerisini doldurmalıyız. Callback fonksiyonlarını isimlerinde belirtilen işlemleri yapmaları için aşağıdaki gibi oluşturabiliriz.
# Telegram default callback
def get_message(message):
lcd.clear()
lcd.putstr(message['message']['text'])
bot.send(message['message']['chat']['id'], message['message']['text'].upper())
# send PONG text as ping reply
def reply_ping(message):
print(message)
bot.send(message['message']['chat']['id'], 'pong')
# send humdity value as answer
def hum_cb(message):
d.measure()
lcd.clear()
lcd.putstr("Send Hum: " + str(d.humidity()))
# print(message)
bot.send(message['message']['chat']['id'], d.humidity())
# send temp value as answer
def temp_cb(message):
d.measure()
lcd.clear()
lcd.putstr("Send Temp: " + str(d.temperature()))
# print(message)
bot.send(message['message']['chat']['id'], d.temperature())
# change led status with given parameters in message text
def led_cb(message):
msg = message['message']['text']
msg_sp = msg.split(' ')
print(msg_sp)
if len(msg_sp) != 3:
bot.send(message['message']['chat']['id'], "Yanlis Format /led 1 1")
return
if msg_sp[1] == '1':
if msg_sp[2] == '1':
led.on()
bot.send(message['message']['chat']['id'], "LED YANDI")
else:
led.off()
bot.send(message['message']['chat']['id'], "LED SONDU")
# clear lcd screen
def clear_cb(message):
lcd.clear()
Konunun burada sonuna geldik. Pico-W kartı ile Telegram botu kullanarak haberleştik ve Pico-W kartına bazı işlemler yaptırdık. Telegram botunun her yerden erişlebilir olması Pico-W kartınızı internet erişimi olan her yerden erişebilme imkanı vermektedir ki hobi amaçlı yapılan projelerde oldukça kullanışlı bir özellik.
Bu konuda hazırlanan yazılım pin tanımlarının doğru şekilde değiştirilmesi halinde ESP32 ile de sorunsuz çalışmaktadır.
Yukarıdaki sisteminin yazılımının tamamına bağlantıdan ulaşabilirsiniz.
İyi çalışmalar dilerim…