Beranda blog

Belajar Blynk IOT dengan menggunakan ESP8266 dan ESP32

0

BLYNK merupakan sebuah Platform penyedia layanan Cloud untuk layanan Internet of Things. Blynk tersedia plaform berbasis website dan berbasis aplikasi Android ataupun IOS. Blynk terbilang cukup handal dan lengkap untuk dari fitur dalam penggunaan Internet of Things. Blynk mendungkung banyak Device MCU, seperti Arduino, ESP8266, ESP32, dll. Tersedia beberapa koneksi yang dapat digunakan seperti Wifi, Ethernet, dll. Platform Blynk tidak sepenuhnya gratis, namun untuk versi gratisnya terbilang cukup handal dan dapat memenuhi kebutuhan kita untuk project sederhana dan kebutuhan smart home. Untuk versi pro tentunya memiliki banyak sekali keuntungan, namun kita tidak akan membahas itu.
Oke pada artikel ini saya akan membahasa bagaimana Belajar Blynk IOT dengan menggunakan ESP8266 dan ESP32. Tentunya materi kali ini saya akan bahas pada Video yang terbagi menjadi 2 part. untuk keperluan material, seperti progam, library akan saya sediakan diartikel ini. Langsung aja kita masuk ke materinya.

Belajar Blynk Part 1

Belajar Blynk Part 2

Library & Board

- Board ESP8266 JSON    : https://arduino.esp8266.com/stable/package_esp8266com_index.json
- Board ESP32 JSON      : https://espressif.github.io/arduino-esp32/package_esp32_index.json
- Library Blynk Arduino : https://github.com/blynkkk/blynk-library/releases/

Code ESP8266

/* Comment this out to disable prints and save space */
#define BLYNK_PRINT Serial

/* Fill in information from Blynk Device Info here */
#define BLYNK_TEMPLATE_ID ""
#define BLYNK_TEMPLATE_NAME ""
#define BLYNK_AUTH_TOKEN ""

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

// Your WiFi credentials.
char ssid[] = "Las#";
char pass[] = "TukangSolder#";

char lcdBuff[20];
int counting;
unsigned long interval;

WidgetLCD lcd(V0);

void setup() {
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);

  Blynk.virtualWrite(V3, 50);
}

void loop() {

  sprintf(lcdBuff, "NILAI:%03i", counting);
  lcd.print(0, 0, "COUNTING");
  lcd.print(0, 1, lcdBuff);

  if (millis() - interval > 1000) {
    counting++;
    if (counting >= 1000) counting = 0;
    interval = millis();
  }

  Blynk.run();
}

BLYNK_WRITE(V1) {
  int value = param.asInt();
  if (value == 1) {
    digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
    Serial.print(F("LED: "));
    Serial.println(digitalRead(LED_BUILTIN));
  }
}

BLYNK_WRITE(V2) {
  int value = param.asInt();
  if (value == 1) {
    digitalWrite(LED_BUILTIN, LOW);  // ON
  } else {
    digitalWrite(LED_BUILTIN, HIGH);  // OFF
  }
  Serial.print(F("LED: "));
  Serial.println(digitalRead(LED_BUILTIN));
}
BLYNK_WRITE(V3) {
  int value = param.asInt();
  Serial.print(F("SLIDER: "));
  Serial.println(value);
}

 

Code ESP32

/* Comment this out to disable prints and save space */
#define BLYNK_PRINT Serial

/* Fill in information from Blynk Device Info here */
#define BLYNK_TEMPLATE_ID ""
#define BLYNK_TEMPLATE_NAME ""
#define BLYNK_AUTH_TOKEN ""
#define LED_BUILTIN 2

#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

// Your WiFi credentials.
char ssid[] = "Las#";
char pass[] = "TukangSolder#";

char lcdBuff[20];
int counting;
unsigned long interval;

WidgetLCD lcd(V0);

void setup() {
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);

  Blynk.virtualWrite(V3, 50);
}

void loop() {

  sprintf(lcdBuff, "NILAI:%03i", counting);
  lcd.print(0, 0, "COUNTING");
  lcd.print(0, 1, lcdBuff);

  if (millis() - interval > 1000) {
    counting++;
    if (counting >= 1000) counting = 0;
    interval = millis();
  }

  Blynk.run();
}

BLYNK_WRITE(V1) {
  int value = param.asInt();
  if (value == 1) {
    digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
    Serial.print(F("LED: "));
    Serial.println(digitalRead(LED_BUILTIN));
  }
}

BLYNK_WRITE(V2) {
  int value = param.asInt();
  if (value == 1) {
    digitalWrite(LED_BUILTIN, LOW);  // ON
  } else {
    digitalWrite(LED_BUILTIN, HIGH);  // OFF
  }
  Serial.print(F("LED: "));
  Serial.println(digitalRead(LED_BUILTIN));
}
BLYNK_WRITE(V3) {
  int value = param.asInt();
  Serial.print(F("SLIDER: "));
  Serial.println(value);
}

 

Oke bagaimana tutorial diatas, tentunya materi diatas cukup lengkap untuk membantu kalian Belajar Blynk IOT dengan menggunakan ESP8266 dan ESP32. Semoga bermanfaat. Oh ya jangan lupa mampir ke channel Youtube kita dan Subscribe ya.

Download Prog ISP V1.72

0
proisp
Aplikasi Prog ISP V1/72

Prog ISP merupakan sebuah program atau aplikasi untuk mengupload sebuah Program dari Mikrokontroller. Aplikasi ini mendukung Mikrokontroler keluarga ATMEL MCS8051 (AT89S51, dll), keluarga AVR (ATMEGA32, ATMEGA328, ATMEGA8, dll), dan keluarga ATTINY (ATTINY85, dll). Aplikasi support hanya di windows, saya pribadi sering menggunakanya untuk keperluar mengupload program mikrokontroler dalam bentuk file .HEX atau .BIN. Serta saya gunakan untuk mengunci program agar tidak dapat dibaca orang lain. Tampilan ProgISP dapat dilihat dicover artikel ini di atas. Perangkat yang biasa digunakan dan support menggunakan Programmer USBASP atau USBISP Downlaoder. Berikut ini tampilan dari USBASP atau USBISP.

usbasp usbisp
USBasp & USBisp Programmer

 

Sekarang ini sudah susah dicari sumber dan versi terbaru dari aplikasi ini. Saya pribadi tidak tau pembuat resmi dari aplikasi ini, dan sepengalaman saya aplikasi ini aman digunakan. Untuk mendownload aplikasi nya dapat gunakan link di bawah ini:

Download pada link berikut:
 - https://drive.fanselectronics.com/index.php/s/7n9Rya7Dq8QJ37x



 

Video Tutorial

Dalam Proses

Oke itu dia aplikasi Prog ISP V1.72, semoga link download ini membantu kalian, apabila ada yang mengetahui sumber resmi dari aplikasi ini saya akan lampirkan dalam artikel ini. Terima kasih.

Belajar Arduino! Apa Itu Fungsi (Void Setup, Loop)

0
belajar arduino
Belajar Arduino Fungsi | Design by FansElectronics.com

Fungsi pada arduino sudah disiapkan diawal secara default yakni void setup() dan void loop(). Fungsi setup(), akan menjalankan program sekali setelah Arduino pertama kali hudup atau restart. Sedangkan Fungsi loop(), akan dijalankan berulang (looping) terus menerus selama Arduino menyala.

Apa itu void? merupakan type data yang yang digunakan untuk mendeklarasikan sebuah fungsi tanpa mengembalikan sebuah nilai. Kita juga dapat membuat sebuah fungsi baru dengan type data lain, misalnya int, byte, boolean, String, char, char* (array). Untuk mengembalikan nilai data ke dalam fungsi dapat menggunakan perintah return.

Manfaat fungsi apa sih? tentu saja dengan menggunakan fungsi, apa bila kalian memiliki sebuah perintah yang sering digunakan berulang-ulang, menggunakan fungsi jauh lebih baik karena dapat menghemat waktu penulisan kita dalam membuat sebuah program.

Nah pada artikel ini akan Belajar Arduino! Apa Itu Fungsi (Void Setup, Loop). Langsung aja kita masuk ke materinya.

Contoh Fungsi LCD

Dengan menggunakan fungsi, kita dapat menggunakan perintah dalam satu baris saja untuk melakukan print lcd. Berikut contoh program fungsi LCD dalam satu baris.

#include "LiquidCrystal_I2C.h"

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  lcd.begin();

  // Print LCD tanpa Fungsi
  lcd.setCursor(0, 0);
  lcd.print("BELAJAR ARDUINO");

  // Print LCD dengan FUngsi
  lcdPrint(0, 1, "FansElectronics");
}

void loop() {
}

// Print LCD dengan type msg char*
void lcdPrint(uint8_t x, uint8_t y, char* msg) {
  lcd.setCursor(x, y);
  lcd.print(msg);
}
// Print LCD dengan type msg char
void lcdPrint(uint8_t x, uint8_t y, char msg) {
  lcd.setCursor(x, y);
  lcd.print(msg);
}
// Print LCD dengan type msg String
void lcdPrint(uint8_t x, uint8_t y, String msg) {
  lcd.setCursor(x, y);
  lcd.print(msg);
}
// Print LCD dengan type msg int
void lcdPrint(uint8_t x, uint8_t y, int msg) {
  lcd.setCursor(x, y);
  lcd.print(msg);
}
// Print LCD dengan type msg uint8_t
void lcdPrint(uint8_t x, uint8_t y, uint8_t msg) {
  lcd.setCursor(x, y);
  lcd.print(msg);
}
// Print LCD dengan type msg float
void lcdPrint(uint8_t x, uint8_t y, float msg) {
  lcd.setCursor(x, y);
  lcd.print(msg);
}
// bisa tambahkan type data lain dengan nama fungsi sama tidak masalah

Contoh Fungsi Matematika

Untuk melakukan kalkulasi yang terperinci, misal perhitungan sensor, perhitungan matematika lainnya. Kalian dapat gunakan sebuah fungsi untuk mempermudahnya. Berikut contohnya.

void setup() {
  Serial.begin(9600);

  Serial.println(penjumlahan(1, 1));  // 1 + 1
  Serial.println(pengurangan(5, 1));  // 5 - 1
  Serial.println(perkalian(5, 2));    // 5 x 2
  Serial.println(pembagian(10, 2));   // 10 / 2
}

void loop() {
}

// penjumlahan
int penjumlahan(int val1, int val2) {
  return val1 + val2; // kembalikan nilai
}
// pengurangan
int pengurangan(int val1, int val2) {
  return val1 - val2; // kembalikan nilai
}
// perkalian
int perkalian(int val1, int val2) {
  return val1 * val2; // kembalikan nilai
}
// pembagian
float pembagian(int val1, int val2) {
  return val1 / val2; // kembalikan nilai
}

Fungsi Baca Tombol

Fungsi untuk menyederhankan bahasa pada tombol agar mudah dipahami. Kalian juga dapat memanfaatkan fungsi untuk memudahkan bahasa dalam sebuah perintah agar lebih berbahasa manusia.

// PIN
#define BTN A0
#define LED 13

// Logika
#define ON HIGH
#define OFF LOW

void setup() {

  pinMode(BTN, INPUT_PULLUP);
  pinMode(LED, OUTPUT);
}

void loop() {
  if (bacaTombol()) {
    // Program lain ketika tombol ditekan
    // Misal nyalakan LED
    digitalWrite(LED, ON);
  }
}

// baca tombol, agak mudah dipahami
bool bacaTombol(uint8_t pin) {
  // Jika ditekan = LOW, karena pullup
  if (digitalRead(pin) == LOW) {
    return true;  // jika ditekan = true
  }
  return false;  // jika tidak = false
}

Gimana menurut kalian mudah kan? Nah sekian dulu pembahasan Belajar Arduino! Apa Itu Fungsi (Void Setup, Loop) semoga bermanfaat untuk kalian. Apabila ada pertanyaan mari berdiskusi di kolom komentar di bawah. Bye Bye dan Salam Elektronik

Project Arduino Fuel Injector Tester

0
fuel injector tester
Fuel Injector Tester | Design by FansElectronics.com

Fuel Injector merupakan sebuah komponen dari kendaraan bermotor yang digunakan untuk menyemprotkan bahan bakar ke dapur. Secara prinsip kerja Fuel Injector ini mirip sekali dengan Solenoid. Di dalam terdapat sebuah coil yang apabila dialiri Arus listrik, maka coil akan menarik Plunger kebelakang sehingga bahan bakar dalam tekanan tinggi akan keluar. Berikut ilustrasi cara kerja Fuel Injector.

Fuel Injector
Fuel Injector | liveabout.com

Untuk mengatur kecepatan dari buka dan tutup Injector, umumnya dalam kendaraan bermotor, terdapat ECU yang mengirimkan sinyal berdasarkan siklur dan posisi dari Piston. Saat kalian melakukan perawatan kendaraan, umumnya perlu dilakukan testing pada Injector untuk mengecek dari jumlah bahan bakar dalam RPM mesin tertentu. Oleh karena itu dibutuhkan sebuah alat untuk melakukan pengetesan pada komponen ini.

Pada pembahasan kali ini, kita akan belajar membuat sebuah Project Arduino Fuel Injector Tester. Semoga project ini dapat membantu kalian untuk melakukan testing pada Injector Kendaraan kalian.

Skematik Rangkaian

Berikut komponen yang perlu kalian siapkan dan perlu kalian rakit sesuai dengan skematik di bawah ini.

Fuel Injector Tester
Skematik Fuel Injector Tester | Design by FansElectronics.com

Penggunaan driver Mosfet IRFZ44 digunakan untuk driver dari Arduino dengan Injector. Karena tegangan kerja dari Injector umumnya adalah 12V. Apakah bisa ganti mosfet lain selaian IRFZ44? Bisa gunakan Mosfet Type N lain, karena berdasarkan spesifikasinya disini kita butuh mosfet yang mampu menghandle sebagai driver dengan Frequency tinggi.

Program Project

Sebelum upload program di bawah jangan lupa download dulu Library yang dibutuhkan:

//--------------------------------------------------------------
#include "LiquidCrystal_I2C.h"
#include "PWM.h"

#define PWM 9          // PIN PWM
#define BUP A3         // PIN TOMBOL UP
#define BDN A2         // PIN TOMBOL DOWN
#define MAX_RPM 12000  // 200 RPM MAKS

char lcdBuff[17];    // Buffer Sprintf
int frequency = 50;  // Nilai FQ
int rpm = 0;         // Nilai RPM
int last_rpm;        // Nilai terakhir RPM

LiquidCrystal_I2C lcd(0x27, 16, 2);
//--------------------------------------------------------------

void setup() {
  Serial.begin(9600);  // Serial ke PC
  lcd.begin();         // LCD Int

  pinMode(PWM, OUTPUT);        // PWM OUTPUT
  pinMode(BUP, INPUT_PULLUP);  // TOMBOL INPUT INTERNAL
  pinMode(BDN, INPUT_PULLUP);  // TOMBOL INPUT INTERNAL

  // Initialisasi kecuali TIMER0
  // keperluan delay(), dan millis()
  InitTimersSafe();
  SetPinFrequencySafe(PWM, frequency);
}
//--------------------------------------------------------------

void loop() {
  // Tombol
  if (digitalRead(BUP) == LOW) {  // TOMBOL UP DITEKAN
    delay(10);
    rpm = rpm + 10;
    if (rpm > 12000) rpm = 12000;
  }
  //
  else if (digitalRead(BDN) == LOW) {  // TOMBOL DOWN DITEKAN
    delay(10);
    rpm = rpm - 10;
    if (rpm < 0) rpm = 0;
  }

  if (rpm != last_rpm) {
    frequency = map(rpm, 0, MAX_RPM, 0, MAX_RPM / 60);
    SetPinFrequencySafe(PWM, frequency);  // SET FQ
    last_rpm = rpm;                           // Update Last_RPM
    // DEBUG SERIAL
    Serial.print(F("RPM: "));
    Serial.print(rpm);
    Serial.print(F(", FREQUENCY: "));
    Serial.println(frequency);
  }

  // SET Duty Cycle 50% agar sinyal kotak
  if (rpm == 0) pwmWrite(PWM, 0);  // Jika RPM 0 = OFF
  else pwmWrite(PWM, 127);         // 50% DC


  // Print LCD
  lcd.setCursor(0, 0);
  lcd.print("INJECTOR TESTER!");
  sprintf(lcdBuff, "   %05i  RPM   ", rpm);
  lcd.setCursor(0, 1);
  lcd.print(lcdBuff);
}
//--------------------------------------------------------------

 

Hasil Pengujian Frequency

Sebelum lanjut ke pengetesan, kita belajar dulu untuk mensimulasikan alat ini menjadi seperti kendaraan aslinya. Di mana kita perlu merubah nilai Frequency sama dengan nilai RPM dari kendaraan. Disini saya kurang paham jumlah pulsa setiap putaran koil dari setiap motor, untuk sederhananya saya menggunakan tool kalkulator berikut agar mempermudah perhitungan jumlah RPM ke Hz.

fuel injector tester
Pengujian Alat | Photo by FansElectronics.com
pwm arduino
PWM 50 Hz | Photo by FansElectronics.com

Dari contoh di atas, didapatkan padah frequency 1Hz = 60 RPM sehingga ketika kita test dengan 50Hz maka didapatkan nilai 3000 RPM. Untuk lebih jelas bisa tonton video di bawah ini.

Video Simulasi Testing

Sekian dulu dari saya, semoga jelas dan dapat dimanfaatkan dengan baik ilmunya. Jangan lupa komentar jika ada pertanyaan dan join ke website kita dan channel Youtube kita. Semoga bermanfaat, terima kasih dan Salam Elektronik.

Pemrograman Arduino LCD Menu Dengan Tombol

0

Banyak sebelumnya temen-temen yang request terkait LCD menu dengan menggunakan tombol. Dengan menggunakan LCD dan Tombol kita semua juga dapat membuat sebuah menu untuk dibuat di project kita. Untuk mempermudah pembahasannya saya buatkan dalam bentuk Video dengan 6 Part. Namun sebelum lanjut, siapkan dulu komponen sesuai dengan skematik berikut.

skematik arduino menu tombol
Skematik Arduino Menu LCD Tombol | Design by FansElectronics.com

Playlist Video

Berikut keseluruan Playlist dibagi menjadi 1 s/d 6 part video. Yuk langsung saja silahkan disimak baik-baik dan siapkan kopi kalian, hehe.

Oke sekian Tutorial kali ini semoga bermanfaat, mampir juga ke Channel Youtube kita ya, untuk pertanyaan bisa tuliskan di kolom komentar di bawah atau di video tersebut. Semoga bermanfaat. Salam Elektronik.

Tutorial Setting Frequency PWM Arduino

0
pwm arduino
Setting PWM Frequency Arduino | Design by FansElectronics.com

PWM atau Pulse Width Modulation yang dalam Bahasa disebut Modulasi Lebar Pulsa, merupakan suatu teknik modulasi yang mengubah lebar pulsa (pulse width) dengan nilai frekuensi dan amplitudo yang tetap. Umumnya pada Arduino kita sering menggunakan teknik ini untuk mengatur kecerahan sebuah LED, kecepatan sebuah Motor, dll. PWM juga memiliki istilah Duty Cycle yaitu ration antara sinyal dalam kondisi ON atau OFF. Aga mudah dipaham berikut ilustrasi Duty Cycle.

duty cycle pwm
Duty Cycle | learn.sparkfun.com

Semoga dari ilustrasi ini kalian bisa paham. Sedangkan Frequency yaitu jumlah pulsa dalam satuan waktu (detik). Namun secara default PWM Arduino memiliki Frequency yang sudah diset kisaran 900Hz. Nah pada artikel ini kita akan belajar Tutorial Setting Frequency PWM Arduino dan Duty Cycle.

Skematik

Dalam simulasinya tentunya temen perlu memiliki Oscilloscope, namun disini kita juga bisa menggunakan outputan berupa led seperti berikut.

skematik arduino led
Arduino LED | docs.arduino.cc

Program PWM Tanpa Library

Disini saya akan coba memberikan tutorial program untuk akses PWM dengan menggunakan perintah analogWrite(PIN, DUTY CYCLE);. Pin PWM pada Arduino Uno terdapat tanda ~ pada kaki pinya. Sebagai contoh kita gunakan Pin 9. Bawaan Arduino hanya dapat mengatur nilai Duty Cycle saja dimana nilainya antara 0 s/d 25. Berikut ini program untuk akses PWM bawaan Arduino.

#define PIN_PWM 9

void setup() {

  pinMode(PIN_PWM, OUTPUT);

  // Set Duty Cycle 50%
  analogWrite(PIN_PWM, 127);
}

void loop() {
}

Berikut hasil pengukuran yang saya dengan Oscilloscope. Terlihat nilai Frequency dan Duty Cycle.

pwm arduino
PWM analogWrite() | Photo by FansElectronics.com

Program PWM dengan Library Frequency

Dengan library ini sepengalaman saya hanya berfungsi pada pin Pin 9 dan 10 (berdasarkan testing). Sebelum lanjut silahkan download librarynya dilink berikut:

#include <PWM.h>

#define PIN_PWM 9

int frequency = 50;  // 50Hz

void setup() {

  // Initialisasi kecuali TIMER0
  // keperluan delay(), dan millis()
  InitTimersSafe();

  SetPinFrequencySafe(PIN_PWM, frequency);
  // Set Duty Cycle 50%
  pwmWrite(PIN_PWM, 127);
}

void loop() {
}

Berikut ini hasil pengukuran Frequency dan Duty Cycle yang saya ukur dengan settingan Duty Cycle 50% atau 127 dalam desimal dan Frequency 50Hz.

pwm arduino
PWM 50 Hz | Photo by FansElectronics.com

Pemanfaat Pengaturan Frequency

Dengan menggunakan library ini, kalian dapat membuat sebuah project untuk membuat pulsa generator yang dapat diatur. Sebagai contoh saya gunakan sebagai alat tester Injetor Bensin kendaraan bermotor. Gimana menurut kalian? mari diskusikan di kolom komentar dibawah. Semoga bermanfaat, salam Elektronik.

Tutorial Kirim dan Baca Telegram BOT Dengan SIM800L dan Arduino

0
skematik sim800l arduino
Skema SIM800L Arduino Uni 1 | Design by FansElectronics.com

Sebelumnya di channel youtube kita sudah bahas cara akses Telegram BOT dengan menggunakan ESP8266. Ada sedikit kekurangan untuk beberapa project yang membutuhkan koneksi internet tanpa jaringan WIFI. Sekarang kita akan bahas bagaimana cara pemprogram akses dengan memanfaatkan komunikasi SIM800OL agar dapat mengakses internet tanpa harus menggunakan WIFI dan hanya menggunakan kartu Perdana Telekomunikasi dengan menggunakan Paket Data.

SIM800L disini yang akan saya gunakan adalah SIM800L V2, dimana secara kestabilan dan berdasarkan pengalaman menggunakan SIM800L yang kecil merah sangat tidak saya rekomendasikan, karena susahnya dapat sinyal dan kendal-kendala aneh lain. Berikut perbedaan SIM800L V1 dan V2:

Skematik

Silahkan kalian rakit rangkaian berikut untuk melakukan komunikasi dengan Arduino Uno dan SIM800L berlaku juga dengan V1, sesuaikan saja konfirgurasi Pinnya.

skematik sim800l arduino
Skema SIM800L Arduino Uni 1 | Design by FansElectronics.com

Menggunkan module LM2596 sebagai stepdown untuk mendapatkan arus lebih dari 2A bisa menggunakan versi ini atau Arduino bisa menggunkan jalur supply regulator yang terpisah

skematik sim800l arduino
Skema SIM800L Arduino Uni 1 | Design by FansElectronics.com

Daftar Telegram BOT

Karena cara daftar telegram bot sudah pernah saya jelaskan di video saya di youtube. Kalian bisa tonton dulu cara daftarnya di video bawah ini:

Program AT Command

Untuk cek koneksi ke SIM800l dan cek kondisi module apakah aman, kalian bisa menggunakan program dibawah ini untuk memastikanya:

AT Command GPRS

Berikut daftar AT Command untuk melakukan koneksi GPRS dengan SIM800L

// Set Koneksi
AT+SAPBR=3,1,"CONTYPE","GPRS"
// Set APN, cari sendiri jenis APN perdana kalian, saya pakai XL
AT+SAPBR=3,1,"APN","internet"
// Set Settingan Diatas
AT+SAPBR=1,1
// Initialisasi ke HTPP
AT+HTTPINIT
AT+HTTPPARA="CID",1

// Karea
AT+HTTPPARA="URL","http://tryiot.online/telegram.php?token=BOT_TOKEN_KALIAN&chat_id=CHAT_ID)KALIAN&text=FansElectronics"
AT+HTTPACTION=0
AT+HTTPREAD
AT+HTTPTERM
AT+SAPBR=0,1

Dengan menggunakan program di atas kalian dapat mengirim perintah AT Command secara langsung melalui Serial Monitoring ARDUINO IDE.

Program PHP

Karena SIM800L terkadang terkendala koneksi SSL dan TSL 1.0 biasanya saya jembatanin menggunakan website pribadi saya untuk konekasinya:

<?php
if(isset($_GET['token']) && isset($_GET['chat_id']) && isset($_GET['text'])){
    $text = $_GET['text'];
    $token = $_GET['token'];
    $chat_id = $_GET['chat_id'];
    $json = file_get_contents('https://api.telegram.org/bot'.$token.'/sendMessage?chat_id='.$chat_id.'&text='.$text.'&parse_mode=Markdown');
}
else if(isset($_GET['token']) && isset($_GET['limit']) && isset($_GET['offset'])){
    $token = $_GET['token'];
    $limit = $_GET['limit'];
    $offset = $_GET['offset'];
    $json = file_get_contents('https://api.telegram.org/bot'.$token.'/getUpdates?limit='.$limit.'&offset='.$offset);
}else{
    $json = json_encode([]);
}

echo $json . '@';

Buat file php upload ke hosting kalian, kalau kurang paham coba aja pakai api dari saya ini:

  • KIRIM PESAN: “http://tryiot.online/telegram.php?token=BOT_TOKEN_KALIAN&chat_id=CHAT_ID_KALIAN&text=PESAN TEXT
  • BACA PESAN: http://tryiot.online/telegram.php?token=BOT_TOKEN_KALIAN&limit=1&offset=0

Program Kirim dan Baca Telegram Tanpa Delay

Berikut ini program Kirim dan Baca pesan Telegram tanpa delay disetiap AT Commandnya, agak tidak menggangu alur kerja program lain juga.

//---------------------------------------------------------------------------

#include <ArduinoJson.h>
#include <SoftwareSerial.h> 
// Define PIN
#define LED 13
// Define LOGIKA
#define ON 1
#define OFF 0

//---------------------------------------------------------------------------

const String bot_token = "BOT_TOKEN";
const String chat_id = "CHAT_ID";

//---------------------------------------------------------------------------

String response, json, message, send_message;
long offset;
int step_cmd;
bool send_telegram, response_cmd;
unsigned long response_timeout;

StaticJsonDocument<1000> doc;
SoftwareSerial SIM(8,9);
//---------------------------------------------------------------------------

void setup() {
  Serial.begin(9600);  // Serial KE PC
  SIM.begin(9600);     // Serial ke SIM
}
//---------------------------------------------------------------------------

void loop() {
  if (send_telegram) sendTelegram();  // Jika saat Kirim Pesan, akan dibaca
  else readTelegram();                // Jika Tidak ada kirim pesan, baca pesan masuk
                                      //
  if (message == "!LEDON") {          // Pesan Masuk !RLYON
    Serial.println("LED ON");
    sendMessage("LED ON");
    digitalWrite(LED, ON);
    message = "";
  } else if (message == "!LEDOFF") {  // Pesan Masuk !RLYOFF
    Serial.println("LED OFF");
    sendMessage("LED OFF");
    digitalWrite(LED, OFF);
    message = "";
  }
  // LANJUT PROGRAM UTAMA KALIAN, TANPA DELAY, TETEP LOOPING
}
//---------------------------------------------------------------------------
//-------------------------------------------------------------------------------
void sendMessage(String msg) {
  step_cmd = 1;
  send_message = msg;
  send_telegram = true;
}
//-------------------------------------------------------------------------------
void sendCommand(String cmd) {
  SIM.println(cmd);
  response_cmd = true;
  response_timeout = millis();
}
//-------------------------------------------------------------------------------
void sendTelegram() {
  if (step_cmd == 1 && !response_cmd) sendCommand("AT+HTTPTERM");
  if (step_cmd == 2 && !response_cmd) sendCommand("AT+SAPBR=0,1");
  else if (step_cmd == 3 && !response_cmd) sendCommand("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");
  else if (step_cmd == 4 && !response_cmd) sendCommand("AT+SAPBR=3,1,\"APN\",\"internet\"");
  else if (step_cmd == 5 && !response_cmd) sendCommand("AT+SAPBR=1,1");
  else if (step_cmd == 6 && !response_cmd) sendCommand("AT+HTTPINIT");
  else if (step_cmd == 7 && !response_cmd) sendCommand("AT+HTTPPARA=\"CID\",1");
  else if (step_cmd == 8 && !response_cmd) sendCommand("AT+HTTPPARA=\"URL\",\"http://tryiot.online/telegram.php?token=" + bot_token + "&chat_id=" + chat_id + "&text=" + send_message + "\"");
  else if (step_cmd == 9 && !response_cmd) sendCommand("AT+HTTPACTION=0");
  else if (step_cmd == 10 && !response_cmd) sendCommand("AT+HTTPTERM");
  else if (step_cmd == 11 && !response_cmd) sendCommand("AT+SAPBR=0,1");
  // SETELAH COMMAND DIKIRIN, TUNGGU RESPONSE
  if (response_cmd) {                                          // WAITING RESPON
    if (SIM.available() > 0) {                                 // Tunggu Serial Masuk
      response = SIM.readString();                             // Baca Semua Response
      if (response.indexOf("OK") or response.indexOf("ER")) {  // Jika Response OK
        Serial.println(response);                              // Jika Response OK
        response_cmd = false;                                  //
        step_cmd++;                                            //
      }                                                        //
    }                                                          //
                                                               // Waktu Tunggu
    if (millis() - response_timeout > 3000) {                  // TIMEOUT REPONSE
      response_cmd = false;                                    //
      step_cmd++;                                              //
    }                                                          //
  }                                                            //
                                                               // Jika Step selesai
  if (step_cmd > 11) {
    step_cmd = 1;
    send_telegram = false;
    response_cmd = false;
  }
}
//-------------------------------------------------------------------------------
void readTelegram() {
  if (step_cmd == 1 && !response_cmd) sendCommand("AT+SAPBR=0,1");
  else if (step_cmd == 2 && !response_cmd) sendCommand("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");
  else if (step_cmd == 3 && !response_cmd) sendCommand("AT+SAPBR=3,1,\"APN\",\"internet\"");
  else if (step_cmd == 4 && !response_cmd) sendCommand("AT+SAPBR=1,1");
  else if (step_cmd == 5 && !response_cmd) sendCommand("AT+HTTPINIT");
  else if (step_cmd == 6 && !response_cmd) sendCommand("AT+HTTPPARA=\"CID\",1");
  else if (step_cmd == 7 && !response_cmd) sendCommand("AT+HTTPPARA=\"URL\",\"http://box-paket.online/telegram.php?token=" + bot_token + "&limit=1&offset=" + String(offset) + "\"");
  else if (step_cmd == 8 && !response_cmd) sendCommand("AT+HTTPACTION=0");
  else if (step_cmd == 9 && !response_cmd) sendCommand("AT+HTTPREAD");
  else if (step_cmd == 10 && !response_cmd) sendCommand("AT+HTTPTERM");
  else if (step_cmd == 11 && !response_cmd) sendCommand("AT+SAPBR=0,1");
  // SETELAH COMMAND DIKIRIN, TUNGGU RESPONSE
  if (response_cmd) {                                               // WAITING RESPON
    if (SIM.available() > 0) {                                      // Tunggu Serial Masuk
      response = SIM.readString();                                  // Baca Semua Response
      if (response.indexOf("OK") or response.indexOf("ER")) {       // Jika Response OK
        Serial.println(response);                                   // Jika Response OK
        if (step_cmd == 9) {                                        //
          json = parsingJSON(response);                             //
          Serial.print("JSON: ");                                   //
          Serial.println(json);                                     // Jika Response OK
          DeserializationError error = deserializeJson(doc, json);  //
          if (!error) {                                             // Jika JSON BENAR
            Serial.println(F("JSON PARSING BERHASIL"));             //
            if (doc["ok"] == true) {                                // JSON OK true
              Serial.println(F("BERHASIL PARSING JSON"));           //
              String update_id = doc["result"][0]["update_id"];     // UPDATE ID
              String msg = doc["result"][0]["message"]["text"];     //
              if (update_id != "null") {                            //
                offset = update_id.toInt() + 1;                     //
                message = msg;                                      //
                Serial.println("UPDATE ID: " + update_id);          //
                Serial.println("OFFSET ID: " + String(offset));     //
                Serial.println("MESSAGET : " + message);            //
              }                                                     //
            }                                                       //
          } else {                                                  //
            Serial.println(F("JSON PARSING GAGAL"));                //
            Serial.print(F("deserializeJson() failed: "));          //
            Serial.println(error.f_str());                          //
          }                                                         //
        }                                                           //
        if (step_cmd != 8) {                                        //
          response_cmd = false;                                     //
          step_cmd++;                                               //
        }                                                           //
      }                                                             //
    }                                                               //
                                                                    // Waktu Tunggu
    if (millis() - response_timeout > 10000) {                      // TIMEOUT REPONSE
      response_cmd = false;                                         //
      step_cmd++;                                                   //
    }                                                               //
  }                                                                 //
                                                                    // Jika Step selesai
  if (step_cmd > 11) {
    step_cmd = 1;
    send_telegram = false;
    response_cmd = false;
  }
}


//-------------------------------------------------------------------------------
// Parsing JSON agar bersih full JSON saja
String parsingJSON(String data) {
  String payload = "";
  int len = data.length();
  bool start = false;
  for (int i = 0; i < len; i++) {
    if (!start) {
      if (data[i] == '{') {
        start = true;
        payload = payload + data[i];
      }
    } else {
      if (data[i] == '@') break;
      else if (data[i] == '\n') continue;
      else payload = payload + data[i];
    }
  }
  return payload;
}

 

Video Tutorial Lengkap

Gimana menurut kalian? gampang dan mudah kan, adapun beberapa kendala yang kalian alami, join ke website ini dan tinggalkan komentar di bawah mari berdiskusi dengan sehat. Terma kasih semoga bermanfaaat tutorial ini. Salam Elektronik.

Tutorial Arduino Sensor NTC Thermistor 10K

0
Tutorial Sensor NTC Arduino
Tutorial Sensor NTC Arduino | Photo by FansElectronics.com

Halo Salam Elektronika, pada tutorial kali ini saya akan membahas tentang sensor Thermistor atau NTC dengan nilai 10K yang digunakan disini. Sebelum lebih jauh alangkah baiknya kita kenalan dulu dengan Sensor Thermistor ini.

Thermistor merupakan sebauh Resistor yang perubahan nilai hambatanya terpengarui dengan perubahan suhu sekitarnya. Thermistor memiliki 2 jenis NTC dan PTC (Negatif Temperature Coefficient atau Positif Temperature Coefficient). Yang artinya untuk NTC semakin tinggi suhu semakin mengecil nilai Hambatanya dan sebaliknya PTC semakin tingg suhu semakin tinggi nilai hambatanya. Sampai disini paham ya 😀

Skematik Rangkaian ke Arduino

Oke sebelum masuk ke pemrograman, silahkan rakit Arduino kalian sesuai dengan skematik di bawah ini.

Skematik NTC
Skematik NTC | electronicwings.com

Source Code

Pada program NTC ini tidak dibutuhkan library apapun, silahkan kalian install saja Arduino IDE dan kemudian upload program berikut:

Untuk Tutorial Instalasi Arduino silahkan baca artikel berikut:

//------------------------------------------------------------------------------
#define NTC_PIN A1

void setup() {
  Serial.begin(9600);  // Debug ke PC
}
//------------------------------------------------------------------------------

void loop() {
  float celcius = getTemperature(NTC_PIN, 'C');
  float farenheit = getTemperature(NTC_PIN, 'F');
  float kelvin = getTemperature(NTC_PIN, 'K');
  Serial.print("TEMP: \t");
  Serial.print(celcius);
  Serial.print("C \t");
  Serial.print(farenheit);
  Serial.print("F \t");
  Serial.print(kelvin);
  Serial.println("K \t");
}

//------------------------------------------------------------------------------
float getTemperature(uint8_t pin, char unit) {
  const float R1 = 10000;  // Nilai Resistor ke GND 10K / 10000 ohm
  const float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;
  int adc = analogRead(pin);
  float R2 = R1 * (1023.0 / (float)adc - 1.0);
  float logR2 = log(R2);
  float T = (1.0 / (c1 + c2 * logR2 + c3 * logR2 * logR2 * logR2));  // KElvin
  float Tc = T - 273.15;                                             // CELCIUS
  float Tf = (Tc * 9.0) / 5.0 + 32.0;                                // FARENHEIT
  if (unit == 'K') return T;
  else if (unit == 'F') return Tf;
  else return Tc;
}

Video Tutorial

Untuk memudahkan pembelajaran dalam bentuk video silahkan tonton juga video Youtube berikut:

Oke gimana mudah kan, semoga artikel ini membantu dalam pemrogram sensor NTC kalian. Salam Elektronika

Tutorial Instalasi Arduino IDE dan Driver di Windows

0
Belajar ARduino Installasi Arduino IDE
Instalasi Arduino IDE | Design by FansElectronics.com

Arduino IDE (Integrated Development Environment) merupakan program yang digunakan untuk membuat sebuah kode program untuk perangkat Arduino. Disebut sebagai IDE karena banyak sekali fasilitas yang sudah ditanamkan di dalam satu aplikasi ini. Mulai dari Kode Editor, Serial Monitoring, Serial Plotter, Debuging, Programmer, dll. Oleh karena itu Arduino IDE sangat enak digunakan bagi awam, karena tidak perlu memperlajari aplikasi-aplikasi lain dalam mengembangkan project-project Arduino.

Download Arduino IDE

Untuk mendownload Arduino IDE versi 1.X atau 2.X dapat download di situs resminya secara langsung di:

https://www.arduino.cc/en/software

Tutorial Install Arduino IDE 1.X

Dalam tutorial ini saya anggap kalian download versi installer (.exe). Silahkan buka dan install aja seperti biasa. Centang semua Driver seperti berikut:

Instalasi Arduino
Checklist Driver | docs.arduino.cc

Pilih lokasi instalasi, sesuaikan dengan kebutuhan kalian:

Instalasi Arduino
Path Location Installasi | docs.arduino.cc

Tunggu proses installasi selesai

Instalasi Arduino
Proses Installasi | docs.arduino.cc

Buka Arduino IDE, dan berikut tampilan dari Arduino IDE versi 1.X.

Arduino IDE
Instalasi Arduino | Screenshot by FansElectronics.com

Tutorial Install Arduino IDE 2.X

Download dan buka Installer Arduino IDE 2.X.

Instalasi Arduino
Arduino IDE V2 Installer | docs.arduino.cc

Ikuti Step by Step Instalasi berikut:

Instalasi Arduino
Step by Step Instalasi Arduino IDE 2 | docs.arduino.cc

Berikut ini adalah tampilan dari Arduino IDE 2.0.3, saat artikel ini dibuat:

Arduino IDE 2.0.3
Arduino IDE 2.0.3 | docs.arduino.cc

 

Untuk lebih jelasnya dan mudah dipahami, kalian bisa tonton  video berikut ini untuk pengalaman yang lebih baik.

Oke sekian dulu tutorial ini semoga bermanfaat, jangan lupa tinggalkan komentar dan join kita di website ini. Salam Elektronik.

Link Download Library Arduino Yang Membantu Kalian

0
library arduino
Library Arduino | peppe8o.com

Arduino terkenal dikarenakan banyaknya pustaka, atau library yang sangat memudahkan kita dalam membuat sebuah project elektronika yang khususnya menggunakan mikrokontroler. Dengan adanya Library kita dapat mempersingkat waktu kita dalam membuat mengakses atau menjalankan perintah dari sebuah module-module yang ada, karena segala sesuaitunya sudah disediakan di dalam Library tersebut.

Untuk kalian yang tidak paham sebenarnya apasih library pada Arduino itu. Library Arduino merupakan sekumpulan fungsi-fungsi yang dalam kita panggil untuk menjalankan sebuah perintah yang sering kita ulang. Sebagai contoh kita akan membuat sebuah program sederhana yang agar memudahkan untuk dipahami. Berikut contoh program sederhana

// Fungsi Setup, dijalankan sekali
void setup() {
  Serial.begin(9600);
  Serial.println(penjumlahan(1, 2));  // 1+2 = 3
}
// Fungsi Looping, dijalankan sampai restart
void loop() {
}
// Fungsi penjumlahan 2 variable
int penjumlahan(int a, int b) {
  return a + b;
}

Dari perintah diatas, terdapat fungsi penjumlahan(), dimana dapat melakukan perintah penjumlahan dengan cara kita memasukan variable yang ingin kita jumlahkan. Sehingga menghemat waktu dan apabila fungsi ini sering digunakan juga akan menghemat memory dari program yang kita tulis.

Nah dari sini setidaknya kalian sedikit paham tentang library bukan? Sesuai judul artikel ini. Disini Fans Electronics akan membagikan kumpulan libary-library yang sering kita gunakan, dan kita mengumpulkannya dalam satu repository agar lebih mudah sebagai backup pribadi. Semua library tersebut tentunya bukan buatan kita pribadi. Namun apabila kalian mengetahui Repository resminya silahkan download langsung disana. Namun disini saya gunakan untuk kalian agar tidak repot kedepannya dalam mengikuti seluru pelajaran yang ada di Blog ini. Berikut ini link Downloadnnya:

https://github.com/FansElectronics/FansElectronics-Arduino-Libraries

Baiklah semoga bermanfaat link diatas, kita ketemu di next artikel salam Fans Electronics.