Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

Senin, 13 September 2021

ESP8266 - @Telegram_Bot - Part 3 : Python Matplotlib Graph DHT11

 



Python sebagai bahasa pemrograman yang dikhususkan buat pecinta data science memiliki berbagai fasilitas dan module untuk visualisasi data. Saking banyaknya sampai tiap coder memiliki stylenya masing-masing tergantung yg disukainya. Namun yg paling umum dipakai adalah Matplotlib.


Matplotlib adalah library python yang cukup lengkap untuk membuat visualisasi statis, animasi, dan interaktif . Matplotlib membuat hal-hal mudah menjadi mudah dan hal-hal sulit menjadi mungkin. seperti :


Membuat

  • Kembangkan plot kualitas bagus hanya dengan beberapa baris kode
  • Gunakan figur interaktif yang dapat memperbesar, menggeser, memperbarui...


Sesuaikan

  • Kendalikan penuh gaya garis, properti font, properti sumbu...
  • Ekspor dan sematkan ke sejumlah format file dan lingkungan interaktif


Extended

  • Jelajahi fungsionalitas yang disesuaikan yang disediakan oleh paket pihak ketiga
  • Pelajari lebih lanjut tentang Matplotlib melalui banyak sumber belajar eksternal 

Tanpa berpanjang lebar lagi, saya akan lanjutkan pembahasan sebelumnya yaitu menulis data DHT11 - MQTT ke database SQLite ( disini ) , dan selanjutnya melalui matplotlib akan di ubah menjadi visualisasi grafis yang menarik. Script lengkapnya sebagai berikut :


import sqlite3
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from dateutil import parser
from matplotlib import style


def graph_data():
# Connect to database
sqlite_file = 'humitemp.db' #sesuaikan nama db
conn = sqlite3.connect(sqlite_file)
c = conn.cursor()
style.use('seaborn-bright')

c.execute('SELECT * FROM dht11 ORDER BY date DESC LIMIT 50')
data = c.fetchall()

temperature = []
humidity = []
timenow = []

for row in data:
temperature.append(row[0])
humidity.append(row[1])
timenow.append(parser.parse(row[2]))

dates = [mdates.date2num(t) for t in timenow]

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.set_title("Data Lingkungan Kamar")

# Configure x-ticks
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%d/%m %H:%M'))

# Plot temperature data on left Y axis
ax1.set_ylabel("Temperature [°C]")
ax1.plot_date(dates, temperature, '-', label="Temperature", color='r')

# Plot humidity data on right Y axis
ax2 = ax1.twinx()
ax2.set_ylabel("Humidity [% RH]")
ax2.plot(dates, humidity, '-', label="Humidity", color='b')

# Format the x-axis for dates (label formatting, rotation)
fig.autofmt_xdate(rotation=60)
fig.tight_layout()

# Show grids and legends
ax1.grid(True)
ax1.legend(loc='center left', framealpha=0.5)
ax2.legend(loc='center right', framealpha=0.5)

plt.show()
c.close()
conn.close()

if __name__ == '__main__':
graph_data()



Penjelasannya seperti berikut , modul python yg digunakan  :


import sqlite3
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from dateutil import parser
from matplotlib import style


Untuk koneksi ke database, pastikan data sudah tersedia  dari praktek sebelumnya dan saya menggunakan 50 data terakhir pada database.


def graph_data():
# Connect to database
sqlite_file = 'humitemp.db' #sesuaikan nama db
conn = sqlite3.connect(sqlite_file)
c = conn.cursor()
style.use('seaborn-bright')

c.execute('SELECT * FROM dht11 ORDER BY date DESC LIMIT 50')
data = c.fetchall()


Setelah itu data dari database saya buatkan list, kemudian saya masukkan satu persatu dan tambahkan Xaxis berupa data waktu. 


    temperature = []
humidity = []
timenow = []

for row in data:
temperature.append(row[0])
humidity.append(row[1])
timenow.append(parser.parse(row[2]))

dates = [mdates.date2num(t) for t in timenow]

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.set_title("Data Lingkungan Kamar")


Berikut ini plotingnya berdasarkan time series, dan saya tambahkan Yaxis kedua (twinx) agar grafiknya lebih simple.


    # Configure x-ticks
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%d/%m %H:%M'))

# Plot temperature data on left Y axis
ax1.set_ylabel("Temperature [°C]")
ax1.plot_date(dates, temperature, '-', label="Temperature", color='r')

# Plot humidity data on right Y axis
ax2 = ax1.twinx()
ax2.set_ylabel("Humidity [% RH]")
ax2.plot(dates, humidity, '-', label="Humidity", color='b')


Dan kemudian saya tampilkan grafiknya beserta legenda dan label-labelnya.


    # Format the x-axis for dates (label formatting, rotation)
fig.autofmt_xdate(rotation=60)
fig.tight_layout()

# Show grids and legends
ax1.grid(True)
ax1.legend(loc='center left', framealpha=0.5)
ax2.legend(loc='center right', framealpha=0.5)

plt.show()
c.close()
conn.close()



Hasilnya seperti berikut :



Pada tulisan berikutnya akan saya kasi tahu cara menggabungkan kesemuanya, sehingga bot telegram dapat menampilkan data berupa grafik secara real time.
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