Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

Jumat, 03 September 2021

Pyhton ESP8266 - Part 5 - Komunikasi MQTT Pada MicroPython

 



Kenapa serem sih ? Aneh ya  ? Saya gambarkan pembahasan kali ini agak jenaka, ular digigit nyamuk sesuai dengan Python = Ular , MQTT (Mosquitto orang gampang menyebutnya) = Nyamuk. Sebenarnya untuk python dan mqtt server di raspberry pi, sudah pernah saya bahas disini, begitu juga penggunaan protokol Pub Sub pada python melalui library/package paho-mqtt disini. Jadi sebenarnya apa itu protokol MQTT ? Saya cuplik gambar dan penjelasan  dibawah (yg asli lebih lengkap disini).

Protokol MQTT adalah standar de-facto untuk pesan IoT. Distandarisasi oleh OASIS dan ISO, protokol publish/subscribe MQTT menyediakan cara yang terukur dan andal untuk menghubungkan perangkat melalui Internet. Saat ini, MQTT digunakan oleh banyak perusahaan untuk menghubungkan jutaan perangkat ke Internet.



Klien MQTT memublikasikan pesan ke broker MQTT dan klien MQTT lainnya berlangganan pesan yang ingin mereka terima. Implementasi klien MQTT biasanya memerlukan footprint minimal sehingga sangat cocok untuk diterapkan pada perangkat kecil yang dibatasi dan sangat efisien dalam kebutuhan bandwidth mereka.

Jadi sesuai gambar diatas, nantinya ESP8266 dan sensor yg terhubung ke GPIO nya akan melakukan publish ke MQTT broker yang saya pilihkan HIVEMQ yang merupakan broker MQTT gratis dan paling sering dipakai testing atau belajar protokol ini. Namun karena Micropython pada ESP8266 tidak menyediakan library / package paho-mqtt maka sudah ada yg membikinkan script python nya untuk mengolah MQTT secara sederhana, bisa diunduh di :


https://raw.githubusercontent.com/RuiSantosdotme/ESP-MicroPython/master/code/MQTT/umqttsimple.py


Namun sebelumnya saya akan menjelaskan bagaimana cara membuat ESP8266 dapat menjalankan script micropython secara stand alone tanpa membutuhkan IDE  atau interpretter lagi. Nah untuk itu langkah pertama adalah menggunakan IDE python Thonny.org untuk menyimpan file /script python pada device nya langsung, seperti yg saya lakukan terhadap file umqttsimple.py diatas.



Selanjutnya ada  2 file yg penting yaitu boot.py sebagai script paling awal yg di load lalu kemudian me-RUN main.py. Script boot.py umumnya berisikan package/library serta inisialisasi pin dan sensor sedangkan main.py berisikan script yg dieksekusi secara looping. Untuk praktek kali ini boot.py saya pilihkan sebagai berikut :


import time
from umqttsimple import MQTTClient
import ubinascii
import machine
import micropython
import network
import esp
esp.osdebug(None)
import gc
gc.collect()

ssid = 'nama wifi' #sesuaikan dengan wifi kamu
password = 'paswordku'
mqtt_server = 'broker.hivemq.com'
#berikut server dan topik yg digunakan
client_id = ubinascii.hexlify(machine.unique_id())
topic_sub = b'/aisi555/testsub'
topi_pub = b'/aisi555/testpub'

last_message = 0
message_interval = 5 # jarak jeda kirim pesan
counter = 0

#koneksikan wifi
station = network.WLAN(network.STA_IF)

station.active(True)
station.connect(ssid, password)

while station.isconnected() == False:
  pass

print('Koneksi Wifi Siap')
ip=station.ifconfig()
print('IP : {}'.format(ip[0]))


Sedangkan untuk main.py kali ini akan saya pilihkan script untuk mengirim PUB  dan menunggu SUB  broker saja, dan kemudian dengan aplikasi MQTT klien pada pc/desktop maupun smartphone dapat saling kirim terima pesan. Simpan semua file pada device lalu tekan tombol reset pada modul ESP8266.


def sub_cb(topic, msg):
  print('Pesan Diterima, Topik : {0} , Pesan :{1}'.format(topic, msg))

def connect_and_subscribe():
  global client_id, mqtt_server, topic_sub
  client = MQTTClient(client_id, mqtt_server)
  client.set_callback(sub_cb)
  client.connect()
  client.subscribe(topic_sub)
  print('Terhubung ke  MQTT broker %s, subscribe ke topik %s ' % (mqtt_server, topic_sub))
  return client

def restart_and_reconnect():
  print('Gagal Terhubung MQTT broker. Reconnecting...')
  time.sleep(10)
  machine.reset()

try:
  client = connect_and_subscribe()
except OSError as e:
  restart_and_reconnect()

while True:
  try:
    client.check_msg()
    if (time.time() - last_message) > message_interval:
      msg = b'Hello nomer ke #%d' % counter
      client.publish(topic_pub, msg)
      last_message = time.time()
      counter += 1
  except OSError as e:
    restart_and_reconnect()



Hasil proses PUB dari ESP8266 micropython akan mengirimkan nomer counter tiap 10 detik seperti gambar hasil capture pada MQTT FX.


 



Untuk proses SUB pada topik /aisi555/testsub , hasilnya seperti ini :





Pada bagian selanjutnya kita akan mencoba mengirimkan pembacaan DHT11 dan mengontrol LED pada aplikasi smartphone IOTMQTTPANEL , jadi untuk sedikit memahaminya dapat dibaca dulu pembahasan sebelumnya disini : https://www.aisi555.com/2021/08/wemos-esp-8266-part-5-mqtt-ke-aplikasi.html

Share:

0 komentar:

Posting Komentar

Kontak Penulis



12179018.png (60×60)
+628155737755

Mail : ahocool@gmail.com

Site View

Categories

555 (8) 7 segmen (3) adc (4) amplifier (2) analog (19) android (12) antares (11) arduino (27) artikel (11) attiny (3) attiny2313 (19) audio (5) baterai (5) blog (1) bluetooth (1) chatgpt (2) cmos (2) crypto (2) dasar (46) digital (11) dimmer (5) display (3) esp8266 (26) euro2020 (13) gcc (1) gsm (1) iklan (1) infrared (2) Input Output (3) iot (74) jam (7) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (17) komputer (3) komunikasi (1) kontrol (8) lain-lain (8) lcd (2) led (14) led matrix (6) line tracer (1) lm35 (1) lora (11) lorawan (2) MATV (1) memory (1) metal detector (4) microcontroller (70) micropython (6) mikrokontroler (1) mikrokontroller (14) mikrotik (5) modbus (9) mqtt (3) ninmedia (5) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (88) pcb (2) power (1) praktek (2) project (33) proyek (1) python (8) radio (28) raspberry pi (9) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (2) sharing (3) signage (1) sinyal (1) sms (6) software (18) solar (1) solusi (1) tachometer (2) technology (1) teknologi (2) telegram (2) telepon (9) televisi (167) television (28) telkomiot (5) transistor (2) troubleshoot (3) tulisan (94) tutorial (108) tv digital (6) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3) yolo (7)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika