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

Selasa, 04 Agustus 2020

[Mudah Belajar RasPi] Terhubung ke antares semakin mudah dengan python library siap pakai




Dengan library python antares-http maka semua urusan kirim terima pesan http menuju antares menjadi semakin gampang saja. Perhatikan hasil capture dari websitenya pip / pypi maka saking simpelnya anda bisa membuat aplikasi antares melalui raspberry pi dalam hitungan menit saja.





Sehingga praktek penekanan tombol yang sudah kita buat pada penjelasan sebelumnya disini menjadi makin mudah dengan mengarahkannya ke antares :


Dan script untuk membuat tombol penghitung survey seperti ini :






import RPi.GPIO as GPIO
import time
import json
from antares_http import antares #library antares

antares.setDebug(True)
antares.setAccessKey('ACCESS:KEY') #sesuaikan

GPIO.setmode(GPIO.BCM)

GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)#Button to GPIO17
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP)#Button to GPIO27
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP)#Button to GPIO22

def update_antares(pilihan):
    latestData = antares.get('Project name', 'device name') #Sesuaikan
    isi = latestData['content'] #parsing pertama
    satu= isi['satu'] #parsing kedua
    dua= isi['dua']
    tiga= isi['tiga']
    #pilhan dari penekanan tombol satu, dua, tiga
    if pilihan == 'satu':
       myData = {'satu':int(satu)+1,'dua':int(dua),'tiga':int(tiga)}
    elif  pilihan == 'dua':
       myData = {'satu':int(satu),'dua':int(dua)+1,'tiga':int(tiga)} 
    elif  pilihan == 'tiga':
       myData = {'satu':int(satu),'dua':int(dua),'tiga':int(tiga)+1}

    antares.send(myData,'Project name', 'device name') #Sesuaikan

try:
    while True:
         button_state1 = GPIO.input(17) #baca tombol
         button_state2 = GPIO.input(27)
         button_state3 = GPIO.input(22)
         if button_state1 == False:
             print('Button 1 is Pressed...')
             update_antares('satu')
         elif button_state2 == False:
             print('Button 2 is Pressed...')
             update_antares('dua')
         elif button_state3 == False:
             print('Button 3 is Pressed...')
             update_antares('tiga')
         time.sleep(0.2)
         
except:
    GPIO.cleanup()

    

Sangat simple dan selanjutnya bisa dilihat pada video berikut ini :




Share:

Selasa, 28 Juli 2020

[Mudah Belajar RasPi] Menghubungkan ke database MongoDB atlas



Kita lanjut penelusuran raspberry pi GPIO dengan input tombol yang masih menggunakan rangkaian 3 switch yang pernah kita bahas sebelumnya.


Interaksi dari GPIO kini akan kita gunakan untuk menyimpan angka yang ketika ada penekanan maka akan di "increment" dan ditampilkan pada grafik. Untuk itu kita gunakan MongoDB Atlas sebagai database gratis yang juga memiliki fasilitas grafik/chart.



Untuk merubah isi dari field pada database diatas kita bunakan perintah :


namaDB.namaCollection.find_one_and_update(query,value)


Jadi kita akan merubah nilai data satu dua atau tiga setiap kali penekanan tombol, gunakan script seperti berikut :



import RPi.GPIO as GPIO #library
import time
import pymongo
import json

#sesuaikan dengan client mongodb atlas kalian serta DB/Collection nya 
myclient = pymongo.MongoClient("mongodb+srv://user:password@cluster0-jb06l.mongodb.net/test?retryWrites=true&w=majority")
mydb = myclient["latihan"]
mycol = mydb["coba_tombol"]


GPIO.setmode(GPIO.BCM)

GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)#Button to GPIO17
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP)#Button to GPIO27
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP)#Button to GPIO22

######Update by increment database value######
def update_db(kolom):
     x= mycol.find_one_and_update({'judul':'coba'},{'$inc':{kolom:1}})
     print('update dbase :')
     print(x)
 
try:
    while True:
         button_state1 = GPIO.input(17)
         button_state2 = GPIO.input(27)
         button_state3 = GPIO.input(22)
         if button_state1 == False:
             print('Button 1 is Pressed...')
             update_db('satu')
         elif button_state2 == False:
             print('Button 2 is Pressed...')
             update_db('dua')
         elif button_state3 == False:
             print('Button 3 is Pressed...')
             update_db('tiga')
         time.sleep(0.2)
         
except:
    GPIO.cleanup()

    

Sangat simple sehingga kita bisa membuat grafik penekanan tombol seperti video berikut ini.





Share:

Senin, 27 Juli 2020

[Mudah Belajar RasPi] Bermain dengan GPIO dan interaksi dengan TV Out




Raspberry pi merupakan komputer mini yang menjadi perhatian orang banyak sejak pertama kali muncul di pasaran tahun 2012. Penulis saat itu yang masih merasa antipati terhadap arduino yg lumayan "membodohi" para pelajar yg memulai mengenal elektronika digital, merasa semakin gerah dengan kehadiran raspi karena teman-teman yg dulunya tidak suka solder menyolder kini rajin unggah foto kegiatan hariannya bersama raspi. Kenapa begitu ? Karena 20 tahun yg lalu penulis sudah terlebih dahulu mengenal "interfacing" solderan ke PC dan itu bukan hal gampang. Jadi ketika dunia opensource merajai semua platform maka  tak ada lagi kata susah dan mungkin perasaan "spesial" saya sebagai tukang solder mulai terancam.


Perasaan itu pun pudar 8 tahun setelahnya ketika menyadari saya tetap "spesial" kok karena dengan berbekal kemampuan dasar elektronika yang kuat, maka tidak akan menjadi masalah jika saya diminta untuk memecahkan  kesulitan orang lain yang berhubungan dengan raspberry pi.  Apalagi ketika disumbangkan oleh teman sebuah raspberry pi zero w yang menurut dia kesusahan karena error melulu. Dan dengan bergembira saya menemukan bahwa yang bikin error adalah kelas storage SD CARD yang terlalu rendah untuk mendapatkan hasil yg stabil tiap saat, tersolusikan dengan saya membeli SD CARD yang kelas tinggi untuk videography 4K seharga 200rb.

 

Penggunaan raspberry pi lebih menitik beratkan ke fungsinya sebagai komputer berbasis linux dan penulis juga merasakan kemudahan karena dapat membantu ketika mengerjakan proyek berbasis MQTT dengan memanfaatkan raspi sebagai brokernya. Kemampuan python sebagai motor utama dari programming nya yang juga open source menjadikan dunia raspi sangat berkembang terutama di bidang IOT. Untuk itu seri pembuka dari tutorial menyolder raspberry pi kita akan berhubungan dengan fungsi Input dan Output dan praktek pertama adalah menggunakan Switch push button.




Raspberry pi memiliki I/O yang berlevel 3.3 volt sehingga harus menyesuaikan kalau anda terbiasa dengan arduino yang levelnya 5v. Dari gambar diatas tiap pin I/O sudah memiliki fasilitas Pull up down internal sehingga untuk rangkaian tombol cukup mengikuti gambar diatas aja. Untuk script pythonnya bisa di cari di seantero internet dan umumnya seperti berikut ini :


import RPi.GPIO as GPIO #library Rpi sebagai input output lewat python
import time


GPIO.setmode(GPIO.BCM)
#pilih GPIO pin yang dekat-dekat ground aja
#semua GPIO di Pull UP
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)#TombolGPIO17
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP)#TombolGPIO27
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP)#TombolGPIO22


try:
    while True:
         button_state1 = GPIO.input(17)
         button_state2 = GPIO.input(27)
         button_state3 = GPIO.input(22)
         if button_state1 == False: #logic 0 ketika ditekan
             print('Tombol 1 ditekan...')
         elif button_state2 == False:
             print('Tombol 2 ditekan...')       
         elif button_state3 == False:
             print('Tombol 3 ditekan...')
             
         time.sleep(0.2)
         
except:
    GPIO.cleanup()
    


Dan hasilnya bisa dipastikan lancar keluar text pada console/terminal saat tombol ditekan



Terlalu gampang bagi saya dan kini ingin mengeluarkan suara dan menampilkan gambar saat menekan tombol. Kita gunakan library pygame sebagai pemutar mp3 dan aplikasi linux feh untuk menampilkan gambar. Hubungkan raspberry pi dengan kabel HDMI menuju TV Monitor dan Scriptnya seperti berikut ini :


import RPi.GPIO as GPIO
import time
import pygame
import os

os.system ('xset s activate') #membunuh screen saver, tapi ini dulu export DISPLAY=:0.0

GPIO.setmode(GPIO.BCM)

GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)#Button to GPIO
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP)

pygame.mixer.init() #mixer suara

try:
    while True:
         button_state1 = GPIO.input(17)
         button_state2 = GPIO.input(27)
         button_state3 = GPIO.input(22)
         if button_state1 == False:
             print('Ini tombol 1 broo...')
             os.system ('feh --hide-pointer -x -q -B black  -F -Z "satu.png" &')
             pygame.mixer.music.load("nomer1.mp3")
             pygame.mixer.music.play(1)
         elif button_state2 == False:
             print('Iki tombol 2 jeeehh...')
             os.system ('feh --hide-pointer -x -q -B black  -F -Z "dua.png" &')
             pygame.mixer.music.load("nomer2.mp3")
             pygame.mixer.music.play(1)
         elif button_state3 == False:
             print('Kepencet tombol telu boz...')
             os.system ('feh --hide-pointer -x -q -B black  -F -Z "tiga.png" &')
             pygame.mixer.music.load("nomer3.mp3")
             pygame.mixer.music.play(1)
         time.sleep(0.2)
         while pygame.mixer.music.get_busy() == True:
	         pass
except:
    GPIO.cleanup()


Sesuaikan gambar yang anda punya dan juga suara yang ingin didengarkan sebaiknya dalam satu folder aja. Jangan lupa jika anda menggunakan terminal ssh untuk terhubung dengan raspberry pi maka jalankan dulu "export DISPLAY=:0.0" agar output seperti video berikut tampil pada layar TV :



Masih kurang puas kita tampilkan video + mp 3 yuk saat tombol ditekan...gunakan VLC sebagai pemutar videonya.


import RPi.GPIO as GPIO
import time
import pygame
import os
import subprocess
os.environ['DISPLAY'] = ":0"


GPIO.setmode(GPIO.BCM)

GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)#Button to GPIO23
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP)

pygame.mixer.init()

# =================================
# >>>> code here to turn screen ON
# =================================
# forse display on, disable dpms and set screensaver off
subprocess.call('XAUTHORITY=~pi/.Xauthority DISPLAY=:0 xset dpms force on && xset -dpms && xset s off', shell=True)

#vlc
vid = subprocess.Popen(['vlc','bali.mp4','-L','-f','-q','&'], shell=False)

def putar(musik):
          pygame.mixer.music.load(musik)
          pygame.mixer.music.set_volume(1.0)
          pygame.mixer.music.play(1)
          time.sleep(5)
try:
    while True:
         button_state1 = GPIO.input(17)
         button_state2 = GPIO.input(27)
         button_state3 = GPIO.input(22)
         if button_state1 == False:
             print('Button 1 is Pressed...')
             putar("survey1.mp3")
         elif button_state2 == False:
             print('Button 2 is Pressed...')
             putar("survey2.mp3")
         elif button_state3 == False:
             print('Button 3 is Pressed...')
             putar("survey3.mp3")
         time.sleep(0.2)
         while pygame.mixer.music.get_busy() == True:
	         pass
except:
    vid.terminate()
    GPIO.cleanup()

Pingin tau hasilnya ?



Tutorial lengkap melalui yotube dapat anda simak di video berikut ini :


Share:

Rabu, 22 Juli 2020

Cara Mudah Belajar MODBUS - Komunikasi Industri Jaman dulu [part 5 -End] Modbus vs Antares.id



Belum lengkap rasanya kalau saya belum mencoba praktek modbus yang telah lengkap piramida IOT nya kedalam platform IOT lokal yaitu ANTARES by telkomiot. Tentunya pembaca yang ingin mengikuti pembahasan kali ini diharapkan membaca penelusuran saya dengan Antares vs ESP 8266 disini dan disini. Masih dengan rangkaian yang sama kita akan mencoba mengirim data pembacaan sensor modbus dan juga menunggu perintah dikirimkan dari antares ke sensor modbus yang saya buat menggunakan arduino.


Dari standar OneM2M yang digunakan antares maka ada ketentuan data MQTT yang di publish dan subscribe hanya terbatas pada 2 topik berikut :


PUBLISH  TOPIC :
/oneM2M/req/access:key/antares-cse/json

SUBSCRIBE TOPIC :
/oneM2M/resp/antares-cse/access:key/json



Data yang dikirim / PUBLISH berupa JSON dimana polanya harus sesuai dimana data apapun yang akan dikirim ke Antares merupakan isi dari dalam "con" :

{
  "m2m:rqp": {
    "fr": "access:key",
    "to": "/antares-cse/antares-id/project-name/device-name",
    "op": 1,
    "rqi": 123456,
    "pc": {
      "m2m:cin": {
        "cnf": "message",
        "con": "{\"data\":\"value\"}"
      }
    },
    "ty": 4
  }
}

Jadi script publish mqtt menggunakan function atau routine sebagai berikut :


   void kirim(String tombol, String suhu, String humi) // kirim 3 item sekaligus
{
    Serial.println("publish to antares topik: " );
    Serial.print(TOPIKPUB);
    Serial.print(" : ");
    Serial.println(tombol + " - " + suhu + " - " + humi );
    
    String pubString ;  //isi json pub message yg super panjang
    pubString += F("{");
    pubString += F("\"m2m:rqp\": {");
    pubString += F("\"fr\": \"");
    pubString += String(accessKey) ;
    pubString += F("\",");
    pubString += F("\"to\": \"/antares-cse/antares-id/");
    pubString += String(projDev);
    pubString += F("\",");
    pubString += F("\"op\": 1,");
    pubString += F("\"rqi\": 123456,");
    pubString += F("\"pc\": {");
    pubString += F("\"m2m:cin\": {");
    pubString += F("\"cnf\": \"message\",");
    pubString += F("\"con\": \"{\\\"tombol\\\":");
    pubString += tombol;
    pubString += F(",\\\"suhu\\\":");
    pubString += suhu;
    pubString += F(",\\\"humidity\\\":");
    pubString += humi;
    pubString += F("}\"");
    pubString += F("}");
    pubString += F("},");
    pubString += F("\"ty\": 4");
    pubString += F("}");
    pubString += F("}");

   // kirim ke topik TOPIKPUB
   char message_buff[pubString.length() + 1];
   pubString.toCharArray(message_buff, pubString.length() + 1);
   client.publish(TOPIKPUB,message_buff);
  
}

    




Untuk menunggu request dari antares harus diperhatikan yang diterima melalui callback merupakan JSON juga lhooo...jadi kalau mumet sebaiknya dihentikan segera melanjutkan membaca blog ini!

 {
   "m2m:rsp" : {
      "rsc" : 2001,
      "rqi" : "123456",
      "pc" : {
         "m2m:cin" : {
            "rn" : "cin_63068886",
            "ty" : 4,
            "ri" : "/antares-cse/cin-63068886",
            "pi" : "/antares-cse/cnt-682859183",
            "ct" : "20200707T152502",
            "lt" : "20200707T152502",
            "st" : 0,
            "cnf" : "message",
            "cs" : 35,
            "con" : "{\"led\":\"on\"}"
         }
      },
      "to" : "access:key",
      "fr" : "/antares-cse"
   }
}


Untuk mengolah data request dari antares maka ESP8266 akan melakukan parsing JSON dari payload MQTT dengan menggunakan library ARDUINO JSON


    DynamicJsonDocument doc(512);
    deserializeJson(doc, message);
    String parsedString = doc["m2m:rsp"]["pc"]["m2m:cin"]["con"]; //pertama cari isi con
    deserializeJson(doc, parsedString);
    String lednya = doc["led"]; //kedua cari isi led on apa off
    Serial.println("lednya : " + lednya);
    

Jadi untuk mendapatkan isi dari message led "on" atau "off" maka diperlukan 2 kali parsing json karena isi dalam "con" juga di syaratkan sebagai JSON. Kenapa begitu? Ya karena itulah standar onem2m yang digunakan jadi harus diikuti saja.




Selengkapnya bisa dilihat pada video berikut ini 



Script lengkap :


// by www.aisi55.com please attach our credential if you using our script
#include <SoftwareSerial.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>

SoftwareSerial mod(4, 5); // RX, TX

const char *ssid =  "nama wifi";  
const char *pass =  "password";

const char *mqtt_server = "mqtt.antares.id";
const int mqtt_port = 1883;
const char *mqtt_user = "";
const char *mqtt_pass = "";
const char *mqtt_client_name = "ahocool1265352";  
//sesuaikan dengan parameter akun antares kamu
#define TOPIKPUB "/oneM2M/req/access:key/antares-cse/json"
#define TOPIKSUB "/oneM2M/resp/antares-cse/access:key/json"
#define accessKey "access:key"
#define projDev "Project_name/Device_name" WiFiClient wclient; PubSubClient client(wclient); byte ledOn[] = {0x05, 0x05, 0x00, 0x00, 0xFF, 0x00, 0x8D, 0xBE};
//ngidupin Led byte ledOff[] = {0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x4E};//matikan Led byte tombol[] = {0x05, 0x02, 0x00, 0x00, 0x00, 0x01, 0xB8, 0x4E};//tombol byte tombolL[] = {0x05, 0x02, 0x01, 0x00, 0xa0, 0xB8}; // tombol Low byte tombolH[] = {0x05, 0x02, 0x01, 0x01, 0x61, 0x78}; // tombol High byte humitemp[] = {0x05, 0x04, 0x00, 0x00, 0x00, 0x03, 0xB1, 0x8F};//baca dht11 byte dhtOK[] = {0x05, 0x04, 0x06} ; byte bufferDataModbus[50]; byte *ptr; bool urut= false; bool led= false; unsigned long previousMillis = 0; String suhunya ="0"; String huminya ="0"; String tomb ="0"; void setup() { Serial.begin(9600); Serial.println(F("ESP8266 Modbus Bridge to ANTARES")); Serial.println(F("http://www.aisi555.com")); Serial.println(); if (WiFi.status() != WL_CONNECTED) { Serial.print("Connecting to Wifi: "); Serial.print(ssid); Serial.println("..."); WiFi.begin(ssid, pass); if (WiFi.waitForConnectResult() != WL_CONNECTED) return; Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } mod.begin(9600); ptr = bufferDataModbus; client.setServer(mqtt_server, mqtt_port); client.setCallback(mqtt_callback); } void reconnectmqtt() { Serial.println("Connecting to MQTT server.."); if (client.connect(mqtt_client_name,mqtt_user, mqtt_pass)) { Serial.println("Connected to MQTT server"); } else { Serial.println("Could not connect to MQTT server"); } if (client.connected()){ Serial.println("subscribe to topic: "); Serial.println(TOPIKSUB); client.subscribe(TOPIKSUB); } } void kirim(String tombol, String suhu, String humi) { Serial.println("publish to antares topik: " ); Serial.print(TOPIKPUB); Serial.print(" : "); Serial.println(tombol + " - " + suhu + " - " + humi ); String pubString ; pubString += F("{"); pubString += F("\"m2m:rqp\": {"); pubString += F("\"fr\": \""); pubString += String(accessKey) ; pubString += F("\","); pubString += F("\"to\": \"/antares-cse/antares-id/"); pubString += String(projDev); pubString += F("\","); pubString += F("\"op\": 1,"); pubString += F("\"rqi\": 123456,"); pubString += F("\"pc\": {"); pubString += F("\"m2m:cin\": {"); pubString += F("\"cnf\": \"message\","); pubString += F("\"con\": \"{\\\"tombol\\\":"); pubString += tombol; pubString += F(",\\\"suhu\\\":"); pubString += suhu; pubString += F(",\\\"humidity\\\":"); pubString += humi; pubString += F("}\""); pubString += F("}"); pubString += F("},"); pubString += F("\"ty\": 4"); pubString += F("}"); pubString += F("}"); char message_buff[pubString.length() + 1]; pubString.toCharArray(message_buff, pubString.length() + 1); client.publish(TOPIKPUB,message_buff); } void loop() { if (!client.connected()) { reconnectmqtt(); } else client.loop(); //cek terus kalau ada data masuk unsigned long currentMillis = millis(); if(currentMillis - previousMillis >= 5000) { // save the last time you read the sensor previousMillis = currentMillis; if(!urut )mod.write(tombol, sizeof(tombol)); else mod.write(humitemp, sizeof(humitemp)); urut =!urut; } long millisResponModbus = millis() + 1000; while (!mod.available()) { if (millisResponModbus < millis()) { break;//timeout } } while (mod.available()) { byte b = mod.read(); *ptr++ = b; Serial.print("0x"); Serial.print(String(b, HEX)); Serial.print(" "); delay(2); } if (memcmp(bufferDataModbus, ledOn, sizeof(ledOn)) == 0) { ptr = bufferDataModbus; memset(bufferDataModbus, 0x00, sizeof(bufferDataModbus)); } else if (memcmp(bufferDataModbus, ledOff, sizeof(ledOff)) == 0) { ptr = bufferDataModbus; memset(bufferDataModbus, 0x00, sizeof(bufferDataModbus)); } else if (memcmp(bufferDataModbus, tombolL, sizeof(tombolL)) == 0) { ptr = bufferDataModbus; tomb="0"; kirim(tomb,suhunya,huminya); memset(bufferDataModbus, 0x00, sizeof(bufferDataModbus)); } else if (memcmp(bufferDataModbus, tombolH, sizeof(tombolH)) == 0) { ptr = bufferDataModbus; tomb="1"; kirim(tomb,suhunya,huminya); memset(bufferDataModbus, 0x00, sizeof(bufferDataModbus)); } else if (memcmp(bufferDataModbus, dhtOK, sizeof(dhtOK)) == 0) { ptr = bufferDataModbus; suhunya = String(ptr[4]) + '.' +String(ptr[6]) ; huminya = String(ptr[8]); kirim(tomb,suhunya,huminya) ; memset(bufferDataModbus, 0x00, sizeof(bufferDataModbus)); } else { ptr = bufferDataModbus; //Serial.println(""); memset(bufferDataModbus, 0x00, sizeof(bufferDataModbus)); } } void mqtt_callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived in topic: "); Serial.println(topic); //Serial.print("Message:"); String message; for (int i = 0; i < length; i++) { message = message + (char)payload[i]; //Conver *byte to String } // Serial.print(message); //kepanjangan makanya di tutup DynamicJsonDocument doc(512); deserializeJson(doc, message); String parsedString = doc["m2m:rsp"]["pc"]["m2m:cin"]["con"]; deserializeJson(doc, parsedString); String lednya = doc["led"]; Serial.println("lednya : " + lednya); if(lednya == "on") { mod.write(ledOn, sizeof(ledOn)); Serial.println("lednya hidup"); } if(lednya == "off") { mod.write(ledOff, sizeof(ledOff)); Serial.println("lednya mati "); } Serial.println(); Serial.println("-----------------------"); }

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