autopct memungkinkan Anda untuk menampilkan nilai persen menggunakan pemformatan string Python. Misalnya, jika autopct='%.2f', maka untuk setiap irisan pai, string format adalah '%.2f' dan nilai persentase numerik untuk irisan itu pct, sehingga label irisan diatur ke string '%.2f'%pct.
import matplotlib.pyplot as plt plt.figure() values = [3, 12, 5, 8] labels = ['a', 'b', 'c', 'd'] plt.pie(values, labels=labels, autopct='%.2f') plt.show()hasil
Anda dapat melakukan hal-hal yang lebih mewah dengan menyediakan callable ke autopct. Untuk menampilkan nilai persen dan nilai asli, Anda bisa melakukan ini:
import matplotlib.pyplot as plt # make the pie circular by setting the aspect ratio to 1 plt.figure(figsize=plt.figaspect(1)) values = [3, 12, 5, 8] labels = ['a', 'b', 'c', 'd'] def make_autopct(values): def my_autopct(pct): total = sum(values) val = int(round(pct*total/100.0)) return '{p:.2f}% ({v:d})'.format(p=pct,v=val) return my_autopct plt.pie(values, labels=labels, autopct=make_autopct(values)) plt.show()Sekali lagi, untuk setiap irisan pie, matplotlib memasok nilai persen pct sebagai argumen, meskipun kali ini dikirim sebagai argumen ke fungsi my_autopct. Label irisan diatur ke my_autopct(pct).
Phyton adalah bahasa pemrograman yang memiliki bermacam-macam fungsi, dapat ditafsirkan dan berlevel tinggi. Diciptakan oleh Guido van Rossum dan pertama kali dirilis di tahun 1991, filosofi desain Python menekankan ke keterbacaan kode dengan penggunaan whitespace yang signifikan. Phyton membantu programer untuk menulis kode yang logis dan jelas untuk projek berskala kecil maupun besar.1
MQTT adalah sebuah protokol messaging IoT lightweight berbasis model publish/subscribe yang menyediakan servis messaging yang dapat diandalkan dan real-time untuk perangkat IoT dengan hanya menggunakan sedikit kode dan bandwith. MQTT cocok untuk perangkat dengan sumber hardware yang terbatas dan jaringan dengan bandwith yang terbatas pula. Karena itu, protokol MQTT banyak digunakan di IoT, internet HP, tenaga listrik, dan industri lainnya.
Dalam artikel ini, saya akan mengajar Anda cara menggunakan client paho-mqtt dan koneksinya, subscribe, messaging, dan fungsi lainnya antara client dan broker MQTT dalam projek Python.
Memulai Projek
Projek ini menggunakan Python 3.6 dengan tujuan perkembangan dan test. Anda dapat menggunakan command dibawah ini untuk mengecek versi Python.
➜ ~ python3 --version Python 3.6.7Pilih client MQTT
Paho Python Client menyediakan class client yang mendukung MQTT v3.1 dan v3.1.1 dalam Python 2.7 atau 3.x. Ia juga menyediakan fungsi pembantu untuk memudahkan publikasi pesan ke server MQTT.
Gunakan pip untuk mengunduh client Paho MQTT
Pip adalah software manajemen untuk paket Python. Software ini menyediakan fungsi find, download, install dan uninstall untuk paket Python.
pip3 install paho-mqttKegunaan Python MQTT
Koneksi ke MQTT broker
Dalam artikel ini, saya akan menggunakan MQTT broker publik gratis dari EMQX. Servis ini dibuat dengan berdasarkan platform cloud MQTT IoT. Kunci akses broker adalah sebagai berikut:
- Broker: broker.emqx.io
- TCP Port: 1883
- Websocket Port: 8083
Impor Paho MQTT Client
from paho.mqtt import client as mqtt_clientAtur parameter koneksi MQTT Broker
Atur address, port, dan topik koneksi MQTT Broker. Disaat yang sama, kita memanggil fungsi Phython random.randint untuk menghasilkan ID client MQTT secara acak.
Tulis fungsi koneksi MQTT
Tulis fungsi callback koneksi on_connect. Fungsi ini akan dipanggil setelah dikoneksikan dengan client dan kita dapat mengkonfirmasi apakah client telah berhasil dikoneksikan berdasarkan rc didalam fungsi ini. Biasanya, kami akan membuat client MQTT disaat yang sama dan client ini akan dikoneksikan ke broker.emqx.io.
def connect_mqtt(): def on_connect(client, userdata, flags, rc): if rc == 0: print("Connected to MQTT Broker!") else: print("Failed to connect, return code %d\n", rc) # Set Connecting Client ID client = mqtt_client.Client(client_id) client.username_pw_set(username, password) client.on_connect = on_connect client.connect(broker, port) return clientPublikasi pesan
Pertama, kita perlu mendefinisikan sebuah while loop. Dalam loop ini, kita perlu mengatur fungsi publish client MQTT untuk mengirim pesan ke topik /python/mqtt tiap detiknya.
def publish(client): msg_count = 0 while True: time.sleep(1) msg = f"messages: {msg_count}" result = client.publish(topic, msg) # result: [0, 1] status = result[0] if status == 0: print(f"Send `{msg}` to topic `{topic}`") else: print(f"Failed to send message to topic {topic}") msg_count += 1Subscribe ke pesan
Tulis fungsi callback pesan on_message. Fungsi ini akan dipanggil setelah client menerima pesan dari MQTT Broker. Dalam fungsi ini, kita perlu mencetak nama dari topik yang telah di-subscribe dan pesan yang diterima.
def subscribe(client: mqtt_client): def on_message(client, userdata, msg): print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic") client.subscribe(topic) client.on_message = on_messageKode Lengkapnya
Kode publikasi pesan
# python 3.6 import random import time from paho.mqtt import client as mqtt_client broker = 'broker.emqx.io' port = 1883 topic = "python/mqtt" # generate client ID with pub prefix randomly client_id = f'python-mqtt-{random.randint(0, 1000)}' # username = 'emqx' # password = 'public' def connect_mqtt(): def on_connect(client, userdata, flags, rc): if rc == 0: print("Connected to MQTT Broker!") else: print("Failed to connect, return code %d\n", rc) client = mqtt_client.Client(client_id) client.username_pw_set(username, password) client.on_connect = on_connect client.connect(broker, port) return client def publish(client): msg_count = 0 while True: time.sleep(1) msg = f"messages: {msg_count}" result = client.publish(topic, msg) # result: [0, 1] status = result[0] if status == 0: print(f"Send `{msg}` to topic `{topic}`") else: print(f"Failed to send message to topic {topic}") msg_count += 1 def run(): client = connect_mqtt() client.loop_start() publish(client) if __name__ == '__main__': run()Kode subscribe pesan
# python3.6 import random from paho.mqtt import client as mqtt_client broker = 'broker.emqx.io' port = 1883 topic = "python/mqtt" # generate client ID with pub prefix randomly client_id = f'python-mqtt-{random.randint(0, 100)}' # username = 'emqx' # password = 'public' def connect_mqtt() -> mqtt_client: def on_connect(client, userdata, flags, rc): if rc == 0: print("Connected to MQTT Broker!") else: print("Failed to connect, return code %d\n", rc) client = mqtt_client.Client(client_id) client.username_pw_set(username, password) client.on_connect = on_connect client.connect(broker, port) return client def subscribe(client: mqtt_client): def on_message(client, userdata, msg): print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic") client.subscribe(topic) client.on_message = on_message def run(): client = connect_mqtt() subscribe(client) client.loop_forever() if __name__ == '__main__': run()Tes
Publikasi pesan
Mulai kode publikasi pesan. Disini kita dapat melihat bahwa client telah berhasil terkoneksi dan pesan telah dikirim.
python3 pub.py
Subscribe ke pesan
Mulai kode subscribe pesan. Disini kita dapat melihat bahwa client telah berhasil terkoneksi dan pesan yang dipublikasi telah diterima.
python3 sub.py
Rangkuman
Sejauh ini, kita telah mempelajari cara mengkoneksikan client paho-mqtt ke MQTT broker publik gratis, mengimplimentasi koneksi, mempublikasi pesan dan subscribe pesan antara test client dan MQTT broker.
Python berbeda dari bahasa pemrograman level tinggi lainnya seperti C++ atau Java. Python lebih cocok untuk mengimplimentasikan logika bisnis dari segi perangkat. Penggunaan Python dapat mempermudah kode yang dipakai dan mengurangi biaya interaksi dengan perangkat. Kami percaya bahwa Python akan memiliki aplikasi yang lebih luas dalam bidang IoT.
Di artikel selanjutnya, kami akan menulis lebih banyak artikel tentang pengembangan IoT dan Python. Jangan kemana-mana ya!