11 KiB
Wio Terminal ile Gece Lambanızı İnternet Üzerinden Kontrol Edin
IoT cihazı, ışık sensörü okumasıyla telemetri değerlerini göndermek ve LED'i kontrol etmek için komutlar almak üzere MQTT kullanarak test.mosquitto.org ile iletişim kuracak şekilde kodlanmalıdır.
Bu dersin bu bölümünde, Wio Terminal'inizi bir MQTT brokerine bağlayacaksınız.
WiFi ve MQTT Arduino Kütüphanelerini Kurun
MQTT brokeri ile iletişim kurmak için, Wio Terminal'deki WiFi çipini kullanmak ve MQTT ile iletişim kurmak için bazı Arduino kütüphanelerini yüklemeniz gerekiyor. Arduino cihazları için geliştirme yaparken, açık kaynak kodu içeren ve çok çeşitli yetenekleri uygulayan geniş bir kütüphane yelpazesi kullanabilirsiniz. Seeed, Wio Terminal'in WiFi üzerinden iletişim kurmasını sağlayan kütüphaneler yayınlar. Diğer geliştiriciler ise MQTT brokerleriyle iletişim kurmak için kütüphaneler yayınlamışlardır ve bu kütüphaneleri cihazınızla kullanacaksınız.
Bu kütüphaneler, PlatformIO'ya otomatik olarak aktarılabilen ve cihazınız için derlenebilen kaynak kod olarak sağlanır. Bu şekilde Arduino kütüphaneleri, Arduino çerçevesini destekleyen herhangi bir cihazda çalışır, tabii ki kütüphanenin gerektirdiği özel donanım cihazda mevcutsa. Bazı kütüphaneler, örneğin Seeed WiFi kütüphaneleri, belirli donanımlara özeldir.
Kütüphaneler global olarak yüklenebilir ve gerekirse derlenebilir veya belirli bir projeye dahil edilebilir. Bu ödevde, kütüphaneler projeye yüklenecektir.
✅ Kütüphane yönetimi hakkında daha fazla bilgi edinmek ve kütüphaneleri nasıl bulup yükleyeceğinizi öğrenmek için PlatformIO kütüphane dokümantasyonu adresine göz atabilirsiniz.
Görev - WiFi ve MQTT Arduino kütüphanelerini yükleyin
Arduino kütüphanelerini yükleyin.
-
VS Code'da gece lambası projesini açın.
-
platformio.ini
dosyasının sonuna aşağıdakileri ekleyin:lib_deps = seeed-studio/Seeed Arduino rpcWiFi @ 1.0.5 seeed-studio/Seeed Arduino FS @ 2.1.1 seeed-studio/Seeed Arduino SFUD @ 2.0.2 seeed-studio/Seeed Arduino rpcUnified @ 2.1.3 seeed-studio/Seeed_Arduino_mbedtls @ 3.0.1
Bu, Seeed WiFi kütüphanelerini içe aktarır.
@ <number>
sözdizimi, kütüphanenin belirli bir sürüm numarasına atıfta bulunur.💁
@ <number>
kısmını kaldırarak her zaman kütüphanelerin en son sürümünü kullanabilirsiniz, ancak daha sonraki sürümlerin aşağıdaki kodla çalışacağına dair bir garanti yoktur. Buradaki kod, kütüphanelerin bu sürümüyle test edilmiştir.Kütüphaneleri eklemek için yapmanız gereken tek şey budur. PlatformIO projeyi bir sonraki derlediğinde, bu kütüphanelerin kaynak kodunu indirir ve projenize dahil eder.
-
lib_deps
kısmına aşağıdakileri ekleyin:knolleary/PubSubClient @ 2.8
Bu, PubSubClient adlı bir Arduino MQTT istemcisini içe aktarır.
WiFi'ye Bağlanın
Artık Wio Terminal WiFi'ye bağlanabilir.
Görev - WiFi'ye bağlanın
Wio Terminal'i WiFi'ye bağlayın.
-
src
klasöründeconfig.h
adlı yeni bir dosya oluşturun. Bunu,src
klasörünü veya içindekimain.cpp
dosyasını seçerek ve gezgin üzerinde beliren Yeni dosya düğmesini seçerek yapabilirsiniz. Bu düğme yalnızca imleciniz gezgin üzerindeyken görünür. -
WiFi kimlik bilgilerinizi tanımlamak için bu dosyaya aşağıdaki kodu ekleyin:
#pragma once #include <string> using namespace std; // WiFi credentials const char *SSID = "<SSID>"; const char *PASSWORD = "<PASSWORD>";
<SSID>
kısmını WiFi'nizin SSID'si ile değiştirin.<PASSWORD>
kısmını WiFi şifrenizle değiştirin. -
main.cpp
dosyasını açın. -
Dosyanın en üstüne aşağıdaki
#include
yönergelerini ekleyin:#include <PubSubClient.h> #include <rpcWiFi.h> #include <SPI.h> #include "config.h"
Bu, daha önce eklediğiniz kütüphanelerin başlık dosyalarını ve yapılandırma başlık dosyasını içerir. Bu başlık dosyaları, PlatformIO'ya kütüphanelerden kod getirmesi gerektiğini söylemek için gereklidir. Bu başlık dosyalarını açıkça dahil etmezseniz, bazı kodlar derlenmez ve derleyici hataları alırsınız.
-
setup
fonksiyonunun üstüne aşağıdaki kodu ekleyin:void connectWiFi() { while (WiFi.status() != WL_CONNECTED) { Serial.println("Connecting to WiFi.."); WiFi.begin(SSID, PASSWORD); delay(500); } Serial.println("Connected!"); }
Bu kod, cihaz WiFi'ye bağlı değilken döngüye girer ve yapılandırma başlık dosyasındaki SSID ve şifreyi kullanarak bağlanmayı dener.
-
Bu fonksiyonu
setup
fonksiyonunun altına, pinler yapılandırıldıktan sonra çağırın.connectWiFi();
-
Bu kodu cihazınıza yükleyin ve WiFi bağlantısının çalıştığını kontrol edin. Seri monitörde bunu görmelisiniz.
> Executing task: platformio device monitor < --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time --- More details at http://bit.ly/pio-monitor-filters --- Miniterm on /dev/cu.usbmodem1101 9600,8,N,1 --- --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- Connecting to WiFi.. Connected!
MQTT'ye Bağlanın
Wio Terminal WiFi'ye bağlandıktan sonra MQTT brokerine bağlanabilir.
Görev - MQTT'ye bağlanın
MQTT brokerine bağlanın.
-
MQTT brokeri için bağlantı ayrıntılarını tanımlamak üzere
config.h
dosyasının sonuna aşağıdaki kodu ekleyin:// MQTT settings const string ID = "<ID>"; const string BROKER = "test.mosquitto.org"; const string CLIENT_NAME = ID + "nightlight_client";
<ID>
kısmını bu cihaz istemcisi için kullanılacak benzersiz bir kimlik ile değiştirin ve bu kimlik daha sonra bu cihazın yayınladığı ve abone olduğu konular için kullanılacaktır. test.mosquitto.org brokeri herkese açık ve birçok kişi tarafından, bu ödevi yapan diğer öğrenciler dahil, kullanılmaktadır. Benzersiz bir MQTT istemci adı ve konu adlarına sahip olmak, kodunuzun başkalarınınkiyle çakışmamasını sağlar. Bu kimliği, bu ödevin ilerleyen bölümlerinde sunucu kodunu oluştururken de kullanmanız gerekecek.💁 Benzersiz bir kimlik oluşturmak için GUIDGen gibi bir web sitesi kullanabilirsiniz.
BROKER
, MQTT brokerinin URL'sidir.CLIENT_NAME
, bu MQTT istemcisi için brokerdeki benzersiz bir isimdir. -
main.cpp
dosyasını açın veconnectWiFi
fonksiyonunun altına,setup
fonksiyonunun üstüne aşağıdaki kodu ekleyin:WiFiClient wioClient; PubSubClient client(wioClient);
Bu kod, Wio Terminal WiFi kütüphanelerini kullanarak bir WiFi istemcisi oluşturur ve bunu kullanarak bir MQTT istemcisi oluşturur.
-
Bu kodun altına aşağıdakileri ekleyin:
void reconnectMQTTClient() { while (!client.connected()) { Serial.print("Attempting MQTT connection..."); if (client.connect(CLIENT_NAME.c_str())) { Serial.println("connected"); } else { Serial.print("Retying in 5 seconds - failed, rc="); Serial.println(client.state()); delay(5000); } } }
Bu fonksiyon, MQTT brokerine bağlantıyı test eder ve bağlantı yoksa yeniden bağlanır. Bağlı olmadığı sürece döngüye girer ve yapılandırma başlık dosyasındaki benzersiz istemci adını kullanarak bağlanmayı dener.
Bağlantı başarısız olursa, 5 saniye sonra yeniden dener.
-
reconnectMQTTClient
fonksiyonunun altına aşağıdaki kodu ekleyin:void createMQTTClient() { client.setServer(BROKER.c_str(), 1883); reconnectMQTTClient(); }
Bu kod, istemci için MQTT brokerini ayarlar ve bir mesaj alındığında geri çağırmayı yapılandırır. Daha sonra broker ile bağlantı kurmayı dener.
-
setup
fonksiyonunda WiFi bağlandıktan sonracreateMQTTClient
fonksiyonunu çağırın. -
Tüm
loop
fonksiyonunu aşağıdaki kodla değiştirin:void loop() { reconnectMQTTClient(); client.loop(); delay(2000); }
Bu kod, MQTT brokerine yeniden bağlanarak başlar. Bu bağlantılar kolayca kesilebilir, bu yüzden düzenli olarak kontrol etmek ve gerekirse yeniden bağlanmak önemlidir. Daha sonra, abone olunan konudaki gelen mesajları işlemek için MQTT istemcisinin
loop
metodunu çağırır. Bu uygulama tek iş parçacıklı olduğundan, mesajlar arka planda bir iş parçacığında alınamaz, bu nedenle ağ bağlantısında bekleyen mesajları işlemek için ana iş parçacığında zaman ayrılması gerekir.Son olarak, 2 saniyelik bir gecikme, ışık seviyelerinin çok sık gönderilmesini önler ve cihazın güç tüketimini azaltır.
-
Kodunuzu Wio Terminal'e yükleyin ve cihazın WiFi ve MQTT'ye bağlandığını görmek için Seri Monitör'ü kullanın.
> Executing task: platformio device monitor < source /Users/jimbennett/GitHub/IoT-For-Beginners/1-getting-started/lessons/4-connect-internet/code-mqtt/wio-terminal/nightlight/.venv/bin/activate --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time --- More details at http://bit.ly/pio-monitor-filters --- Miniterm on /dev/cu.usbmodem1201 9600,8,N,1 --- --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- Connecting to WiFi.. Connected! Attempting MQTT connection...connected
💁 Bu kodu code-mqtt/wio-terminal klasöründe bulabilirsiniz.
😀 Cihazınızı başarıyla bir MQTT brokerine bağladınız.
Feragatname:
Bu belge, AI çeviri hizmeti Co-op Translator kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalar için sorumluluk kabul edilmez.