Pages

Subscribe Twitter Twitter

Wednesday, August 21, 2019

Mengirimkan Data Menggunakan LoRa

Ide:
Pada project kali ini akan  mengirim data menggunakan LoRa. Jika koneksi terhubung, maka pengirim akan mengirimkan data counter.

Alat & Bahan:
  • 2 ESP32
  • LoRa Transmitter Tranceiver module
  • 8 Kabel Jumper Female-female
Scematic Rangkaian:

sebelum memulai pastikan install library LoRa terlebih dahulu. Buka aplikasi Arduino IDE, keudian klik Sketch>>Include Library>>Manage Library>>Manage Libraries kemudian cari LoRa, Pilih LoRa Library kemudian klik install. Tunggu hingga proses selesai.



Selanjutnya meng-upload program ke Board ESP32. Berikut ini merupakan program yang digunakan ESP32 untuk mengatur LoRa sebagai pengirim data:

/*********
  Modified from the examples of the Arduino LoRa library
  More resources: https://randomnerdtutorials.com
*********/


#include <SPI.h>
#include <LoRa.h>

//define the pins used by the transceiver module
#define ss 5
#define rst 14
#define dio0 2

int counter = 0;

void setup() {
//initialize Serial Monitor
Serial.begin(115200);
while (!Serial);
Serial.println("LoRa Sender");

//setup LoRa transceiver module
LoRa.setPins(ss, rst, dio0);

//replace the LoRa.begin(---E-) argument with your location's frequency
//433E6 for Asia
//866E6 for Europe
//915E6 for North America
while (!LoRa.begin(866E6)) {
Serial.println(".");
delay(500);
}
// Change sync word (0xF3) to match the receiver
// The sync word assures you don't get LoRa messages from other LoRa transceivers
// ranges from 0-0xFF
LoRa.setSyncWord(0xF3);
Serial.println("LoRa Initializing OK!");
}

void loop() {
Serial.print("Sending packet: ");
Serial.println(counter);

//Send LoRa packet to receiver
LoRa.beginPacket();
LoRa.print("hello ");
LoRa.print(counter);
LoRa.endPacket();

counter++;

delay(10000);
}


Selanjutnya meng-upload program ke Board ESP32. Berikut ini merupakan program yang digunakan ESP32 untuk mengatur LoRa sebagai penerima data:

/*********
  Modified from the examples of the Arduino LoRa library
  More resources: https://randomnerdtutorials.com
*********/


#include <SPI.h>
#include <LoRa.h>

//define the pins used by the transceiver module
#define ss 5
#define rst 14
#define dio0 2

void setup() {
//initialize Serial Monitor
Serial.begin(115200);
while (!Serial);
Serial.println("LoRa Receiver");

//setup LoRa transceiver module
LoRa.setPins(ss, rst, dio0);

//replace the LoRa.begin(---E-) argument with your location's frequency
//433E6 for Asia
//866E6 for Europe
//915E6 for North America
while (!LoRa.begin(866E6)) {
Serial.println(".");
delay(500);
}
// Change sync word (0xF3) to match the receiver
// The sync word assures you don't get LoRa messages from other LoRa transceivers
// ranges from 0-0xFF
LoRa.setSyncWord(0xF3);
Serial.println("LoRa Initializing OK!");
}

void loop() {
// try to parse packet
int packetSize = LoRa.parsePacket();
if (packetSize) {
// received a packet
Serial.print("Received packet '");

// read packet
while (LoRa.available()) {
String LoRaData = LoRa.readString();
Serial.print(LoRaData);
}

// print RSSI of packet
Serial.print("' with RSSI ");
Serial.println(LoRa.packetRssi());
}
}
Pada program tersebut transmitter akan mengirim data "hello  (0-seterusnya (counter up))". Apabila sudah selesai upload dapat dilihat pada serial monitor ESP32 sebagai pengirim data akan muncul sending packet 0 dan seterusnya sesuai dengan program yang dibuat megnirim data counter up. dan serial monitor ESP32 sebagai penerima data akan muncul Receive Packet "hello 0" dan seterusnya sesuai data yang dikirim berupa data counter up dari pengirim.
Untuk lebih jelasnya dapat lihat video nya disini.



Tuesday, August 20, 2019

Menguji Jaringan X-Bee Menggunakan X-CTU

Ide:

Pengujian jaringan X-Bee dilakukan menggunakan X-CTU, perangkat lunak gratis yang disediakan oleh Digi (produsen X-Bee). Menghubungkan transmittance dan receiver agar dapat saling berkomunikasi.

Alat & Bahan:

1. X-Bee (transmittance & receiver)
2. kabel USB (2 buah)
3. Kabel Jumper F-F
4. Software X-CTU

Cara Kerja:

1. Hubungkan X-Bee ke PC menggunakan kabel USB. Pastikan driver X-CTU sudah diinstall dan sudah menetapkan nomor port. Kemudian buka software X-CTU> klik 'add device' . Untuk pengguna windows pilih "Port Serial USB" sedangkan pengguna Mac pilih "usbserial-XXXXXXXX", jika menggunakan papan USB XBee. Jika menggunakan Serial Explorer, pilih opsi "Port Komunikasi". Jika Serial Explorer tidak muncul, pastikan saklar onboard diatur ke "Aktif". Setelah itu klik Finish.



2. Klik new modul, dan X-CTU akan membaca pengaturan konfigurasi XBee Anda. Gambar di bawah ini menunjukkan XBee yang terhubung ke XCTU.
An XBee module selected, configuration view

3. Jika menggunakan XBee Seri 3, Anda akan memiliki pengaturan konfigurasi yang berbeda, klik tombol pembaruan firmware. Jika Anda menggunakan XBee Seri 1, cukup pindah ke langkah berikutnya untuk mengonfigurasi XBees.

Sebuah jendela akan muncul yang menunjukkan jenis-jenis firmware yang tersedia untuk flash. Secara default, ini akan terdaftar sebagai protokol fungsi Digi XBee2 Zigbee 3.0 TH. Dalam percobaan ini, akan menggunakan set fungsi Digi XBee3 802.15.4 TH. Lalu klik tombol update.

Update Firmware

4. Untuk menguji komunikasi, transmittance dan receiver X-Bee keduanya harus terhubung ke komputer. Itu berarti melakukan "Add Device".

Jika Anda memiliki komputer lain, Anda dapat menginstal X-CTU dan melakukan pengaturan yang sama. Anda tentu dapat melakukan tes ini dengan kedua X-Bee yang terhubung ke komputer yang sama juga, pastikan Anda memilih nomor port yang benar ketika Anda menambahkan X-Bee kedua.
Jika Anda menambahkan X-Bee kedua ke komputer yang sama, entri kedua akan ditambahkan ke daftar "Radio Modules".
Two XBees in one X-CTU

5. Klik 'Switch to Consoles' untuk mengirim karakter. Ketikan beberapa karakter dan kirimkan. Dibawah ini merupakan tampilan serial X-Bee pertama:

tampilan pada X-Bee kedua:

Kedua perangkat ini dapat saling berkomunikasi (mengirim dan menerima karakter). Pengiriman dan penerimaan pesan dilakukan dalam bahasa ASCII.



Sunday, August 18, 2019

Mengukur Jarak berbasis ESP32 dan Sensor Ultrasonik (Platform ThingsBoard)

Ide:

Idenya adalah mengukur jarak menggunakan sensor ultrasonik dimana ESP32 berperan sebagai pemproses data dan mengirimkan data yang telah diolah ke platform IoT. Platform ThingsBoard digunakan untuk menampilkan hasil data sensor ultrasonik dalam bentuk grafik

Alat & Bahan:

1. ESP32 & Kabel USB
2. Sensor Ultrasonik
3. Breadboard & Jumper

Scematic Rangkaian:



Program:

#include <WiFi.h> // WiFi control for ESP32
#include <ThingsBoard.h> // ThingsBoard SDK
// Helper macro to calculate array size
#define COUNT_OF(x) ((sizeof(x)/sizeof(0[x])) / ((size_t)(!(sizeof(x) % sizeof(0[x])))))
int quant = 20;
// WiFi access point
#define WIFI_AP_NAME "rea"
// WiFi password
#define WIFI_PASSWORD "rearamada12"
int send_passed = 0;
// See https://thingsboard.io/docs/getting-started-guides/helloworld/
// to understand how to obtain an access token
#define TOKEN "token"
// ThingsBoard server instance.
#define THINGSBOARD_SERVER "demo.thingsboard.io"
int send_delay = 2000;
// Baud rate for debug serial
#define SERIAL_DEBUG_BAUD 115200
const int trigPin = 2;
const int echoPin = 5;
bool subscribed = false;
// defines variables
long duration;
int distance;

// Initialize ThingsBoard client
WiFiClient espClient;
// Initialize ThingsBoard instance
ThingsBoard tb(espClient);
int status = WL_IDLE_STATUS;

void setup() {
// Initialize serial for debugging
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
Serial.begin(SERIAL_DEBUG_BAUD);
Serial.print("Connecting to: "); Serial.println(WIFI_AP_NAME);
WiFi.begin(WIFI_AP_NAME, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected\n");
}
void loop() {
send_passed += quant;
delay(quant);
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);

// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);

// Calculating the distance
distance= duration*0.034/2;

// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);
if (WiFi.status() != WL_CONNECTED) {
return;
}
if (!tb.connected()) {
subscribed = false;

// Connect to the ThingsBoard
Serial.print("Connecting to: ");
Serial.print(THINGSBOARD_SERVER);
Serial.print(" with token ");
Serial.println(TOKEN);
if (!tb.connect(THINGSBOARD_SERVER, TOKEN)) {
Serial.println("Failed to connect");
return;
}
}

if (send_passed > send_delay) {
Serial.println("Sending data...");

// Uploads new telemetry to ThingsBoard using MQTT.
// See https://thingsboard.io/docs/reference/mqtt-api/#telemetry-upload-api
// for more details

tb.sendTelemetryFloat("distance", distance);
send_passed = 0;
}
// Process messages
tb.loop();
}
void InitWiFi()
{
Serial.println("Connecting to AP ...");
// attempt to connect to WiFi network

WiFi.begin(WIFI_AP_NAME, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to AP");
}

void reconnect() {
// Loop until we're reconnected
status = WiFi.status();
if ( status != WL_CONNECTED) {
WiFi.begin(WIFI_AP_NAME, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to AP");
}
}

Cara Kerja Alat dan Hasil:

1. Buka ThingsBoard (www.thingsboard.io) dan buat device baru yang digunakan untuk memonitoring (Device> klik +> add new device). Buat nama device dan device type DEMO kemudian klik add.



2. Setelah itu copy token (klik device yang dibuat> details> copy access token) ke program Arduino IDE yang akan diupload ke ESP32. Jangan lupa untuk merubah nama WiFi dan password WiFi yang digunakan. Lalu upload program.


3. Buka serial monitor pada software arduino IDE (pastikan baud rate sudah sesuai dengan yang ditulis di program). Serial monitor akan menampilkan status koneksi WiFi dan jarak benda yang diukur.


4. Buka thingsboard dan data jarak benda akan di tampilkan di latest telemetry. Untuk memunculkan data dalam bentuk grafik maka harus membuat dashboard terlebih dahulu (Dashboard> Create New Dashboard> Add). Kembali ke devices yang telah dibuat> pada latest telemetry checklist last update time> klik show on widget> pilih current bundle sesuai yang diinginkan> klik add dashboard> pilih dashboard yang telah dibuat sebeumnya. Buka dashboard, maka akan muncul tampilan seperti ini:

Friday, August 16, 2019

ThingSpeak: Pengukur Jarak Berbasis ESP32 dan Sensor Ultrasonik

Ide:
Idenya adalah mengukur jarak menggunakan sensor ultrasonik dimana ESP32 berperan sebagai pemproses data dan mengirimkan data yang telah diolah ke platform IoT. Platform ThingSpeak digunakan untuk menampilkan hasil data sensor ultrasonik dalam bentuk grafik.

Alat & Bahan:
1. ESP32 & Kabel USB
2. Sensor Ultrasonik
3. Breadboard & Jumper

Scematic Rangkaian:


Program:


#include <ThingSpeak.h>
#include <WiFi.h>
const int trigPin = 2;
const int echoPin = 5;

// defines variables
long duration;
int distance;
//network information
const char *ssid =  "rea"; //your network SSID (name)
const char *pass =  "rearamada12"; //your network password
WiFiClient client;
//thingspeak settings
unsigned long channel = 833244; //your channel ID number
const char *apiKey = "9X6OW1HMNWBXWUOD"; //your channel write API Key

//int lum, i = 0;

void setup() {
    pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
    pinMode(echoPin, INPUT); // Sets the echoPin as an Input
    Serial.begin(115200);
    delay(10);
    
    //connect to WiFi
    Serial.print("Connecting to: "); Serial.println(ssid);
    WiFi.begin(ssid, pass);
    while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
    }
    Serial.println("\nWiFi connected\n");
    
    ThingSpeak.begin(client); //initialize ThingSpeak
}

void loop() {
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);

// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);

// Calculating the distance
distance= duration*0.034/2;

// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);  
// i++;
 // lum = analogRead(34);
  
  int x = ThingSpeak.writeField(channel, 1, distance, apiKey);
  if (x == 200) {
    Serial.println("Data " + String(distance));
    Serial.print("distance: "); Serial.println(distance);
    Serial.println("Update to ThingSpeak Successful.");
  }
  else {
    Serial.println("Data " + String(distance));
    Serial.println("Problem updating data. HTTP error code " + String(x));
  }
  
  Serial.println("Waiting...\n");
  delay(20000);
}

Cara Kerja Alat & Hasil:
1. Masuk ke ThingSpeak di www.thingspeak.com kemudian buat channel baru (Channels> My Channels> New Channels). Pada percobaan ini diberi nama "Jarak Benda". Jika sudah kemudian simpan.

2. Setelah itu klik API Keys lalu copy 'Write API Keys' ke program arduino. Lalu upload ke ESP32.

3. Lihat tampilan serial monitor pada software Arduino IDE. Untuk memastikan status WiFi sudah terhubung. Serial monitor dapat menampilkan hasil jarak yang terukur dalam satuan centimeter.

4. ThingSpeak akan menggambarkan hasil pengukuran dalam bentuk grafik.



Thursday, August 15, 2019

BLE Scanner: ESP32 BLE_Write Arduino

Ide Project:

Di sini kita akan membahas secara singkat contoh BLE_write yang ditemukan di Files> Examples> ESP32 BLE Arduino. Contoh ini memungkinkan untuk dapat dibaca oleh serial monitor software Arduino IDE, dimana sebelumnya pesan tersebut ditulis di ponsel melalui aplikasi BLE scanner.

Alat & Bahan:

1. ESP32 dan kabel USB
2. Software Arduino IDE (pada pc)
3. Aplikasi BLE scanner (pada ponsel)

Program:

.
.
/*
    Based on Neil Kolban example for IDF: https://github.com/nkolban/esp32-snippets/blob/master/cpp_utils/tests/BLE%20Tests/SampleWrite.cpp
    Ported to Arduino ESP32 by Evandro Copercini
*/


#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>

// See the following for generating UUIDs:
// https://www.uuidgenerator.net/

#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"


class MyCallbacks: public BLECharacteristicCallbacks {
void onWrite(BLECharacteristic *pCharacteristic) {
std::string value = pCharacteristic->getValue();

if (value.length() > 0) {
Serial.println("*********");
Serial.print("New value: ");
for (int i = 0; i < value.length(); i++)
Serial.print(value[i]);

Serial.println();
Serial.println("*********");
}
}
};

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

Serial.println("1- Download and install an BLE scanner app in your phone");
Serial.println("2- Scan for BLE devices in the app");
Serial.println("3- Connect to MyESP32");
Serial.println("4- Go to CUSTOM CHARACTERISTIC in CUSTOM SERVICE and write something");
Serial.println("5- See the magic =)");

BLEDevice::init("MyESP32");
BLEServer *pServer = BLEDevice::createServer();

BLEService *pService = pServer->createService(SERVICE_UUID);

BLECharacteristic *pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ |
BLECharacteristic::PROPERTY_WRITE
);

pCharacteristic->setCallbacks(new MyCallbacks());

pCharacteristic->setValue("Hello World");
pService->start();

BLEAdvertising *pAdvertising = pServer->getAdvertising();
pAdvertising->start();
}

void loop() {
// put your main code here, to run repeatedly:
delay(2000);
}
.


Hasil:

1. Jalankan program diatas, kemudian buka serial monitor pada software Arduino IDE. Pastikan set baud 115200.

2. Buka aplikasi BLE scanner dan hubungan ke 'MyESP32' (nama bluetooth yang sudah kita setting) sesudah scan BLE device.



3. Untuk menulis pesan pilih Custom service> W , lalu kirimkan.


4. Amati tampilan serial monitor pada software Arduino IDE.


Wednesday, August 7, 2019

Membuat Database Sekolah dengan MySQL Workbench



Ide Project:


REST API Server Sederhana: CRUD Absen Murid

Ide Project:

Client akan mengakses/mengubah data absen (Get, Post, Put, Delete) ke server sebagai contoh penerapan REST pada Codeigniter. REST API server tersebut selanjutnya akan diuji menggunakan Postman yang merupakan aplikasi ekstensi/tambahan dari Google Chrome.


Software:

  • Postman
  • VSCode
  • XAMPP

Cara Kerja: 

  • Download folder ServerREST pada link https://github.com/ardisaurus/ci-restserver dan salin pada C:\xampp\htdocs
  • Buat database pada aplikasi VSCode dengan nama absen.php seperti dibawah ini dan simpan menggunakan nama db.sql dan masukan beberapa data. Replace file tersebut di C:\xampp\htdocs\serverREST
CREATE DATABASE absen;
 USE absen;
 CREATE TABLE IF NOT EXISTS `murid` (
`no` int(11) NOT NULL AUTO_INCREMENT,
`nama` varchar(50) NOT NULL,
PRIMARY KEY (`no`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
 USE absen;
INSERT INTO `murid` (`no`, `nama`) VALUES(1, 'Orion'),
(2, 'Mars'),
(7, 'Alpha');
  • Kemudian buat kode untuk memprogram fungsi (Get, Post, Put, Delete) untuk RestAPI. Simpan dengan nama Absen.php dan salin pada C:\xampp\htdocs\serverREST\application\controllers
    <?php

    defined('BASEPATH') OR exit('No direct script access allowed');

    require APPPATH . '/libraries/REST_Controller.php';
    use Restserver\Libraries\REST_Controller;

    class absen extends REST_Controller {

        function __construct($config = 'rest') {
            parent::__construct($config);
            $this->load->database();
        }

        //Menampilkan data absen
        function index_get() {
            $no = $this->get('no');
            if ($no == '') {
                $absen = $this->db->get('murid')->result();
            } else {
                $this->db->where('no', $no);
                $absen = $this->db->get('murid')->result();
            }
            $this->response($absen, 200);
        }
        //Masukan function selanjutnya disini

        //Mengirim atau menambah data absen baru
        function index_post() {
            $data = array(
                        'no'           => $this->post('no'),
                        'nama'          => $this->post('nama'));
            $insert = $this->db->insert('murid', $data);
            if ($insert) {
                $this->response($data, 200);
            } else {
                $this->response(array('status' => 'fail', 502));
            }
        }

        //Masukan function selanjutnya disini

        //Memperbarui data absen yang telah ada
         function index_put() {
            $no = $this->put('no');
            $data = array(
                        'no'       => $this->put('no'),
                        'nama'          => $this->put('nama'));
            $this->db->where('no', $no);
            $update = $this->db->update('murid', $data);
            if ($update) {
                $this->response($data, 200);
            } else {
                $this->response(array('status' => 'fail', 502));
            }
        }

        //Masukan function selanjutnya disini

        //Menghapus salah satu data murid
        function index_delete() {
            $no = $this->delete('no');
            $this->db->where('no', $no);
            $delete = $this->db->delete('murid');
            if ($delete) {
                $this->response(array('status' => 'success'), 201);
            } else {
                $this->response(array('status' => 'fail', 502));
            }
        }
    }
    ?>


  • Buka database.sql dan ubah seperti dibawah ini pada C:\xampp\htdocs\serverREST\application\config
    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    $active_group = 'default';
    $query_builder = TRUE;

    $db['default'] = array(
        'dsn'   => '',
        'hostname' => 'localhost',
        'username' => 'root',
        'password' => '',
        'database' => 'absen',
        'dbdriver' => 'mysqli',
        'dbprefix' => '',
        'pconnect' => FALSE,
        'db_debug' => (ENVIRONMENT !== 'production'),
        'cache_on' => FALSE,
        'cachedir' => '',
        'char_set' => 'utf8',
        'dbcollat' => 'utf8_general_ci',
        'swap_pre' => '',
        'encrypt' => FALSE,
        'compress' => FALSE,
        'stricton' => FALSE,
        'failover' => array(),
        'save_queries' => TRUE
    );
  • Jika langkah 1-3 sudah dijalankan, buka softare XAMPP kemudian aktifkan Module Apache, MySQL, dan FileZilla.



  • Masukkan file db.sql yang telah dibuat tadi lalu klik Go.
  •  Jika sudah masuk ke software Postman untuk menguji apakah program sudah berjalan sesuai yang diinginkan. Caranya: masukan get dan isi kolom url (contoh: http://127.0.0.1/serverREST/index.php/absen/ ) lalu kirimkan. Jika sudah benar akan mendapat tampilan seperti di bawah ini.