Wednesday, August 21, 2019

PROJECT THINGSBOARD

PROJECT THINGSBOARD


Pada project kali ini akan  memonitoring jarak benda yang berada di depan sensor, menggunakan sensor ultrasonik dengan platform Thingsboard, melalui ESP32 yang terkoneksi dengan internet. Sebelum membuat project ini  siapkan alat-alat yang diperlukan sebagai berikut:
  • ESP32
  • Sensor ultrasonik
  • Breadboard
  • Jumper male-male (4 buah)

Selanjutnya rangkai rangkaian seperti pada gambar dibawah ini:

ultrasonik%2Besp

Setelah terhubung dengan baik sesuai dengan gambar, buka aplikasi Arduino IDE. Apabila belum pernah menginstall dan mengupload program menggunakan Arduino IDE bisa pelajari terlebih dahulu dalam postingan sebelumnya disini.

Download library Thingsboard, PubSub, ArduinoHttpCLient, Arduinojson. Apabila blm pernah download dan memasukkan library ke arduino IDE bisa pelajari disini.

Arduino%2Bhttp%2Bclient

arduino%2Bjson

PubSub

thingsboard

Buka http://demo.thingsboard.io menggunakan web browser, apabila belum mempunyai akun thingsboard buat akun terlebih dahulu. Setelah masuk ke thingsboard buat devices baru yang akan digunakan untuk monitoring dengan cara klik Devices >>tombol +>>add new device, seperti pada gambar dibawah ini:
thingsboard7


buat nama device baru sesuai dengan keinginan dan pilih device type DEMO, setelah itu klik add. 
thingsboard8


Untuk mengirim data dari esp32 ke thingsboard memerlukan token devices thingsboard. untuk mendapatkan token  klik nama device yang telah dibuat>>details>>copy access token. token tersebut yang akan dipaste ke program yang telah dibuat diarduino IDE.

thingsboard2

setelah selesai membuat device pada thingsboard upload sketch berikut ini pada arduino IDE ke ESP32. 
.
.
#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");
}
}
.


ubah WIFI_AP_NAME "rea" WIFI_PASSWORD "rearamada12" sesuai dengan nama dan password hotspot yang akan digunakan. ubah "token" sesuai dengan token yang sudah di copy pada saat membuat device sebelumnya. Selanjutnya upload sketch tersebut ke ESP32.

Buka serial monitor pada Arduino IDE. sesuaikan baud rate yang digunakan pada program tadi, apabila ESP32 sudah connect ke wifi akan muncul tampilan seperti gambar dibawah ini:

thingsboard6

buka devices thigsboard yang telah dibuat tadi, kemudian klik latest telemetry, disini dapat dilihat  data jarak dari ESP32 akan masuk. 
thingsboard3

Apabila ingin memunculkan pada dashboard pada thingsboard, buat dashboard terlebih dahulu. selanjutnya klik devices yang telah dibuat, pada latest telemetry checklist last update time, pilih current bundle sesuai yang diinginkan, dan klik add dashboard. pilih dashboard yang telah dibuat sebeumnya.
thingsboard4

buka dasboard yang telah dibuka, maka akan muncul dara jarak benda seperti pada gambar dibawah ini:
thingsboard1

PROJECT THINGSPEAK

PROJECT THINGSPEAK

Pada project kali ini akan  memonitoring jarak benda yang berada di depan sensor, menggunakan sensor ultrasonik dengan platform Thingspeak, melalui ESP32 yang terkoneksi dengan internet. Sebelum membuat project ini  siapkan alat-alat yang diperlukan sebagai berikut:
  • ESP32
  • Sensor ultrasonik
  • Breadboard
  • Jumper male-male (4 buah)

Selanjutnya rangkai rangkaian seperti pada gambar dibawah ini:

ultrasonik%2Besp



Setelah terhubung dengan baik sesuai dengan gambar, buka aplikasi Arduino IDE. Apabila belum pernah menginstall dan mengupload program menggunakan Arduino IDE bisa pelajari terlebih dahulu dalam postingan sebelumnya dihttps://alltechnologyproject.blogspot.com/2019/07/install-dan-upload-program-esp32.html.

persiapkan thingspeak, buka thingspeak.com melalui web browser. buat akun terlebih dahulu, apabila sudah buat channel baru, dengan cara klik new channel:
thingspeakchannel

isi nama channel sesuai keinginan, disini menggunakan nama channel jarak benda cheklist Field1, dan klik save channel.

Untitled

pada channel yang telah dibuat tadi, klik API Keys, copy key dari write API Key dan Channel ID ke program yang akan dibuat.

thingspeakjarak3


Download library thingspeak terlebih dahulu pada Arduino IDE.  klik Tools >> Manage Libraries atau bias juga dengan tekan Ctrl+Shift+I, ketikkan Thingspeak ke kolom search. Kemudian klik install, tunggu hingga proses selesai. 


thingspeak

Selanjutnya meng-upload program sketch code ke Board ESP32. Berikut ini merupakan code program nya:
.
. 
#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 = 847354; //your channel ID number
const char *apiKey = "6N678TNN450FWUSH"; //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);
}
.

Karena memerlukan koneksi internet untuk mengupload data jarak dari sensor ultrasonik, ubah ssid dan password sesuai dengan hotspot yang akan digunakan. Ganti API key sesuai dengan channel thngspeak yang digunakan. buka channel yang telah dibuat dan jarak yang benda yang dideteksi oleh sensor ultrasonik akan muncul pada channel thingspeak.


thingspeakjarak1

PROJECT LORA

PROJECT LORA

Pada project kali ini akan  mengirim data menggunakan LoRa. Sebelum membuat project ini  siapkan alat-alat yang diperlukan sebagai berikut:
  • 2 ESP32
  • LoRa Transmitter Tranceiver module
  • 8 Kabel Jumper Female-female
Selanjutnya rangkai rangkaian seperti pada gambar dibawah ini:
lora1
Setelah terhubung dengan baik sesuai dengan gambar, buka aplikasi Arduino IDE. Apabila belum pernah menginstall dan mengupload program menggunakan Arduino IDE bisa pelajari terlebih dahulu dalam postingan sebelumnya disini.

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.

lora%2Blibrary


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.