Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

Jumat, 03 September 2021

Python ESP8266 - Part 6 - MQTT DHT11 Ke Smartphone

 


Hihihi...tulisan ini bukan buat jual-beli kaset jadul ya kawan pembaca, ini cuman selingan agar tidak stress digigit ular python dengan scriptnya yang semakin memusingkan. Namun jika diambil untung ruginya ya banyak untungnya karena jika anda ingin bermain I/O menggunakan raspberry pi maka mau tidak mau harus memahami bahasa ULO. Jadi pada pembahasan kali ini kita lanjutkan MQTT pada tulisan sebelumnya, dan saya akan menjelaskan bagaimana caranya mengirim data penari ular yg kepanasan, dengan sensor DHT11 menuju smartphone. Tentunya dengan menggunakan protocol MQTT dan broker kesayangan HIVEMQ.


boot.py

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

ssid = 'nama wifi' #sesuaikan dengan wifi kamu
password = 'password'
#broker dan topik yg digunakan
mqtt_server = 'broker.hivemq.com'
client_id = ubinascii.hexlify(machine.unique_id())
topic_suhu = b'/aisi555/suhu'
topic_humi = b'/aisi555/humi'
topic_ledesp = b'/aisi555/ledesp'
topic_ledsck = b'/aisi555/ledsck'
#delay pembacaan
last_message = 0
message_interval = 10

#PIN GPIO sensor dan LED
sensor = dht.DHT11(Pin(13)) #sesuaikan pin DHT
ledESP = Pin(2, Pin.OUT)
ledSCK = Pin(14, Pin.OUT)
ledESP.value(1) #matikan dulu active low

#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]))


Script diatas merupakan script untuk inisialisasi awal dari MQTT , DHT11 dan pin LED ESP / SCK. Sedangkan untuk script utamanya seperti berikut :


main.py

def sub_cb(topic, msg):
  print('Pesan Diterima, Topik : {0} , Pesan :{1}'.format(topic, msg))
  if (topic == topic_ledesp and msg == b'on'):
      ledESP.value(0)
  if (topic == topic_ledesp and msg == b'off'):
      ledESP.value(1)
  if (topic == topic_ledsck and msg == b'on'):
      ledSCK.value(1)
  if (topic == topic_ledsck and msg == b'off'):
      ledSCK.value(0)

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_ledesp)
  client.subscribe(topic_ledsck)
  print('Terhubung ke  MQTT broker %s' % mqtt_server)
  return client

def read_sensor():
  try:
    sensor.measure()
    temp = sensor.temperature()
    hum = sensor.humidity()
    print ('suhu : {0:3.1f}, humi: {1:3.1f}'.format(temp, hum))
    return(temp,hum)
  except OSError as e:
    print ('dht error')  
    return(0,0)

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:
      t,h = read_sensor()
      client.publish(topic_suhu, str(t))
      client.publish(topic_humi, str(h))
      last_message = time.time()
  except OSError as e:
    restart_and_reconnect()


Penjelasan :

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_ledesp)
  client.subscribe(topic_ledsck)
  print('Terhubung ke  MQTT broker %s' % mqtt_server)
  return client

Function diatas untuk melakukan koneksi ke broker MQTT dan melakukan Subscribe ke topiknya.

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

Ini merupakan metode untuk error handling saat koneksi ke server / broker MQTT gagal.


def read_sensor():
  try:
    sensor.measure()
    temp = sensor.temperature()
    hum = sensor.humidity()
    print ('suhu : {0:3.1f}, humi: {1:3.1f}'.format(temp, hum))
    return(temp,hum)
  except OSError as e:
    print ('dht error')  
    return(0,0)

Script diatas untuk membaca sensor dan memberikan nilai suhu dan kelembaban kepada yg memanggilnya


def sub_cb(topic, msg):
  print('Pesan Diterima, Topik : {0} , Pesan :{1}'.format(topic, msg))
  if (topic == topic_ledesp and msg == b'on'):
      ledESP.value(0)
  if (topic == topic_ledesp and msg == b'off'):
      ledESP.value(1)
  if (topic == topic_ledsck and msg == b'on'):
      ledSCK.value(1)
  if (topic == topic_ledsck and msg == b'off'):
      ledSCK.value(0)

Function ini merupakan callback, dimana akan dipanggil saat ada pesan yg masuk tentunya dari broker MQTT. Juga dilakukan proses filtering pesan yg masuk dan kemudian melakukan action kepada LED yang ingin dinyalakan atau dimatikan.


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:
      t,h = read_sensor()
      client.publish(topic_suhu, str(t))
      client.publish(topic_humi, str(h))
      last_message = time.time()
  except OSError as e:
    restart_and_reconnect()

Fungsi script utama diatas adalah melakukan looping dan menunggu sampai jeda timer habis lalu mengirimkan hasil pembacaan DHT11.  Hasilnya pada Smartphone dengan aplikasi IOT MQTT Panel seperti berikut ini :











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 (14) antares (11) arduino (28) 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 (76) 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 (2) 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