MQTT kod oluşturucu
Bir broker, transport ve topic’leri seçin; Python, Node.js, tarayıcı JavaScript’i, ESP32/Arduino, Go, Java, C# veya mosquitto komut satırı için eksiksiz, çalıştırılabilir bir MQTT client’ı alın — bağlanma, abone olma ve yayınlama tek bir kopyala-yapıştırla.
Oluşturulan kod
Online client’ta açimport uuid
import paho.mqtt.client as mqtt
BROKER = "broker.connectmq.com"
PORT = 1883
SUB_TOPIC = "testmqtt/demo/#"
PUB_TOPIC = "testmqtt/demo/hello"
PAYLOAD = "TestMQTT’den merhaba"
QOS = 1
CLIENT_ID = f"python-{uuid.uuid4().hex[:8]}"
def on_connect(client, userdata, flags, reason_code, properties):
if reason_code.is_failure:
print(f"Connection failed: {reason_code}")
return
print(f"Connected to {BROKER}:{PORT}")
# Subscribing here means the subscription is renewed after every reconnect.
client.subscribe(SUB_TOPIC, qos=QOS)
client.publish(PUB_TOPIC, PAYLOAD, qos=QOS)
def on_message(client, userdata, msg):
print(f"{msg.topic}: {msg.payload.decode(errors='replace')}")
def on_disconnect(client, userdata, flags, reason_code, properties):
print(f"Disconnected: {reason_code}")
client = mqtt.Client(
mqtt.CallbackAPIVersion.VERSION2,
client_id=CLIENT_ID,
protocol=mqtt.MQTTv311,
transport="tcp",
)
client.on_connect = on_connect
client.on_message = on_message
client.on_disconnect = on_disconnect
client.connect(BROKER, PORT, keepalive=60)
client.loop_forever() # blocks; handles reconnects. Stop with Ctrl+COluşturulan kod nasıl çalışır?
Her kod parçası aynı akışı izler: broker’a bağlantı açılır, bağlantı onaylanınca topic’inize abone olunur, bir mesaj yayınlanır ve program çalışmaya devam ederek gelen her şeyi ekrana yazar. Abone olma işlemini bağlantı handler’ı içinde yapmak (kütüphanede varsa) göründüğünden daha önemlidir — böylece abonelikler yeniden bağlantıdan sonra otomatik olarak geri yüklenir. Client ID’yi boş bırakırsanız her program çalışırken rastgele bir ID üretir; böylece iki kopya birbirini broker’dan asla düşürmez.
URL şemasını transport belirler. Düz TCP genellikle 1883, TLS ise 8883 port’unda çalışır; WebSocket listener’ları ise broker’a göre değişir — port ve yolun hazır ayardan doldurulmasının nedeni budur. Tüm kurallar için MQTT port’ları rehberine bakın.
Neden bu kütüphaneler?
- Python — paho-mqtt 2.x. Eclipse’in referans client’ı, on yılı aşkın süredir kararlı. 2. sürüm callback imzalarını değiştirdiği için eski eğitimler artık çalışmıyor; bu kod yeni
VERSION2API’sini hedefler. Ayrıntılar Python ile MQTT yazısında. - Node.js ve tarayıcı — MQTT.js v5. Her iki ortam için tek kütüphane;
connectAsyncvepublishAsyncgibi promise tabanlı metotlar sunar. Tarayıcıda yalnızca WebSocket üzerinden bağlanır; JavaScript ile MQTT ve WebSocket üzerinden MQTT yazılarını okuyun. - ESP32 / Arduino — PubSubClient. Küçük, sahada kendini kanıtlamış ve Kütüphane Yöneticisi’nde mevcut. MQTT 3.1.1’i TCP veya TLS üzerinden konuşur ve QoS 0 ile yayın yapar. ESP32 MQTT rehberi Wi-Fi yeniden bağlantılarını ve sertifikaları anlatıyor.
- Go — paho.mqtt.golang. En yaygın kullanılan Go client’ı; otomatik yeniden bağlanma ve WebSocket desteği yerleşik. MQTT 3.1.1’i uygular; MQTT 5 için
paho.golangkullanın. - Java — Eclipse Paho v3. Senkron
MqttClientörneği kısa tutar; üretim servisleri içinMqttAsyncClient’a veya Paho v5 client’ına geçin. - C# — MQTTnet v4. .NET’in fiilî standart MQTT kütüphanesi; tamamen asenkron ve MQTT 5 destekli. Kod, .NET 6+ üst düzey ifadelerini kullanır.
- Komut satırı — mosquitto_pub / mosquitto_sub. Kod yazmadan önce bir broker’ın çalıştığını kanıtlamanın en hızlı yolu. mosquitto_pub ve mosquitto_sub örneklerine bakın.
Dillere göre kısa notlar
TLS: Python, Node.js, Go, Java ve C# kodları broker sertifikasını işletim sisteminin güvenilir CA’larına göre doğrular; bu, herkese açık sertifikası olan broker’larda çalışır. ESP32’de örnek, bağlanabilmeniz için setInsecure() çağırır; cihazları sahaya göndermeden önce broker’ın kök CA’sını setCACert() ile yükleyin. Kendinden imzalı broker’larda CA dosyasının her dilde açıkça verilmesi gerekir.
MQTT 5: Python, MQTT.js, MQTTnet ve mosquitto CLI tek bir seçenekle protokol değiştirir. PubSubClient, paho.mqtt.golang ve Paho Java v3 ise MQTT 3.1.1’de kalır — her MQTT 5 broker’ı bunu hâlâ kabul eder.
Test: oluşturulan programı çalıştırın ve aynı topic’i online MQTT client üzerinden izleyin. Hiçbir şey gelmiyorsa broker test kontrol listesi port’ları, kimlik bilgilerini ve topic yazım hatalarını adım adım ele alır. Herkese açık bir broker’da topic’lerinizi herkesin okuyabileceğini unutmayın — gerçek verileri kimlik doğrulaması olan bir broker’da tutun.
MQTT kod oluşturucu hakkında sık sorulan sorular
Python için hangi MQTT kütüphanesini kullanmalıyım?
Eclipse Paho (paho-mqtt), en yaygın kullanılan Python MQTT client’ıdır. 2.x sürümü, client oluşturulurken bir callback API sürümü belirtilmesini gerektirir; oluşturulan kod hem MQTT 3.1.1 hem de MQTT 5 ile çalışan CallbackAPIVersion.VERSION2’yi kullanır.
Tarayıcı kodu neden yalnızca WebSocket ile çalışıyor?
Web sayfaları ham TCP soketleri açamaz; bu nedenle tarayıcıdaki MQTT client’ları MQTT’yi bir WebSocket bağlantısı üzerinden taşır. Broker’ınızın bir WebSocket listener’ı olmalı ve HTTPS ile sunulan sayfalar güvenli bir wss:// URL’si kullanmalıdır.
ESP32, WebSocket üzerinden MQTT kullanabilir mi?
En yaygın Arduino MQTT kütüphanesi olan PubSubClient ile hayır — yalnızca düz TCP ve TLS destekler. Bu nadiren bir kısıttır: ESP32 doğrudan TCP ve TLS soketleri açabilir ve bunlar zaten WebSocket’ten daha hafiftir.
Broker şifremi oluşturulan koda yazmak güvenli mi?
Kod tarayıcınızda oluşturulur ve hiçbir sunucuya gönderilmez. Yine de şifreleri sürüm kontrolüne commit etmeyin: ortam değişkenlerinden veya bir secrets dosyasından yükleyin ve tarayıcı JavaScript’inde asla yönetici kimlik bilgileri bulundurmayın.