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.
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()
0 komentar:
Posting Komentar