IoT
01 #include <ESP8266WiFi.h>
02 #include <ESP8266WebServer.h>
03
04 const char* ssid = "Indobot.co.id"; //ubah SSID sesuai dengan nama hotspot yang diguna
05 const char* password = "belajariot"; //ubah password sesuai dengan hotspot yang diguna
06
07 ESP8266WebServer server(80);
08 String webpage;
09
10 void setup() {
11 Serial.begin(115200);
12 delay(10);
13
14 // Connect to WiFi network
15 Serial.println();
16 Serial.print("Configuring access point...");
17
18 // Mengatur WiFi
19 WiFi.mode(WIFI_AP);
20 WiFi.begin(ssid, password);
21
22 // Wait for connection
23 while (WiFi.status() != WL_CONNECTED) {
24 delay(500);
25 Serial.print(".");
26 }
27 Serial.println("");
28 Serial.print("Connected to ");
29 Serial.println(ssid);
30 Serial.println("IP address: ");
31 Serial.println(WiFi.localIP());
32
33
34 server.begin();
35 Serial.println("WiFi sebagai Client Siap Dijalankan");
36 }
37
38 void loop() {
39 server.handleClient();
40 }
Nah pada program di atas, bagian Serial hanya digunakan untuk menampilkan hasil
pembacaan pada serial monitor saja. Pokok program utamanya ada pada program-
program lainnya.
Setiap cloud, memiliki library program masing-masing sebagai program dasar. Pahami
dan pelajari ya.
01 #include <ESP8266WiFi.h>
02 #include <WiFiClient.h>
03 #include <ThingSpeak.h> //library untuk thingspeak
04
09 unsigned long myChannelNumber = 1614486; //channel ID
11
12 void setup() {
13 Serial.begin(115200);
14 delay(10);
15
16 Serial.print("Connecting to ");
17 Serial.println(ssid); //menampilkan nama hotspot ke Serial monitor
18 WiFi.begin(ssid, password); //memulai untuk terhubung WiFi
19
20 //memastikan koneksi dengan hotspot
21 while (WiFi.status() != WL_CONNECTED)
22 {
23 delay(500);
24 Serial.print(".");
25 }
26
27 Serial.println("");
28 Serial.println("WiFi connected"); //menandakan sudah terkoneksi
29 Serial.println(WiFi.localIP()); //menampilkan Alamat IP
30 ThingSpeak.begin(client); //memulai thingspeak
31 }
32
33 void loop()
34 {
35 int data;
Sedangkan untuk program yang dapat digunakan untuk mengakses data dari
Thingspeak adalah sebagai berikut.
01 #include <ESP8266WiFi.h>
02 #include <WiFiClient.h>
03 #include <DHT.h>
04 #include <ThingSpeak.h> //library untuk thingspeak
05 const char *ssid = "indobot.co.id"; //nama Hotspot yang digunakan
09 unsigned long myChannelNumber = 1615548; //channel ID
13 void setup() {
14 Serial.begin(115200);
15 delay(10);
16
17 Serial.print("Connecting to ");
18 Serial.println(ssid); //menampilkan nama hotspot ke Serial monitor
19 WiFi.begin(ssid, password); //memulai untuk terhubung WiFi
20
22 while (WiFi.status() != WL_CONNECTED)
23 {
24 delay(500);
25 Serial.print(".");
26 }
27 Serial.println("");
28 Serial.println("WiFi connected"); //menandakan sudah terkoneksi
29 Serial.println(WiFi.localIP()); //menampilkan Alamat IP
30 WiFi.mode(WIFI_STA);
31 ThingSpeak.begin(client); //memulai thingspeak
32 }
33
34 void loop() {
35 int statusCode = 0; //membuat Kode status menjadi 0 sebelum pembacaan
36
41 }
42 else{ //jika kode tidak sama dengan 200
43 Serial.println("Problem reading channel. HTTP error code " + String(statusCode));
44 }
45 delay(2000);
46
47 }
Channel ID, Write APIKey, dan Read APIKey bisa kita dapatkan setelah sudah
membuat akun di Thingspeak. Jangan lupa untuk mengisi nama dan password hotspot
untuk dapat terhubung. Kedua program di atas hanya dasarnya saja. Pada program
pengiriman data, teman-teman harus mengubah variabel data menjadi variabel nilai
yang ingin dikirimkan. Sedangkan pada bagian akses data, datanya hanya terlihat di
serial monitor dan belum bisa digunakan untuk mengendalikan sesuatu.
Sistem Client
WiFi yang dijadikan sebagai Client berfungsi untuk menangkap sinyal WiFi lainnya di
sekitarnya untuk dapat saling terhubung. Sistem WiFi sebagai Client sama dengan
sistem WiFi yang ada di Smartphone teman-teman. Smartphone memiliki fitur WiFi
untuk bisa terhubung dengan wifi lain agar terhubung internet. Terkadang ada notifikasi
bahwa WiFi telah terhubung dengan smartphone, namun tidak ada koneksi internet. Ini
artinya Smartphone sudah terhubung, namun WiFi tidak terhubung dengan koneksi
internet.
Pengujian Wemos sebagai client, dapat dilakukan dengan memberikan nama dan
password WiFi yang terjangkau dengan Wemos. Nama dan Password ini perlu
dimasukkan dalam program yang akan dikirimkan ke device Wemos. Berikut adalah
program yang dapat digunakan untuk melakukan pengujian pada Wemos anda.
01 #include <ESP8266WiFi.h>
02 #include <ESP8266WebServer.h>
03
04 const char* ssid = "Indobot.co.id"; //ubah SSID sesuai dengan nama hotspot yang diguna
05 const char* password = "belajariot"; //ubah password sesuai dengan hotspot yang diguna
06
07 ESP8266WebServer server(80);
08 String webpage;
09
10 void setup() {
11 Serial.begin(115200);
12 delay(10);
13
14 // Connect to WiFi network
15 Serial.println();
16 Serial.print("Configuring access point...");
17
18 // Mengatur WiFi
19 WiFi.mode(WIFI_AP);
20 WiFi.begin(ssid, password);
21
22 // Wait for connection
23 while (WiFi.status() != WL_CONNECTED) {
24 delay(500);
25 Serial.print(".");
26 }
27 Serial.println("");
28 Serial.print("Connected to ");
29 Serial.println(ssid);
30 Serial.println("IP address: ");
31 Serial.println(WiFi.localIP());
32
33
34 server.begin();
35 Serial.println("WiFi sebagai Client Siap Dijalankan");
36 }
37
38 void loop() {
39 server.handleClient();
40 }
Tuliskan program di atas ke aplikasi Arduino IDE anda. Jangan lupa untuk mengubah
ssid dan password menjadi nama hotspot dan nama password yang digunakan.
Kemudian upload program tersebut ke Wemos anda. Jika pada bagian board tidak
ditemukan Wemos, pastikan anda sudah install ESP8266 di Board Manager Arduino
IDE.
Jika program sudah terkirim, coba cek pada serial monitor di baut rate 115200.
Tunggulah titik-titik selesai hingga muncul tulisan “WiFi sebagai Client Siap Dijalankan”.
Jika sudah muncul tulisan tersebut, maka dapat dipastikan bahwa WiFi anda dapat
digunakan untuk bisa terhubung dengan internet, karena dapat dihubungkan dengan
WiFi nantinya.
Sistem Server
WiFi yang dijadikan sebagai Server artinya WiFi ditempatkan untuk memancarkan
gelombang untuk dapat diterima WiFi lain (WiFi Client). WiFi ini dapat terhubung
dengan berbagai Client. berbeda dengan WiFi client yang hanya dapat terhubung
dengan 1 server saja. WiFi server dapat menyebarkan informasi secara langsung ke
seluruh WiFi Client. Sistem ini sama dengan smartphone yang mengaktifkan fitur
Hotspot. Pengguna smartphone lainnya dapat mengakses hotspot anda selama
diketahui nama dan passwordnya.
Pada Wemos, penggunaan WiFi sebagai server, dapat melakukan penggantian nama
dan password WiFi yang digunakan. nama WiFi dapat ditambahkan dengan
menggunakan program yang di-upload ke device. Berikut ini adalah program yang
dapat digunakan untuk ujicoba WiFi pada Wemos anda.
01 #include <ESP8266WiFi.h>
02 #include <ESP8266WebServer.h>
03
06
07 ESP8266WebServer server(80);
08 String webpage;
09
10
11 void setup() {
12 Serial.begin(115200);
13 delay(10);
14
15 // Connect to WiFi network
16 Serial.println();
17 Serial.print("Configuring access point...");
18
19 // Mengatur WiFi
20 WiFi.mode(WIFI_AP);
21 WiFi.softAP(ssid, password);
22 Serial.println("");
23 Serial.print("Nama Hotspot Anda : ");
24 Serial.println(ssid);
25 Serial.print("Password Hotspot Anda : ");
26 Serial.println(password);
33
34 void loop() {
35 server.handleClient();
36 }
Tuliskan program di atas ke aplikasi Arduino IDE anda. Pilihlah nama ssid dan
password yang anda inginkan. Kemudian upload program tersebut ke Wemos anda.
Jika sudah terkirim, cek pada serial monitor. Jika tidak muncul, cobalah untuk klik Flash
pada Wemos anda untuk mengulang jalannya program.
Jika sudah muncul tulisan “WiFi sebagai Server sudah dijalankan”, maka dapat
diartikan bahwa WiFi sudah diaktifkan. Pengecekan dapat dilakukan dengan
menggunakan Smartphone. Buka pada pengaturan WiFi anda. Cek apakah nama WiFi
dari Wemos tadi sudah muncul atau belum. Jika sudah, coba klik dan masukkan
password sesuai setting sebelumnya.
Project ESP32-CAM IoT : Mengkoneksikan ESP32-CAM dengan
Aplikasi Telegram
Kali ini kita akan membahas terkait ESP32-CAM yang akan kita gunakan untuk sistem IoT.
Sistem IoT (Internet of Things) merupakan suatu sistem yang digunakan sebagai monitoring
dan controlling suatu project dari jarak yang jauh dengan komunikasi melalui internet.
Nah ESP32-CAM dengan fasilitas tambahannya berupa kamera akan kita gunakan untuk
pengambilan gambar yang akan dikirimkan ke aplikasi Telegram. Telegram memiliki Bot yang
dapat digunakan untuk melakukan embed antara smartphone dengan mikrokontroler. Yuk kita
simak cara membuatnya.
Rangkaian
Susun komponen di atas menjadi rangkaian berikut.
Program
Tahap selanjutnya adalah penulisan program pada Arduino IDE. Buatlah program seperti
berikut. Jangan lupa untuk menambahkan board baru untuk ESP32 dan Universal telegram bot
agar tidak terjadi error. Atur board ke AI Thinker ESP32-CAM.
01 #include <WiFi.h>
02 #include <WiFiClientSecure.h>
03 #include "esp_camera.h"
04 #include "UniversalTelegramBot.h"
05
06 #define BOT_TOKEN "your_bot_it"
07 #define _debug
08
11
12 WiFiClientSecure client;
13 UniversalTelegramBot bot(BOT_TOKEN, client);
14
15 long bot_last_check;
16 int bot_check_interval = 3000;
17
18 bool hasMoreData;
19 camera_fb_t * fb = NULL;
20
21 bool hasMoreDataAvailable();
22 byte* getNextBuffer();
23 int getBufferLen();
24
37
38 void setup() {
39 Serial.begin(9600);
40 Serial.setDebugOutput(true);
41 Serial.println();
42
43 camera_config_t config;
44 config.ledc_channel = LEDC_CHANNEL_0;
45 config.ledc_timer = LEDC_TIMER_0;
46 config.pin_d0 = Y2_GPIO_NUM;
47 config.pin_d1 = Y3_GPIO_NUM;
48 config.pin_d2 = Y4_GPIO_NUM;
49 config.pin_d3 = Y5_GPIO_NUM;
50 config.pin_d4 = Y6_GPIO_NUM;
51 config.pin_d5 = Y7_GPIO_NUM;
52 config.pin_d6 = Y8_GPIO_NUM;
53 config.pin_d7 = Y9_GPIO_NUM;
54 config.pin_xclk = XCLK_GPIO_NUM;
55 config.pin_pclk = PCLK_GPIO_NUM;
56 config.pin_vsync = VSYNC_GPIO_NUM;
57 config.pin_href = HREF_GPIO_NUM;
58 config.pin_sscb_sda = SIOD_GPIO_NUM;
59 config.pin_sscb_scl = SIOC_GPIO_NUM;
60 config.pin_pwdn = PWDN_GPIO_NUM;
61 config.pin_reset = RESET_GPIO_NUM;
62 config.xclk_freq_hz = 20000000;
63 config.pixel_format = PIXFORMAT_JPEG;
64
65 // jika ada PSRAM IC, init dengan UXGA resolution dan kualitas JPEG yang lebih tin
66 // untuk buffer bingkat pra-alokasi yang lebih besar.
67 if(psramFound()){
68 config.frame_size = FRAMESIZE_QVGA;
69 config.jpeg_quality = 10;
70 config.fb_count = 2;
71 } else {
72 config.frame_size = FRAMESIZE_QVGA;
73 config.jpeg_quality = 12;
74 config.fb_count = 1;
75 }
76
77 #if defined(CAMERA_MODEL_ESP_EYE)
78 pinMode(13, INPUT_PULLUP);
79 pinMode(14, INPUT_PULLUP);
80 #endif
81
82 // camera init
83 esp_err_t err = esp_camera_init(&config);
84 if (err != ESP_OK) {
85 Serial.printf("Kamera Error 0x%x", err);
86 return;
87 }
88
89 sensor_t * s = esp_camera_sensor_get();
90 // tampilan awal yang digunakan adalah vertikal dan warna agak jenuh
91 if (s->id.PID == OV3660_PID) {
92 s->set_vflip(s, 1); // flip tampilan
95 }
96 //drop down ukuran frame untuk frame rate awal yang lwbih tinggi
97 s->set_framesize(s, FRAMESIZE_QVGA);
98
99 #if defined(CAMERA_MODEL_M5STACK_WIDE)
100 s->set_vflip(s, 1);
101 s->set_hmirror(s, 1);
102 #endif
103
104 WiFi.mode(WIFI_STA);
105 WiFi.begin(ssid, password);
106
108 delay(500);
109 Serial.print(".");
110 }
111 Serial.println("");
112 Serial.println("WiFi connected");
113
114 bot.longPoll = 60;
115 }
116
117
118 bool hasMoreDataAvailable() {
119 Serial.println("Has more daa");
120 if (hasMoreData) {
121 hasMoreData = false;
122 return true;
123 }
124
125 return false;
126 }
127
128
132 return fb->buf;
133
134 return nullptr;
135 }
136
137 int getBufferLen() {
138 Serial.println("Buffer len");
139 if (fb)
140 return fb->len;
141
142 return 0;
143 }
144
159 void loop() {
162 while (numNewMessages) {
171 }
172 numNewMessages = bot.getUpdates(bot.last_message_received + 1);
173 }
174
175 bot_last_check = millis();
176 }
177
178 // delay(10);
179 }
Masukkan nama hotspot, password hotspot, dan token yang anda gunakan.
Kemudian tambahkan sketch baru dengan New Tab. Klik pada segitiga di kanan atas > pilih New
Tab. Berikan nama file “camera_pins.h”. Kemudian tuliskan sketch berikut ini:
01 #if defined(CAMERA_MODEL_WROVER_KIT)
02 #define PWDN_GPIO_NUM -1
03 #define RESET_GPIO_NUM -1
04 #define XCLK_GPIO_NUM 21
05 #define SIOD_GPIO_NUM 26
06 #define SIOC_GPIO_NUM 27
07
08 #define Y9_GPIO_NUM 35
09 #define Y8_GPIO_NUM 34
10 #define Y7_GPIO_NUM 39
11 #define Y6_GPIO_NUM 36
12 #define Y5_GPIO_NUM 19
13 #define Y4_GPIO_NUM 18
14 #define Y3_GPIO_NUM 5
15 #define Y2_GPIO_NUM 4
16 #define VSYNC_GPIO_NUM 25
17 #define HREF_GPIO_NUM 23
18 #define PCLK_GPIO_NUM 22
19
20 #elif defined(CAMERA_MODEL_ESP_EYE)
21 #define PWDN_GPIO_NUM -1
22 #define RESET_GPIO_NUM -1
23 #define XCLK_GPIO_NUM 4
24 #define SIOD_GPIO_NUM 18
25 #define SIOC_GPIO_NUM 23
26
27 #define Y9_GPIO_NUM 36
28 #define Y8_GPIO_NUM 37
29 #define Y7_GPIO_NUM 38
30 #define Y6_GPIO_NUM 39
31 #define Y5_GPIO_NUM 35
32 #define Y4_GPIO_NUM 14
33 #define Y3_GPIO_NUM 13
34 #define Y2_GPIO_NUM 34
35 #define VSYNC_GPIO_NUM 5
36 #define HREF_GPIO_NUM 27
37 #define PCLK_GPIO_NUM 25
38
39 #elif defined(CAMERA_MODEL_M5STACK_PSRAM)
40 #define PWDN_GPIO_NUM -1
41 #define RESET_GPIO_NUM 15
42 #define XCLK_GPIO_NUM 27
43 #define SIOD_GPIO_NUM 25
44 #define SIOC_GPIO_NUM 23
45
46 #define Y9_GPIO_NUM 19
47 #define Y8_GPIO_NUM 36
48 #define Y7_GPIO_NUM 18
49 #define Y6_GPIO_NUM 39
50 #define Y5_GPIO_NUM 5
51 #define Y4_GPIO_NUM 34
52 #define Y3_GPIO_NUM 35
53 #define Y2_GPIO_NUM 32
54 #define VSYNC_GPIO_NUM 22
55 #define HREF_GPIO_NUM 26
56 #define PCLK_GPIO_NUM 21
57
58 #elif defined(CAMERA_MODEL_M5STACK_V2_PSRAM)
59 #define PWDN_GPIO_NUM -1
60 #define RESET_GPIO_NUM 15
61 #define XCLK_GPIO_NUM 27
62 #define SIOD_GPIO_NUM 22
63 #define SIOC_GPIO_NUM 23
64
65 #define Y9_GPIO_NUM 19
66 #define Y8_GPIO_NUM 36
67 #define Y7_GPIO_NUM 18
68 #define Y6_GPIO_NUM 39
69 #define Y5_GPIO_NUM 5
70 #define Y4_GPIO_NUM 34
71 #define Y3_GPIO_NUM 35
72 #define Y2_GPIO_NUM 32
73 #define VSYNC_GPIO_NUM 25
74 #define HREF_GPIO_NUM 26
75 #define PCLK_GPIO_NUM 21
76
77 #elif defined(CAMERA_MODEL_M5STACK_WIDE)
78 #define PWDN_GPIO_NUM -1
79 #define RESET_GPIO_NUM 15
80 #define XCLK_GPIO_NUM 27
81 #define SIOD_GPIO_NUM 22
82 #define SIOC_GPIO_NUM 23
83
84 #define Y9_GPIO_NUM 19
85 #define Y8_GPIO_NUM 36
86 #define Y7_GPIO_NUM 18
87 #define Y6_GPIO_NUM 39
88 #define Y5_GPIO_NUM 5
89 #define Y4_GPIO_NUM 34
90 #define Y3_GPIO_NUM 35
91 #define Y2_GPIO_NUM 32
92 #define VSYNC_GPIO_NUM 25
93 #define HREF_GPIO_NUM 26
94 #define PCLK_GPIO_NUM 21
95
96 #elif defined(CAMERA_MODEL_M5STACK_ESP32CAM)
97 #define PWDN_GPIO_NUM -1
98 #define RESET_GPIO_NUM 15
99 #define XCLK_GPIO_NUM 27
100 #define SIOD_GPIO_NUM 25
102
114
121
133
140
152
153 #else
155 #endif
Upload program di atas ke ESP32-CAM. Jangan lupa untuk menghubungkan dulu GPIO 0 ke
GND agar program dapat ter-upload dengan baik.
Jika sketch sudah terkirim secara keseluruhan, maka cabutlah GPIO 0 dari GND untuk
memasukkan pada Running Mode dari ESP32-CAM. Selanjutnya, buka serial monitor untuk
melihat hasilnya.
Hasil dari project ini adalah kita dapat mengambil foto dari jarak jauh secara online. Foto ini
kemudian akan dikirimkan dari ESP32-CAM menuju aplikasi telegram. Selagi keduanya masih
terkoneksi dengan internet, maka sistem akan tetap berjalan.