Semua Akan Digital Pada Akhirnya... Dari Audio, Video, TV, Kontrol, Keuangan, Kesehatan dan Sebagainya. Blog Ini Ditujukan Buat Kamu Yang Ingin Belajar Dasar Digital Dan Yang selalu Bertanya, Kenapa Bisa Begini Dan Harus Begitu ?

  • IC Timer 555 yang Multifungsi

    IC timer 555 adalah sirkuit terpadu (chip) yang digunakan dalam berbagai pembangkit timer, pulsa dan aplikasi osilator. Komponen ini digunakan secara luas, berkat kemudahan dalam penggunaan, harga rendah dan stabilitas yang baik

  • Kontrol Perangkat Rumah Dari Internet

    Internet Of Things sudah menjadi istilah yang semakin dikenal orang. Mau tahu bagaimana konsep, cara pembuatan dan pemanfaatannya ?

  • Bermain DOT Matrix - LOVEHURT

    Project Sederhana dengan Dot Matrix dan Attiny2313. Bisa menjadi hadiah buat teman atau pacarmu yang ulang tahun dengan tulisan dan animasi yang dapat dibuat sendiri.

  • JAM DIGITAL 6 DIGIT TANPA MICRO FULL CMOS

    Jika anda pencinta IC TTL datau CMOS maka project jam digital ini akan menunjukkan bahwa tidak ada salahnya balik kembali ke dasar elektronika digital , sebab semuanya BISA dibuat dengan teknologi jadul

  • Node Red - Kontrol Industri 4.0

    Teknologi kontrol sudah melampaui ekspektasi semua orang dan dengan kemajuan dunia elektronika, kini semakin leluasa berkreasi melalui Node Red

Tampilkan postingan dengan label micropython. Tampilkan semua postingan
Tampilkan postingan dengan label micropython. Tampilkan semua postingan

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:

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:

Kamis, 02 September 2021

Python ESP8266 - Part4 - Web Server DHT11 Micropython

 



Webserver pada dasarnya adalah komunikasi TCP antara server dengan client yang formatnya telah disepakati secara universal melalui konsorsium WWW. Dalam sekala kecil di dunia microcontroller sekelas ESP8266 maka kesepakatannya itu adalah port server yg digunakan adalah 80, yang merupakan  standar akses ke webserver di manapun. Sedangkan standar keduanya adalah http dan html yang merupakan protokol dan standar text yg dikirim terima dan kemudian diterjemahkan oleh browser yg kalian gunakan menjadi tampilan yang menarik. jadi pada dasarnya hanya melanjutkan pembahasan sebelumnya pada bagian komunikasi TCP.


Contoh script html paling sederhana adalah sebagai berikut :


<!DOCTYPE html>
<html>
<body>

<h1>HALO APA KABAR</h1>
<p>Saya menulis html sederhana</p>

</body>
</html>


Kalau text atau scipt diatas kamu tulis di PC lewat notepad kemudian kamu save dan dinamakan sebagai semisal 'coba.html', maka ketika dibuka pada browser akan menjadi tampil seperti berikut:



Tugas kita selanjutnya adalah menempatkan text html tadi menjadi request dan respon http pada port 80 dan diakses melalui protocol TCP pada ESP8266. Bagaimana caranya ? Begini script yg kamu tuliskan pada IDE python Thonny.org kamu.


import socket
import network

def laman_web():
    
    html= " <!DOCTYPE html><html><body><h1>HALO APA KABAR</h1><p>Saya menulis html sederhana</p></body></html>"
    return html

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(5)

while True:
  conn, addr = s.accept()
  print('koneksi dari %s' % str(addr))
  response = laman_web()
  conn.send('HTTP/1.1 200 OK\n')
  conn.send('Content-Type: text/html\n')
  conn.send('Connection: close\n\n')
  conn.sendall(response)
  conn.close()


Dan hasilnya ketika saya akses dari web browser HP saya seperti ini.





Jadi ada kesepakatan dari format text response yg diberikan oleh server yang kemudian diterjemahkan oleh browser. Begitu juga jika ingin menambahkan atau mempercantik tampilan maka bisa mempelajari lebih lanjut ilmu html dan juga script CSS yg memperindah tampilan pada web, seperti script berikut ini yang menambahkan tombol untuk menyalakan dan mematikan LED pada ESP8266.


import socket
import network
from machine import Pin

led = Pin(2, Pin.OUT)
led.value(1) # active low,matikan dulu 

def laman_web():
    if led.value() == 0:
        lednya="ON"
    else:
        lednya="OFF"
    
    html = """<html><head> <title>TOMBOL ULO</title> <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="icon" href="data:,"> <style>html{font-family: Helvetica; display:inline-block; margin: 0px auto; text-align: center;}
    h1{color: #0F3376; padding: 2vh;}p{font-size: 1.5rem;}.button{display: inline-block; background-color: #e7bd3b; border: none; 
    border-radius: 4px; color: white; padding: 16px 40px; text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}
    .button2{background-color: #4286f4;}</style></head><body> <h1>ESP ULO LED</h1> 
    <p>LED : <strong>""" + lednya + """</strong></p><p><a href="/?ledon"><button class="button">ON</button></a></p>
    <p><a href="/?ledoff"><button class="button button2">OFF</button></a></p></body></html>"""
    return html

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(5)

while True:
  conn, addr = s.accept()
  print('koneksi dari %s' % str(addr))
  request = conn.recv(1024).decode('UTF-8')
  print('Isi request = %s' % request)
  if request.find('ledon') == 6:
    print('LED ON')
    led.value(0)
  if request.find('ledoff') == 6:
    print('LED OFF')
    led.value(1)
  response = laman_web()
  conn.send('HTTP/1.1 200 OK\n')
  conn.send('Content-Type: text/html\n')
  conn.send('Connection: close\n\n')
  conn.sendall(response)
  conn.close()


Hasil pada browser sebagai berikut :




Penjelasan :


import socket
import network
from machine import Pin

led = Pin(2, Pin.OUT)
led.value(1) # active low,matikan dulu 

Merupakan script inisialisasi dari package yg dipakai dan pin led dari ESP8266, untuk koneksi wifinya kenapa gak ditulis bisa dibaca penjelasannya pada part 3.


def laman_web():
    if led.value() == 0:
        lednya="ON"
    else:
        lednya="OFF"
    
    html = """<html><head> <title>TOMBOL ULO</title> <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="icon" href="data:,"> <style>html{font-family: Helvetica; display:inline-block; margin: 0px auto; text-align: center;}
    h1{color: #0F3376; padding: 2vh;}p{font-size: 1.5rem;}.button{display: inline-block; background-color: #e7bd3b; border: none; 
    border-radius: 4px; color: white; padding: 16px 40px; text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}
    .button2{background-color: #4286f4;}</style></head><body> <h1>ESP ULO LED</h1> 
    <p>LED : <strong>""" + lednya + """</strong></p><p><a href="/?ledon"><button class="button">ON</button></a></p>
    <p><a href="/?ledoff"><button class="button button2">OFF</button></a></p></body></html>"""
    return html


Script function laman_web( ) diatas utamanya berisikan CSS dari script html yang menampilkan tombol dan status LED dengan style yang lebih menarik. Tombol diberikan 2 buah a href / link yang nantinya akan memberikan request GET berupa "/?ledon" dan "/?ledoff" .


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(5)

Koneksi socket di bind ke port 80 dan kemudian melakukan listen menunggu ada request dari client.


while True:
  conn, addr = s.accept()
  print('koneksi dari %s' % str(addr))
  request = conn.recv(1024).decode('UTF-8')
  print('Isi request = %s' % request)
  if request.find('ledon') == 6:
    print('LED ON')
    led.value(0)
  if request.find('ledoff') == 6:
    print('LED OFF')
    led.value(1)
  response = laman_web()
  conn.send('HTTP/1.1 200 OK\n')
  conn.send('Content-Type: text/html\n')
  conn.send('Connection: close\n\n')
  conn.sendall(response)
  conn.close()


Membaca Request dari browser / client dan kemudian mengecek melalui string.find untuk menentukan apakah LED mau di ON atau di OFF kan. Pada bagian akhir diberikan response standar closing socket http dan html 


Untuk DHT11 tinggal mengikuti saja pola CSS dan request nya serta praktek DHT11 pada part 2, selengkapnya script seperti berikut :


import socket
import network
from machine import Pin
import dht

sensor = dht.DHT11(Pin(13))

def read_sensor():
  global temp, hum
  temp = hum = 0
  try:
    sensor.measure()
    temp = sensor.temperature()
    hum = sensor.humidity()
    if (isinstance(temp, float) and isinstance(hum, float)) or (isinstance(temp, int) and isinstance(hum, int)):
      msg = (b'{0:3.1f},{1:3.1f}'.format(temp, hum))

      # uncomment for Fahrenheit
      #temp = temp * (9/5) + 32.0

      hum = round(hum, 2)
      return(msg)
    else:
      return('Invalid sensor readings.')
  except OSError as e:
    return('Failed to read sensor.')

def web_page():
  html = """<!DOCTYPE HTML><html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
  <style>
    html {
     font-family: Arial;
     display: inline-block;
     margin: 0px auto;
     text-align: center;
    }
    h2 { font-size: 3.0rem; }
    p { font-size: 3.0rem; }
    .units { font-size: 1.2rem; }
    .dht-labels{
      font-size: 1.5rem;
      vertical-align:middle;
      padding-bottom: 15px;
    }
  </style>
</head>
<body>
  <h2>ESP DHT Server</h2>
  <p>
    <i class="fas fa-thermometer-half" style="color:#059e8a;"></i> 
    <span class="dht-labels">Temperature</span> 
    <span>"""+str(temp)+"""</span>
    <sup class="units">&deg;C</sup>
  </p>
  <p>
    <i class="fas fa-tint" style="color:#00add6;"></i> 
    <span class="dht-labels">Humidity</span>
    <span>"""+str(hum)+"""</span>
    <sup class="units">%</sup>
  </p>
</body>
</html>"""
  return html

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(5)

while True:
  conn, addr = s.accept()
  print('Got a connection from %s' % str(addr))
  request = conn.recv(1024)
  print('Content = %s' % str(request))
  sensor_readings = read_sensor()
  print(sensor_readings)
  response = web_page()
  conn.send('HTTP/1.1 200 OK\n')
  conn.send('Content-Type: text/html\n')
  conn.send('Connection: close\n\n')
  conn.sendall(response)
  conn.close()





Tampilannya keren dengan tombol icon yg diambil dari internet langsung. SELAMAT MENCOBA !

Share:

Python ESP8266 - Part3 - Kirim Terima TCP Socket di MicroPython

 



Untuk praktek kali ini diperlukan aplikasi TCP server yg bisa menggunakan pc maupun smartphone android yang pernah saya bahas sebelumnya dalam pembahasan dasar wemos (klik disini). Kali ini akan saya singkat saja karena pada dasarnya untuk pemahamannya tidak jauh berbeda, hanya cukup memahami proses pada gambar berikut ini :




Penjelasan dari REPL micropython diatas sebagai berikut :


1 . Inisialisasi package socket pada micropython

>>> import socket  

>>> s=socket.socket()


2. IP dan port dari socket yg akan dikirimi  data,  alamatnya berupa tupple berisi 5 anggota


>>> alamat=socket.getaddrinfo('192.168.1.65',4000)

>>> print(alamat)

[(2, 1, 0, '', ('192.168.1.65', 4000))]


3. Hanya dibutuhkan   sampai isi tupple [-1] untuk koneksi socket


>>> s.connect(alamat[0][-1])


4. Kirim data teks ke lawan 


>>> sock.send('halo bos..apa kabar ?')

>>> s.send('halo bos..apa kabar ?')
21

>>> s.send('\n')
1

>>> s.send('sudah makan siang apa belum ?')
29

5. Jangan lupa menutup socket kalau sudah selesai 


>>> s.close()


6. Hasilnya pada aplikasi tcp terminal di smartphone saya seperti berikut ini : 





Pasti anda bertanya ? Kok langsung bisa kirim data padahal wifinya belum tersambung ? Ini dikarenakan ESP8266 saya sudah pernah melakukan sambungan dan sukses terhubung dengan router wifi dirumah. Lalu kalau belum bagaimana caranya ? Begini caranya jika ingin melakukan hubungan antara ESP8266 dengan access point atau wifi baru.





Script diatas akan melakukan scan terhadap wifi disektar ESP8266 dan akan menghasilkan tupple / list berupa data hasil scan, sehingga dengan perintah for diambil bagian pertama saja dari list ( net[0] ) untuk menampilkan nama hotspot hasil scan.

 
Sedangkan untuk konek ke wifinya seperti berikut :





Jadi sekali saja perlu dijalankan perintah atau script diatas, maka otomastis ESP8266 meningat koneksi terakhirnya.


Bagaimana kalau ESP8266 ingin menjadi servernya, dan siap dikirimi perintah untuk menghidupkan atau mematikan  LED ? Kalau yang seperti ini kita butuhkan python IDE Thonny.org, seperti yg saya gunakan digambar diatas biar lebih mudah mengetiknya.



import network
import socket
import time
from machine import Pin

wlan = network.WLAN(network.STA_IF)

conf=wlan.ifconfig()
print( 'IP : {}'.format(conf[0]))

led = Pin(2, Pin.OUT)
led.value(1) # active Low, matikan dulu

s = socket.socket()
s.bind(('', 8000))
s.listen(5)

while True:
  conn, addr = s.accept()
  print('Got a connection from %s' % str(addr))
  request = conn.recv(10).decode('UTF-8')
  print('Content = %s' % request)
  if request == 'ledon':
    print('LED ON')
    led.value(0)
    conn.send('LED telah dinyalakan\n')
    time.sleep(1)
  if request == 'ledoff':
    print('LED OFF')
    led.value(1)
    conn.send('LED telah dimatikan\n')
    time.sleep(1)
  conn.close()




Penjelasan :


  • Esp8266 micropython sebagai server, dan aplikasi smartphone TCP terminal sebagai client
  • Client akan mengirimkan text dan kemudian sesuai prinsip TCP / IP maka akan koneksi segera di close oleh server setelah selesai menerima data. Jadi butuh proses koneksi ulang jika mengirim perintah baru.
  • Jika ada data yg dikirim atau istilah TCP nya request, maka data yg masuk akan di bandingkan sesuai kondisi ledon atau ledoff



Share:

Rabu, 01 September 2021

Python ESP8266 - Part 2 - Membaca DHT11 Dengan MicroPython

 


Sensor sejuta umat yang merupakan penggerak data IOT paling murah meriah yaitu DHT 11, ternyata oleh opreker micropython untuk esp8266, sudah tersedia dan siap digunakan, ini dibuktikan jika ditekan TAB atau diketik help(dht), maka tersedia beberapa text pada interpreter micropython / REPL.



Penjelasan scrypt python dari cara pembacaan DHT 11 diatas adalah :


  • import dht   : Memanggil package sensor suhu kelembaban dht
  • from machine import Pin :  Inisialisasi package dari GPIO esp8266
  • sensor = dht11(pin(13))   : Pin dht 11 saya letakkan di pin GPIO 13
  • sensor.measure()   : Ambil data suhu kelembaban
  • sensor.temperature  : Tulis data suhu
  • sensor.humidity  : Tulis data kelembaban


Sedangkan sambungan ke wemosnya seperti ini (sesuaikan port GPIO) :




Lalu jika ingin melakukan pembacaan DHT 11 secara berkala, maka tambahkan perintah while sebagai loop nya. Sebaiknya lakukan penulisan script di IDE python seperti Thonny.org.





Script lengkapnya seperti berikut ini :



from machine import Pin

from time import sleep

import dht 


sensor = dht.DHT11(Pin(13))


while True:

  try:

    sleep(2)

    sensor.measure()

    temp = sensor.temperature()

    hum = sensor.humidity()

    print('Suhu: %3.1f C' %temp)

    print('Kelembaban: %3.1f %%' %hum)

  except OSError as e:

    print('Gagal Membaca Sensor.')




Jangan lupa sebelumnya untuk membaca cara melakukan flashing modul Wemos / node mcu atau ESP8266 lainnya, di link ini : https://www.aisi555.com/2021/09/wemos-esp-8266-merubah-berbasis.html

Share:

Python ESP8266 - Part 1 - Merubah Jadi Berbasis MicroPython

 



Bahasa coding yang paling dianggap  perlu dikuasai oleh para coder jaman now adalah bahasa "Uler" ehh python, dan beberapa kali dalam tulisan pada blog ini sudah pernah membahas python sebagai jembatan antara dunia mikrokontroler 8 bit dengan layanan komputasi tingkat tinggi semacam database, yg bisa dibaca pada tulisan saya: https://www.aisi555.com/2019/10/iot-menyimpan-data-sensor-lewat-nbiot.html . Jadi si microcontroller yg dapat secara cepat mengolah data sensor ini ternyata memiliki batasan ketika berhubungan dengan komputasi yg levelnya lebih advance. Lalu pertanyaannya apakah python dapat langsung dimasukkan ke miicrocontroller ?

Ternyata jawabanya BISA lho ! Masih teringat saat saya menggunakan interpretter pyhton pada Raspberry PI untuk mengakses pin I/O untuk tombol dan bermain layar TV, lumayan simple dan " to the point " apalagi dengan banyaknya library/package siap pakai ( bisa dibaca disini ) . Nah Raspi merupakan microcontroller berbasis ARM dan begitu juga ESP8266. Jadi oleh beberapa orang yg cukup rajin membuat github, maka dibuatlah sebuah firmware yang dapat membuat ESP8266 atau modul wemos kamu menjadi sebuah microcontroller berbasis python.



Berikut langkah-langkah menjadikan wemos D1 / Esp8266 jenis apapun menjadi micropython:


1. Unduh tools flashing ESP8266 dan Firmware Micropython
2. Lakukan flashing firmware seperti contoh dibawah, sesuaikan COM yg kamu pakai


esptool.exe --port COMX --baud 115200 write_flash -fm dio -fs 4MB 0x0000 micropython_esp.bin

*) Ganti esptool.exe dengan esptool.py jika menggunakan script python di PC kamu



3. Testing dengan serial terminal/COM baudrate 115200, dan tekan enter sampai muncul console seperti pada gambar berikut, ketikkan program python sederhana.




Lalu bagaimana berkreasi lebih lanjut ? Jika kamu tekan TAB maka akan muncul package standar pada micropython yg diinstall pada ESP8266 kamu. Paling dasar adalah package machine seperti gambar berikut:




Untuk menghidupkan led pada ESP (GPIO2) ketikkan perintah berikut :


from machine import Pin
import time
led = Pin(2, Pin.OUT)

while True:
    led.value(1)
    time.sleep(0.5)
    led.value(0)
    time.sleep(0.5)   


Tapi karena keterbatasan indenation / pengetikan pada console, maka perlu sebuah IDE python yg bisa melakukan coding terhadap micropython, saya pilihkan yg paling mudah yaitu  Thonny .


Setting options hardware micropython dan COM portnya


Dan script kalian jadi tidak berantakan lagi seperti contoh dibawah ini untuk melakukan blink led pada ESP8266.



Catatan: jika script kamu akan kalian simpan / save, maka akan diminta menyimpan di perangkat micropython atau pada PC kamu. Untuk praktek kali ini disimpannya di PC aja dulu ya... SELAMAT MENCOBA

Share:

Kontak Penulis



12179018.png (60×60)
+628155737755

HP: 081331339072
Mail : ahocool@gmail.com

Site View

Categories

555 (8) 7 segmen (3) adc (4) amplifier (2) analog (15) android (12) antares (3) arduino (21) artikel (11) attiny (3) attiny2313 (19) blog (1) bluetooth (1) cmos (2) crypto (2) dasar (45) digital (1) display (3) esp8266 (25) euro2020 (13) gcc (1) iklan (1) infrared (2) Input Output (3) iot (44) jam (7) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (16) komputer (3) komunikasi (1) kontrol (7) lain-lain (8) lcd (2) led (14) led matrix (6) line tracer (1) lm35 (1) memory (1) metal detector (4) microcontroller (70) micropython (6) mikrokontroller (12) mikrotik (5) mqtt (1) ninmedia (3) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (78) pcb (2) power (1) praktek (2) project (33) proyek (1) python (3) radio (15) raspberry pi (4) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (1) 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 (145) television (28) transistor (2) troubleshoot (3) tulisan (83) tutorial (80) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika