Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

  • 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

  • Ayo Migrasi TV Digital

    Kami bantu anda untuk memahami lebih jelas mengenai migrasi tv digital, apa sebabnya dan bagaimana efek terhadap kehidupan. Jasa teknisi juga tersedia dan siap membantu instalasi - setting perangkat - pengaturan antena dan distribusi televisi digital ke kamar kos / hotel

  • 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 iot. Tampilkan semua postingan
Tampilkan postingan dengan label iot. Tampilkan semua postingan

Sabtu, 23 Mei 2020

[Praktek Mudah Banget] Bermain dengan alat GPS receiver jadul - Part 1



Masih dalam rangka kegatelan tangan mengoprek sesuatu yang berhubungan GeoPy dan pengolahan data lokasi, kali ini dalam 2 seri tulisan akan saya bahas mengenai Hardware GPS receiver yg umum ada pasaran elektronika di olshop. Ternyata masa lebaran ini agak beresiko kalau belanja dan kirim barang, jadi saya terpaksa kembali ke 15 tahun yang lalu ketika saya bekerja di salah satu vendor perangkat telekomunukasi CDMA. Jadi saat itu salah satu cara membedakan BTS CDMA dengan GSM adalah mencari antena berbentuk setengah bola atau kerucut yg diletakkan tidak terlalu tinggi dekat dengan shelter BTS.



Bernostalgia ke masa-masa proyek memasang antena GPS di tower, yg nilai rupiahnya bisa untuk beli HP baru belum lagi sisa kabel yang panjang kualitas jerman yg laku keras di loak...ahhhh sudahlahh...kini yang menjadi warisan di saya hanya sebuah receiver GPS USB yang dulunya digunakan  untuk referensi lokasi saat melakukan drive test sinyal. Dan saat saya colokkan port USB nya ke komputer  terdeteksi sebagai Usb to serial converter. Wahh ini dalemannya pasti masih berupa UART dan bisa  di interfacing ke arduino !



Jadi makin semangat nih buat menyambungkannya ke Arduino. Tapi sebelumnya ada baiknya mencari referensi tentang data yg dikirim oleh si receiver. Sial nya si pembuat modul telah bangkrut dan sedikit yg bisa saya dapatkan digoogle tapi cukuplah informasi yg di dapat bahwa receiver ini berbasis NMEA yg masih umum digunakan. Dengan terminal putty dan serial baudrate 4800 layar menangkap seperti ini :


Buset dah..banyak amat tuh tulisan yg harus diparsing, dan dari yg saya baca di standar NMEA receiver ini lumayan lengkap karena bisa membaca berbagai standar GPS , jadi ada $GPRSV dan $GPRSA untuk melihat informasi satelit dan $GPGGA dan $GPRMC untuk membaca koordiat, waktu, kecepatan, ketinggian dsb. Wah saya mumet ini kalau membaca parsingan segitu banyak, dan pilihan tertuju ke google dan saya cari ada gak software gratis untuk membaca parsingan NMEA seperti diatas...dan ternyata banyak loo..ayo kita coba dan bawa keruangan terbuka agar sinyal satelitnya lebih bagus.



Pilihan saya tertuju ke software yg pertama dimana terpampang jelas parsingan NMEA nya sehingga dari data serial yg didapat seperti ini :


$GPRMC,040503.246,A,0719.6784,S,11243.4344,E,0.00,0.00,220520,,*1B


Artinya kira-kira :

040503.246       = jam 04 , Menit 05, Detik 03.246 (UTC)
A                            = Data Benar (V jika datanya salah )
0719.6784,S     = Latitude 7' 19.6784 " South
11243.4344,E  = Longitude 112' 43.4344 " East
220520        = Tanggal 22 Bulan 05 Tahun 20

Nah sudah siap nih...ayo kita siapkan bahan-bahan dan mulai menyolder modul receiver GPSnya agar bisa dihubungkan ke Arduino.



Skematik tidak akan saya bahas karena sangat gampang dicari apalagi cara koneksi LCD ke Arduino seperti apa pasti para pembaca sudah tahu, dan kalau belum ya tinggal googling aja bagaimana cara menyambungkan LCD ke arduino. Microcontroller yg pas ada disaya adalah wemos d1 r1  yang memiliki wifi berbasis ESP8266 dan nantinya akan saya proogram untuk membaca GPS secara serial dan DHT11 sebagai tambahan sensor agar sedikit berbau IOT. Tujuan akhir dari praktek ini adalah mengirimkan data sensor suhu/kelembaban beserta dengan data GPS dan nama lokasi pembacaan yg akan dikolaborasikan dengan Mqtt serta Geopy phyton. Pada part 1 ini akan difokuskan pembahasan mengenai pembacaan GPS ke LCD.


Pertanyaan besarnya adalah bagaimana cara parsing text serial secara efektif? Apakah manual saja? Secara tukang solder ini memiliki pengalaman buruk dengan parsing serial ! Teringat bahwa modul GPS receiver banyak dijual sebagai interfacing Arduino dan pastinya ada Library jadinya, dan benar saja beberapa library terpampang di sketch dan stelah mencoba beberapa kali akhirnya diputuskan untuk menggunakan library TinyGps++ . Kenapa? Karena dengan script examplenya (ada di folder lib nya) alat saya  sukses membaca data GPS dengan bagus. Mari kita berkreasi dengan cara copy paste ala tukang solder ini.


#include <TinyGPS++.h>
#include <LiquidCrystal.h>
#include <SoftwareSerial.h>

static const int RXPin = 0, TXPin = 15; 
//pake RX aja hanya baca data !

static const uint32_t GPSBaud = 4800;


Seperti biasanya menggunakan board arduino versi kecil maka serial portnya harus dengan software serial. Baudrate disesuaikan yaitu 4800


// The TinyGPS++ object
TinyGPSPlus gps;

// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);

LiquidCrystal lcd(16, 5, 4, 14, 12, 13);


Inisialisai LCD seperti biasa simple aja dan harus diperhatikan Wemos D1 R1 memiliki GPIO yang agak loncat loncat, jadi sesuaikan penamaan portnya jangan sampe salah. Gunakan Google Search jika salah.



void setup()
  Serial.begin(9600);
  ss.begin(GPSBaud);
  lcd.begin(20, 4);

  Serial.println(F("Coba-Coba GPS"));
  Serial.println(F("Menggunakan  TinyGPS++ Dan GPS module"));
  Serial.print(F("Testing TinyGPS++ library v. ")); 
  Serial.println(TinyGPSPlus::libraryVersion());
  Serial.println(F("by ahocool with respect to Lib creator  Mikal Hart"));
  Serial.println();
}


Function setup menyatakan bahwa serial dari wemos akan digunakan sebagai console juga untuk melihat hasil pembacaan GPS selain di LCD. keuntungan lainnya adalah memudahkan untuk debugging.

void displayInfo()
{
  Serial.print(F("Location: ")); 
  if (gps.location.isValid())
  {
    Serial.print(gps.location.lat(), 6);
    Serial.print(F(","));
    Serial.print(gps.location.lng(), 6);
    lcd.setCursor(0,0);
    lcd.print(" ---- GPS VALID ----");
    lcd.setCursor(0,1);
    lcd.print("LAT :");
    lcd.print(gps.location.lat(), 6);
    lcd.setCursor(0,2);
    lcd.print("LONG:");
    lcd.print(gps.location.lng(), 6);    
  
  }
  else
  {
    Serial.print(F("INVALID"));
    lcd.setCursor(0,0);
    lcd.print(" ---GPS INVALID --- ");
  }

  Serial.print(F("  Date/Time: "));
  if (gps.date.isValid())
  {
    Serial.print(gps.date.month());
    Serial.print(F("/"));
    Serial.print(gps.date.day());
    Serial.print(F("/"));
    Serial.print(gps.date.year());
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.print(F(" "));
  if (gps.time.isValid())
  {
    if (gps.time.hour() < 10) Serial.print(F("0"));
    Serial.print(gps.time.hour());
    Serial.print(F(":"));
    if (gps.time.minute() < 10) Serial.print(F("0"));
    Serial.print(gps.time.minute());
    Serial.print(F(":"));
    if (gps.time.second() < 10) Serial.print(F("0"));
    Serial.print(gps.time.second());
    Serial.print(F("."));
    if (gps.time.centisecond() < 10) Serial.print(F("0"));
    Serial.print(gps.time.centisecond());
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.println();
  
}


Pada sript diatas berfungsi sebagai tampilan GPS ke Serial dan LCD, secara umumnya dapat dilihat class yg umum digunakan :

gps.location.isValid()
gps.location.lat()
gps.location.lng()
gps.date.isValid()
gps.time.hour()
gps.time.minute()
gps.time.second()
gps.time.second()


Untuk loop utama seperti dibawah ini :

void loop()
{
  // Data ditampilkan hanya setelah data selesai di olah 
  while (ss.available() > 0)
    if (gps.encode(ss.read()))
      displayInfo();

  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    Serial.println(F("GPSMU pedot brooo! cek kabelmu."));
    while(true);
  }


}


Hasilnya ketika saya jalankan diluar ruangan sangat akurat apalagi saat cuaca ternag dan LED dari GPS rceiver tidak berkedip yg artinya FULLY LOCKED TO 3 SATELLITES.



Tidak terlalu sulit jika kita sudah mengetahui langkah-langkah "googling" yang sesuai untuk meng "oprek" arduino. Untung saja saya punya receiver GPS jadul kalau tidak harus keluar duit 200rb an untuk membeli modul GPS Ublox Neo.

.....TUNGGU YANG LEBIH KEREN DI TULISAN PART 2...

Selamat mencoba 
Share:

Kamis, 21 Mei 2020

[IOT Ternyata Mudah] GeoPy Sebagai Pengolah Data GIS Paling Sederhana


Setelah berhasil menjadikan Raspberry Pi Zero sebagai broker MQTT Publik saya jadi berpikir untuk melihat resource yg dihabiskan oleh mosquitto pada komputer kecil ini. Dan ternyata masih banyak ruang tersedia untuk pengembangan lainnya , ini tidak berlebihan karena setelah saya kerjakan proyek data logger menggunakan mongoDB seperti yang kita bahas terdahulu disini http://www.aisi555.com/2019/10/iot-menyimpan-data-sensor-lewat-nbiot.html , terasa masih ringan saja bahkan bisa sampai sukses mengirim ke database di cloud.



Data GPS yang alat saya kirimkan melalui MQTT dapat di olah selanjutnya oleh python dan aplikasi GIS lanjutan pada mongoDB atlas. Apakah Raspberry Pi mampu mengolah data Geo menjadi pelaporan seperti gambar diatas ? Mungkin jalan masih jauh kearah sana karena keterbatasan kemampuan tukang solder ini. Lalu paling tidak, saya berkeinginan agar data GPS yg saya punya dapat disimpan menjadi data nama point terdekat atau alamat dari koordinat GPS nya, dan akan saya coba menggunakan kemampuan raspberry pi. Script yg saya bayangkan akan menunjukkan koordinat gambar dibawah ini sesuai dengan nama titik nya dan dapat dilakukan oleh komputer kecil Raspberry Pi Zero.




Langkah pertama adalah mencari plugin dari PYTHON yang bisa mengolah data GPS. 

Geopy merupakan library python yang mampu mengolah beberapa GEO API terkenal seperti google, openstreet, baidu, ArcGis dll. Secara default Raspbian telah menginstall python 2 dan 3 , untuk itu lakukan installasi di raspberry pi menggunakan perintah :

pi@raspberry:~ $ pip3 install geopy

Kita gunakan python 3.x agar lebih up to date , dan dari github resmi geopy untuk mengubah koordinat GPS menjadi nama lokasi kita gunakan cara seperti ini :

>>> from geopy.geocoders import Nominatim
>>> geolocator = Nominatim(user_agent="specify_your_app_name_here")
>>> location = geolocator.reverse("lat, long")
>>> print(location.address)

Dari hasil membaca beberapa blog yg membahas GeoPy , Nominatim adalah API gratis walau terbatas yang paling mudah digunakan, untuk itu ayo kita mencoba nya di PC saya dulu sesuai contoh diatas, dan hasilnya saat saya masukkan koordinat tugu pahlawan -7.425808 , 112.737785 ...


Jiiiahhhh koordinatnya salah yang diberikan oleh website tadi...hahahah...cek punya googlemap ahh...Koordinat dari Tugu Pahlawan : -7.245862 ,  112.737799 ..dan kita coba ulang..

 -7.245862 ,  112.737799

Ternyata website yg pertama salah posisi 1 angka saja sudah menyebabkan sasaran melenceng jauh. Selanjutnya saya ingin menggunakan MQTT untuk mengirim / Publish data GPS dan kemudian diolah oleh Script Python pada Raspberry Pi untuk mendapatkan nama lokasi dan kemudian dikembalikan secara pPublish dan di Subscribe balik oleh pengirim awal. Untuk itu jangan lupa menginstal library PAHO MQTT pada raspberry pi.


 pi@raspberry:~ $ pip3 install paho-mqtt


Script python MQTT sudah pernah saya bahas pada tulisan data logger sebelumnya, dan untuk keperluan kali ini scritnya kira - kira seperti ini :


import paho.mqtt.client as mqtt #import mqtt client
from geopy.geocoders import Nominatim #import nominatim sebagai geocoder


geolocator = Nominatim(user_agent="my-application") #Gratisan Harus Seperti ini
########################################################
def on_message(client, userdata, message): #routine pesan mqtt masuk
    print("message received " ,str(message.payload.decode("utf-8")))
    print("message topic=",message.topic)

    if (message.topic == '/gps'): #jika topik /gps
       location = geolocator.reverse(str(message.payload.decode("utf-8")))
       lokasi = location.address #ambil lokasi dari geo
       print(lokasi)
       client.publish("/lokasi",lokasi) #kirim ke topik /lokasi
########################################################
broker_address="localhost"
broker_port=1883
broker_user="usernya"
broker_pass="paswordnya"
print("creating new instance")
client = mqtt.Client("P1") #instance mqtt baru
client.on_message=on_message #attach function ke routine callback
client.username_pw_set(broker_user,broker_pass)
print("connecting to broker")
client.connect(broker_address,broker_port) #connect to broker
 #start the loop
print("Subscribing to topic...")
client.subscribe("/gps")
client.loop_forever()
 #muter terusss


Jalankan script diatas pada terminal yg terhubung pada raspberry pi, dan buka juga 2 buah terminal (melalui putty dan sejenis) sebagai terminal PUB yang akan mengirim koordinat GPS ke topik /gps dan satunya sebagai SUB yang akan menunggu kiriman nama titik koordinat tadi dari topik /lokasi. Hasilnya seperti ini nih..


Sukses tapi tidak begitu menarik ya sepertinya karena semuanya berbasis teks. Yang menarik pakai apa ya ? Kita manfaatkan SMARTPHONE aja dengan menggunakan aplikasi IOT MQTT PANEL sebagai dashboard komunikasi MQTT paling terjangkau sampe saat ini karena masih GRATIS walau pake iklan. Cari pada play store dan install pada smartphone kamu dan lakukan setup koneksi ke broker yg digunakan.




Kita akan mengirim dan menerima TEKS , jadi kita butuh 2 panel yaitu  Text Input dan Text Log.



Dan hasilnya menggembirakan seperti dibawah ini :

Selamat Mencoba

Share:

Selasa, 19 Mei 2020

[IOT Ternyata Mudah] Memanfaatkan Raspberry Pi Sebagai Broker MQTT (Mosquitto) Yang dapat Diakses Publik



Beberapa hari terakhir penulis kembali disibukkan dengan project "tertunda" dari tahun 2019 milik seorang teman. Dapat dibilang sedikit beruntung karena penulis pada masa PSBB covid-19 ini  mempunyai waktu luang dikarenakan beberapa proyek yg seharusnya masa sebelum lebaran menjadi "sok sibuk" dengan terpaksa di cancel. Tapi live mas gogon - tetap berkreasi adalah pilihan yang terbaik daripada menjadi panik akibat virus yang tak kunjung ketemu vaksin nya.




Masih ingat gambar diatas ? Itu merupakan tulisan saat kawan yg mengajak saya mengerjakan proyek pengolahan data IOT membuat saya giat belajar teori + praktek pengiriman data IOT menggunakan protokol MQTT. Jika pembaca belum sempat memperhatikan ada baiknya menelaah dahulu pada link berikut : http://www.aisi555.com/2019/10/iot-lebih-lanjut-dengan-mqtt.html . Dan sangat terkejutnya ketika bulan mei 2020 saat mengerjakan proyek bersambung tadi, tersadar bahwa server/broker  CloudMqtt dot com yg saya sering gunakan, mulai memasang harga dan versi gratisnya dibilang "OUT OF STOCK". Ya saya maklum saja mereka butuh sewa server dan cari untung dan walau akun mqtt saya masih aman dan instance saya masih aktif akan tetapi kualitasnya menurun, putus-putus, dan mungkin ini sebabnya di berikan "meteran" agar terjadi keseimbangan antara penggunaan dan kapasitas server.


Lalu apakah yg harus saya perbuat ? Apakah mencari broker publik ? Dan pilihan tertuju ke sebuah alat kecil yg tergeletak di toolbox pemberian teman tadi, yang ditinggalkan mahasiswanya (seharusnya ikut mengerjakan proyek)  akibat kampus lockdown terdampak covid-19. Dan alat itu ternyata raspberry zero W.

Saya tidak akan membahas cara install raspi zero karena sangat umum ditemukan di internet, yang penting saran saya adalah gunakan SD CARD kualitas terbaik yaitu kelas EXTREME dengan kecepatan transfer s/d 100mbps dan lupakan membeli sd card class 10 yang banyak palsunya. Belilah di toko online yg jualan spesialis alat rekam video karena dijamin sudah terpercaya. Saya pilih OS yang paling umum yaitu RASPBIAN. Cara install mosquitto sangat gampang dan juga umum ditemukan dengan googling.


pi@raspberry:~ $ sudo apt install -y mosquitto mosquitto-clients

Jangan lupa untuk menjadikan mosquitto sebagai service sehingga auto start

pi@raspberry:~ $ sudo systemctl enable mosquitto.service

sudah...sederhana seperti itu dan bisa digunakan secara langsung..oh iya untuk mengetahui apakah broker mqtt sudah berjalan gunakan perintah 

pi@raspberry:~ $ mosquitto -v

secara default port yang digunakan adalah 1883 dan IP nya berapa ya ? Hayo coba googling sendiri cara menemukan IP dari raspberry kamu. Gampang kok...

dan script arduino kamu cukup dikosongkan username dan passwordnya seperti berikut :



Jika menginginkan MQTT brokernya lebih secure dengan user password, gunakan perintah berikut ini :

 pi@raspberry:~ $ mosquitto_passwd -c passwordfile user

nanti akan keluar perintah untuk memasukkan pasword. Nah..gampang begitu masak gak bisa? kalau melihat proyek sebelumnya menggunakan ESP8266 tinggal sambung ke wifi yang sama dan otomatis terhubung dengan mantap. 

Untuk melakukan sub dari topik pada raspberry gunakan perintah :

pi@raspberry:~ $ mosquitto_sub -h localhost -u namauser -P password -t TOPIKNYA 

Gunakan terminal telnet/ssh lainnya untuk PUBLISH message ke topic agar tertangkap pada terminal sebelumnya

pi@raspberry:~ $ mosquitto_pub -h localhost -u namauser -P password -t TOPIKNYA -m "saya publish pesan"


Lalu bagaimana jika menggunakan modem SIM800 sejenis yang mengakses servernya dari internet ? Cara termudah adalah dengan memanfaatkan PORT FORWARDING dari router wifi dari layanan internet rumahan indihome/mncplay/firstmedia dll. Secara umum langkahnya mirip yaitu mencari IP publik dari router dan melakukan port forwarding ke raspberry pi. 


Dengan setting diatas maka IP dari Raspberry yang kita gunakan akan bisa diakses dari luar begitu juga PORT MQTT nya. IP publik ini mungkin saja akan berubah saat terjadi rekonfigurasi dari pusat ISP, modem ter Reset atau lampu mati. Untuk itu agar memudahkan mengingat butuh DOMAIN PUBLIK yg khusus mengarahkan ke IP router kita dari jalur internet menggunakan Dynamic DNS atau DDNS. Salah satu layanan DDNS yang lumayan simple adalah noip dot com seperti gambar berikut :



Jadi pastikan servise DDNS tersedia dan aktif pada router kamu dan selanjutnya secara dinamis akan merubah pada public DNS domain dan IP routernya. Jika router kamu tidak memiliki fasilitas DDNS maka bisa menggunakan akses DDNS melalui aplikasi DUC pada raspberry pi kamu . Googling aja : " Raspberry noip DUC install "

Tuh kan..saya jadi bisa akses alat arduino saya melalui HP dengan koneksi 4G .


Selamat Mencoba


Share:

Kamis, 31 Oktober 2019

Cara Belajar IOT : Menyimpan Data Sensor lewat NBIOT untuk Ditampilkan Ke Chart dan Peta



Bahasan kali ini sempat tertunda akibat gejolak politik Indonesia sebelum pelantikan presiden. "Sombong Amat" hehehe...ya tertundanya secara tidak langsung sih karena coba deh perhatikan penampakan alat saya dibawah ini yg saya bawa keliling-keliling surabaya di awal oktober 2019.


Ngeri kali bukan? apalagi saat kasus penusukan pak wiranto saya jadi was-was membawa keliling alatnya ntar dikira mau sabotase kali...hehehe...ngelanturnya kejauhan kali ya ? Balik yuk ke topik utama dan kali ini IOT nya semakin lebih jauh dimana sensor akan dibawa berkeliling dan tiap pembacaan akan disimpan pembacaan  GPS nya. Seperti ini loo pesan mqtt berformat JSON yg dikirim oleh arduino...



Dari pesan MQTT diatas maka jika ingin mengolah data ber "GEO" atau memiliki data koordinat GPS maka tiap pembacaan sensor perlu disimpan ke dalam database. Arduino secara kemampuan nya yg 8 bit tentunya megap-megap kalau dihubungkan ke SQL, lalu berpikir apasih yg digunakan orang-orang diluar sana untuk database IOT ? Jawabanya adalah PYTHON + MONGODB






Jadilah saya belajar bahasa asing lagi nih...ya untung saja sukses dan langkah belajarnya seperti ini untuk membantu pembaca memahami lebih mudah.


PYTHON + MQTT

Masih ingat tulisan terdahulu tentang ESP dan MQTT ? Sekarang dengan python ada library khusus menangani pesan PUBLISH dan SUBSCRIBE dengan nama pahomqtt. Jadi setelah berhasil mempelajari dasar-dasar python tidak lama kemudian saya berhasil menguasai pahomqtt seperti script berikut ini :

import paho.mqtt.client as mqtt #import lib mqtt

led = 0
segmen = 0

############jika ada mqtt yg di sub masuk#########
def on_message(client, userdata, message): 
    print("message received " ,str(message.payload.decode("utf-8")))
    print("message topic=",message.topic)
    print("message qos=",message.qos)
    print("message retain flag=",message.retain)
    global led
    global segmen
    client.publish("/test/seg","SEG"+ str(segmen)) 
    print("Publishing message to topic LED & 7 SEG")    
    print("7 SEGMEN : " + str(segmen))
    segmen+=1
    if segmen == 10:
       segmen = 0
    if led == 0:    
       print("LED ON")
       client.publish("/test/led","ON")
       led = 1
    else :    
       print("LED OFF")   
       client.publish("/test/led","OFF")
       led = 0
    print('')
    print('')
########################################
broker_address="soldier.cloudmqtt.com"
broker_port=146xx
broker_user="xxxxxx"
broker_pass="xxxxxx"
print("creating new instance")
client = mqtt.Client("P1") #create new instance
client.on_message=on_message #attach function to callback
client.username_pw_set(broker_user,broker_pass)
print("connecting to broker")
client.connect(broker_address,broker_port) #connect to broker
#start the loop
print("Subscribing to topic","/test/DHT")
client.subscribe("/test/DHT")
client.loop_forever()




Script diatas merupakan koding python yg akan men SUB topik /test/DHT dan kemudian akan melakukan PUB terhadap LED dan 7 Segmen. oo iya jangan salah paham ya script python nya saya jalankan di PC yg terhubung ke internet bukan di ARDUINO.


PYTHON + MONGODB


Database umum yg digunakan saat ini pasti gak jauh dari SQL deh...tapi saya menemukan yg lebih simple dan ada GRATISAN nya yaitu MONGODB . Benar saja mongodb mungkin masih awam ditelinga orang tapi diluar sana bisa dilihat penggunaan mongobd cukup intensif mungkin dikarenakan karena data IOT yg bersifat tidak atau cenderung kurang relational dan tentunya datanya sederhana. Untuk itu kita bisa menggunakan mongodb gratis dengan nama MONGODB ATLAS dan bersifat cloud based.





Jika anda pengguna SQL maka record dan field pada mongodb diistilahkan sebagai collection . Python sendiri tidak mempunyai fasilitas khusus untuk mongodb sehingga dibutuhkan library PYMONGO sebagai bahasa dasar untuk simpan-hapus-filter-update database. Secara singkat hasil pembelajaran saya membaca suhu dan kemudian menyimpannya pada MONGODB seperti script berikut ini :


import paho.mqtt.client as mqtt #import the client1
import pymongo
import json
from datetime import datetime


myclient = pymongo.MongoClient("mongodb+srv://user:pwd@cluster0-jb06l.mongodb.net/test?retryWrites=true&w=majority")
mydb = myclient["humitemp"]
mycol = mydb["data_humitemp"]

##########simpan DB###########
def save_db(isi):
    dateTimeObj = datetime.now()
    print('')   
    print("<===SAVE TO MONGODB===>")
    print(dateTimeObj)
    x=json.loads(isi)
    y={"waktu":dateTimeObj , "suhu": x["suhu"]  , "humi": x["humi"]  }
    z = mycol.insert_one(y)
   #print list of the _id values of the inserted documents:
    print("database masuk dengan id : ")
    print(z.inserted_id)
    print("========================")
    print('')
###############BACA SUB MESSAGE#################
def on_message(client, userdata, message):
    print("message received " ,str(message.payload.decode("utf-8")))
    print("message topic=",message.topic)
    print("message qos=",message.qos)
    print("message retain flag=",message.retain)
    save_db(str(message.payload.decode("utf-8")))
   
################################
broker_address="soldier.cloudmqtt.com"
broker_port=146xx
broker_user="xxxx"
broker_pass="xxxxxx"
print("creating new instance")
client = mqtt.Client("P1") #create new instance
client.on_message=on_message #attach function to callback
client.username_pw_set(broker_user,broker_pass)
print("connecting to broker")
client.connect(broker_address,broker_port) #connect to broker
 #start the loop
print("Subscribing to topic","/test/DHT")
client.subscribe("/test/DHT")
client.loop_forever()


Hasilnya tidak mengecewakan pada MONGODB atlas karena ada fasilitas report CHART grafik sehingga sangat menyingkat waktu coding



Yang menjadi titik menariknya adalah data GEOSPATIAL juga bisa ditampilkan melalui MONGODB ATLAS.



Nanti deh kita bahas kapan-kapan setelah pembaca mahir di PYTHON vs ARDUINO...selamat mumet kawan...
Share:

Kamis, 03 Oktober 2019

Cara Belajar IOT : Lebih lanjut dengan MQTT menggunakan ESP8266 - Wemos D1



Ketika harga modul wifi + microcontroller dengan bandrol hanya 75 ribu perak, disitu saya merasa sangat sedih, dimana penghargaan terhadap para desainer elektronika ? Cungkuok memang luar biasa dalam meng "clone" modul berbasis arduino seperti Wemos D1 yang akan kita bahas disini. Daripada galau berkepanjangan karena tidak habis pikir biaya manufaktur dari board nya di cungkuok, sebaiknya kita oprek aja menjadi barang IOT yg sedang getol-getolnya dibicarakan orang. Industri 4.0 katanya...

Wemoz D1 merupakan minimum system atau lebih tepatnya breakout board dari modul wifi terkenal ESP8266 dimana pinoutnya yg sedikit acak bisa dilihat dari gambar diatas yg saya comot dari internet. Keuntungan dari modul siap pakai ini adalah terdapat oprekan dari orang diluar sana yg menjadikan board ini bisa menggunakan IDE SKETCH nya arduino. Jadi sebelum dapat menggunakan ide arduino untuk modul ini bisa di import library nya di :  http://arduino.esp8266.com/stable/package_esp8266com_index.json , masukkan alamat terebut di preferences pada sketch. Kemudian pada menu Boards Manager bisa menambahkan boards ESP seperti pada gambar



Dan contoh-contoh program banyak bertebaran di luar sana salah satu contoh yg merupakan helloworld bisa mencoba mengirim data pembacaan suhu ke port TCP dari PC atau HP seperti yg pernah dibahas sebelumnya, script singkatnya seperti ini :

//Inisialisasi library
#include <ESP8266WiFi.h>
#include "DHT.h"

//Inisialisasi Pin DHT11 
#define DHTPIN 2
#define DHTTYPE DHT11
  
DHT dht(DHTPIN, DHTTYPE);

const char* ssid = "INDOTECH"; // Nama Wifi
const char* password =  "infrastruktur"; // Password wifi
const char* host = "192.168.1.12"; // IP tujuan
const uint16_t port = 1855; // Port Tujuan

WiFiClient klien;  // nama klien 

void setup() {
  Serial.begin(115200); // biar bisa monitor
  dht.begin();

  WiFi.begin(ssid, password); //konek ke wifi

// loop untuk mengulang koneksi jika gagal
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Terhubung WiFi..");
  }
    Serial.println("Anda Terhubung Ke Wifi..");
//biar tau IP nya 
  Serial.println("");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

}

//Membaca DHT11
void SendTempHumid(){
  
 String datae ="";
  
  float h = dht.readHumidity();
  float t = dht.readTemperature();

//trap untuk mengetahui dht sudah nyambung atau tidak
   if (isnan(h) || isnan(t) ) {
    Serial.println(F("Sensor DHT blum terpasang dengan benar!"));
    return;
  }

//tampilkan hasil dht11 ke serial monitor
datae+= F("Kelembaban: ");
datae+= String(h);
datae+= F("%  Suhu: ");
datae+= String(t); 
datae+= F(" °C") ;

Serial.println(datae);

//koneksi ke TCP
  Serial.print("Terhubung ke ");
  Serial.print(host);
  Serial.print(':');
  Serial.println(port);

  Serial.println("...Kirim data ke Lawan..\n");
  
   if (!klien.connect(host, port)) {
    Serial.println("gagal konek masbroo...");
    delay(5000);
    return;
  }

  // Kirim teks DHT 11 ke port TCP lawan
  if (klien.connected()) {
    klien.println(datae);
  }
}

void loop() {
SendTempHumid();
delay(5000);
}

Anda bisa menggunakan aplikasi PC berupa TCP Monitor atau menggunakan hotspot HP dan menginstall aplikasi android TCP server dari play store.

Kotak pandora sudah terbuka lebar dan dengan menggunakan library MQTT yg sudah dibahas pada pembahasan sebelumnya DISINI , maka kita bisa saling kirim data secara PUBLISH dan SUBSCRIBE sesuai standar MQTT. Seperti gambar paling atas saya mengunakan Wemos D1  dengan bantuan library PubSubClient untuk mengirim data suhu dan kelembaban. Sedangkan untuk proses SUBSCRIBE saya menggunakan output berupa LED dan 7 Segmen. Karena pin GPIO dari wemos terbatas maka saya menggunakan bantuan IC 7 segmen 4026 dengan catatan 7 segmennya common negatif (KATODA).


Jadi hanya perlu 2 buah PIN dari wemos menuju ic 4026 yaitu pin CLOCK dan reset. Saat ada data masuk atau perubahan angka maka program akan mereset IC 4026 dan memberikan jumlah pulsa clock sesuai angka yg diinginkan seperti kode berikut :

void segmen(int angka)
{

 int b;
 //reset 
 digitalWrite(RST,HIGH);
 digitalWrite(RST,LOW);

//loop clock sampai angka yg diinginkan
 for(b=0;b<angka;b++)
   {
         digitalWrite(CLK,HIGH);
         digitalWrite(CLK,LOW);
   }
}


Sedangkan untuk membaca data SUBSCRIBE pada MQTT brokernya, maka bisa menggunakan perintah Call back pada library PobSubClient.

..................................

#define SEGTOPIC "SEG"

..................................

client.setCallback(mqtt_callback);
    
   if (client.connected()){
     
      client.subscribe(SEGTOPIC); //subscribe ke topic 7 segmen
    }
..................................  

void mqtt_callback(char* topic, byte* payload, unsigned int length) {

  Serial.print("Ada Pesan Baru Di Topik: ");
  Serial.println(topic);

  Serial.print("Pesan:");

  String message;
  for (int i = 0; i < length; i++) {
    message = message + (char)payload[i];  //Convert *byte to String
  }
   Serial.print(message);
//ubah 7 segmen sesuai data yg masuk
  if(message == "SEG1") {segmen(1);}
  if(message == "SEG2") {segmen(2);}
  if(message == "SEG3") {segmen(3);}
  if(message == "SEG4") {segmen(4);}
  if(message == "SEG5") {segmen(5);}
  if(message == "SEG6") {segmen(6);}
  if(message == "SEG7") {segmen(7);}
  if(message == "SEG8") {segmen(8);}
  if(message == "SEG9") {segmen(9);}
  if(message == "SEG0") {segmen(0);}
  Serial.println();
  Serial.println("-----------------------");  


}


Jadi kalau ada client MQTT yang mem PUBLISH ke topic "SEG" maka otomatis terbaca oleh microcontroller dan merubah tampilan 7 segment seperti yg terlihat pada video berikut :


Share:

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 (8) arduino (26) 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 (25) euro2020 (13) gcc (1) iklan (1) infrared (2) Input Output (3) iot (58) 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 (7) 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 (7) radio (24) raspberry pi (4) 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) transistor (2) troubleshoot (3) tulisan (93) tutorial (108) tv digital (6) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika