Menulis Blog dengan Bantuan AI

Beberapa tulisan blog saya terakhir ini dibantu oleh AI, terutama yang berkaitan dengan proses saya experiment dengan mikrokontroller seperti ESP dan Arduino. Tulisan yang bersifat step by step atau tutorial sangat terbantu dengan bantuan AI ini.

Mungkin jadi kurang original tetapi masih terbaca natural. Tentu saja tidak copy paste secara keseluruhan. Pasti ada bagian-bagian yang perlu diparafrase ulang.

Dalam kasus saya experiment dengan mikrokontroller, biasanya saya mengerjakan dulu experiment nya, kemudian saya tulis blog nya sebegai dokumentasi.

Saya tinggal tuliskan beberapa poin yang saya kerjakan dan minta AI untuk menuliskan dalam bentu blog. Walaupun hanya poin, ternyata AI bisa menceritakan lebih detail dan memang sesuai dengan apa yang saya kerjakan.

Bisa jadi AI juga mempelajari dari prompt yang saya tulis sebelumnya, sehingga dia juga memahami apa saja yang saya kerjakan. Sehinga ketika diminta menceritakan lagi experimen yang saya kerjakan, dia bener-bener bisa menceritakan dengan gamblang.

Luar biasa perkembangan AI. Entah seperti apa perkembangan beberapa tahun kedepan. Manusia perlu beradaptasi dengan semua teknologi ini.

Menampilkan Halaman HTML dari File Terpisah di ESP8266/ESP32

Dalam proyek ESP8266 Web Server, sering kali kita perlu menampilkan halaman web dengan HTML, CSS, dan JavaScript agar tampilannya lebih menarik dan interaktif. Alih-alih menulis kode HTML langsung di dalam kode Arduino, kita bisa menyimpan file terpisah menggunakan SPIFFS (SPI Flash File System) atau LittleFS. Dengan cara ini, struktur proyek menjadi lebih rapi dan modular.

Pada blog ini, kita akan membahas:

Mengapa menyimpan HTML di file terpisah lebih baik?
Cara menyimpan dan menampilkan file HTML dari ESP
Kode contoh untuk membaca file HTML dari SPIFFS/LittleFS

Mengapa Menyimpan HTML di File Terpisah?

Memudahkan pengeditan – Kamu bisa mengubah tampilan tanpa perlu memodifikasi kode firmware.
Menghemat memori program – HTML disimpan di SPIFFS/LittleFS, bukan di flash yang digunakan oleh program utama.
Lebih rapi dan modular – Bisa memisahkan file CSS, JavaScript, dan HTML seperti dalam aplikasi web normal.

Struktur File Proyek

Sebelum mulai coding, kita buat struktur folder seperti ini:

/ESP8266_WebServer
│── data/                → Folder untuk menyimpan file web
│   ├── index.html       → Halaman utama
│   ├── style.css        → Styling halaman
│   ├── script.js        → JavaScript untuk interaksi
│── ESP8266_WebServer.ino → Kode utama untuk ESP8266

Folder data/ akan digunakan oleh SPIFFS atau LittleFS untuk menyimpan file HTML.

Kode ESP8266/ESP32 untuk Membaca HTML dari SPIFFS/LittleFS

#include <ESP8266WiFi.h>
#include <ESPAsyncWebServer.h>
#include <SPIFFS.h>

const char* ssid = "SSID";
const char* password = "PASSWORD";
AsyncWebServer server(80);

void setup() {
    Serial.begin(115200);
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) delay(500);

    SPIFFS.begin();
    
    // Menyajikan file HTML, CSS, dan JS dari SPIFFS
    server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
        request->send(SPIFFS, "/index.html", "text/html");
    });
    server.on("/style.css", HTTP_GET, [](AsyncWebServerRequest *request) {
        request->send(SPIFFS, "/style.css", "text/css");
    });
    server.on("/script.js", HTTP_GET, [](AsyncWebServerRequest *request) {
        request->send(SPIFFS, "/script.js", "application/javascript");
    });

    server.begin();
}

void loop() {}

Upload File ke SPIFFS

  1. Buka Arduino IDE
  2. Instal plugin “ESP8266/ESP32 SPIFFS uploader”
  3. Buka “Tools > ESP8266 Sketch Data Upload”
  4. File HTML, CSS, dan JS akan diunggah ke SPIFFS!

Kesimpulan

✔ Menggunakan SPIFFS atau LittleFS memungkinkan penyimpanan file HTML secara terpisah di ESP.
✔ Metode ini mempermudah pengeditan dan menghemat memori program utama.
✔ Dapat dikembangkan lebih lanjut dengan AJAX atau WebSocket untuk membuat tampilan lebih dinamis.

Cara Memecah Kode Arduino Menjadi Beberapa File

Jika kamu pernah mengembangkan proyek Arduino atau ESP, kamu mungkin sering menghadapi kode yang semakin panjang dan sulit dibaca. Salah satu cara terbaik untuk mengelola proyek dengan lebih baik adalah menggunakan modular programming, yaitu memisahkan kode ke beberapa file.

Dalam artikel ini, kita akan membahas bagaimana cara membuat kode terstruktur untuk menyalakan LED menggunakan Arduino, dengan pendekatan modular coding.

Mengapa Modular Programming?

Membuat kode lebih rapi – Dengan memisahkan kode menjadi beberapa file, setiap bagian dari program menjadi lebih jelas dan mudah dimengerti.
Memudahkan penggunaan ulang – Kamu dapat menggunakan kembali modul tanpa harus menulis ulang seluruh kode.
Mempermudah debugging – Jika terjadi kesalahan, kamu bisa lebih mudah menemukannya tanpa harus mencari di file yang panjang.

Struktur Proyek Arduino dengan Modular Coding

Sebelum mulai coding, kita buat struktur folder seperti ini:

/modular_led
│── modular_led.ino   → Kode utama
│── led.h             → Header LED
│── led.cpp           → Implementasi LED

Di sini, kita akan membuat tiga file utama:

  1. led.h → Deklarasi fungsi dan kelas untuk kontrol LED.
  2. led.cpp → Implementasi fungsi LED.
  3. main.ino → Kode utama yang mengontrol bagaimana LED bekerja.

Membuat Modul LED

1. File led.h (Header untuk LED)

File led.h berisi deklarasi kelas dan fungsi yang kita gunakan:

#ifndef LED_H
#define LED_H

#include <Arduino.h>

class LED {
public:
    LED(int pin);  // Konstruktor
    void begin();  // Inisialisasi LED
    void turnOn(); // Menyalakan LED
    void turnOff(); // Mematikan LED

private:
    int ledPin; // Menyimpan pin LED
};

#endif

Menggunakan kelas LED untuk mengelola fungsi LED dengan lebih efisien.
Menentukan metode begin() untuk inisialisasi, turnOn() untuk menyalakan, dan turnOff() untuk mematikan LED.

2. File led.cpp (Implementasi LED)

Berisi kode implementasi untuk setiap fungsi yang ada di led.h:

#include "led.h"

LED::LED(int pin) {
    ledPin = pin;
}

void LED::begin() {
    pinMode(ledPin, OUTPUT);
}

void LED::turnOn() {
    digitalWrite(ledPin, HIGH);
}

void LED::turnOff() {
    digitalWrite(ledPin, LOW);
}

Fungsi begin() mengatur pin sebagai output, sehingga LED bisa dikontrol.
Metode turnOn() dan turnOff() mengontrol status LED secara langsung.

3. File modular_led.ino (Kode Utama)

Terakhir, kita tuliskan kode utama yang akan menjalankan program:

#include "led.h"

LED led(13);  // Gunakan pin 13 untuk LED

void setup() {
    led.begin();
}

void loop() {
    led.turnOn();
    delay(1000);
    led.turnOff();
    delay(1000);
}

Memanggil kelas LED dengan LED led(13); untuk mengontrol LED di pin 13.
Menyalakan dan mematikan LED setiap 1 detik dengan delay(1000);.

Cara Menjalankan Kode

  1. Pastikan semua file (led.h, led.cpp, maodular_led.ino) berada dalam folder yang sama.
  2. Buka modular_led.ino di Arduino IDE atau PlatformIO.
  3. Upload ke board Arduino, dan lihat LED berkedip setiap 1 detik.

Kesimpulan

✔ Modular programming membantu membuat kode lebih terstruktur, mudah dibaca, dan mudah digunakan kembali.
✔ Dengan memisahkan fungsi LED ke dalam kelas dan file terpisah, program menjadi lebih rapi dan efisien.
✔ Teknik ini bisa digunakan untuk proyek yang lebih kompleks, seperti sensor, komunikasi serial, atau sistem berbasis IoT.

Pengalaman Membaca PZEM-017 dengan ESP WeMos D1 Mini

Sebagai seseorang yang sedang belajar mendalami teknologi IoT dan integrasi sensor, saya menghadapi berbagai tantangan saat mencoba membaca data dari PZEM-017 menggunakan ESP8266 WeMos D1 Mini. Meskipun awalnya tampak seperti proses sederhana, ternyata ada berbagai hambatan teknis yang perlu diatasi. Berikut adalah perjalanan saya dalam menyelesaikan masalah yang muncul hingga akhirnya sistem berjalan dengan stabil.

1. Kendala Awal: Label PCB dalam Bahasa Mandarin

Saat pertama kali menerima modul PZEM-017, saya dihadapkan pada tantangan yang tidak terduga—label pada PCB menggunakan Bahasa Mandarin.

Hal ini tentu menyulitkan dalam menentukan koneksi yang benar. Saya kemudian mencari referensi dari berbagai sumber, membandingkan dengan modul serupa, dan melakukan verifikasi menggunakan multimeter untuk memastikan koneksi TX, RX, VCC, dan GND sudah sesuai.

Bagi yang mengalami kendala serupa, saya menyarankan untuk mencari diagram koneksi atau datasheet resmi agar mendapatkan kejelasan mengenai pengkabelan.

2. LED TX & RX Tidak Menyala: Masalah pada Kabel Jumper

Setelah memahami koneksi, saya segera melakukan penyambungan dan menyalakan sistem. Namun, LED TX dan RX tidak menyala sama sekali.

Awalnya saya menduga adanya kesalahan konfigurasi atau kerusakan pada modul RS485 to TTL, tetapi setelah melakukan pengecekan menyeluruh, ternyata penyebabnya adalah kabel jumper dengan kualitas kurang baik. Padahal, kabel yang sama telah digunakan untuk eksperimen lain tanpa kendala.

Solusi yang saya temukan cukup sederhana—mengganti kabel jumper dengan kualitas lebih baik dan memastikan koneksi benar-benar kuat. Setelah perbaikan tersebut, LED TX dan RX akhirnya dapat berfungsi dengan normal.

3. Data Terbaca di Serial Monitor, tetapi Tidak Stabil

Setelah berhasil membaca data tegangan, arus, daya, dan energi melalui Serial Monitor, saya mendapati bahwa pembacaan kadang terbaca dengan baik, namun kadang terjadi error tanpa alasan jelas.

Awalnya saya mengira masalah ini berkaitan dengan kode atau pengaturan baud rate, namun setelah berbagai percobaan, saya mencoba mengganti power supply dari 3V ke 5V—dan hasilnya pembacaan menjadi stabil tanpa error.

Kesimpulan dari permasalahan ini adalah bahwa tegangan suplai harus cukup agar komunikasi antara perangkat dapat berjalan dengan baik.

4. LED TX Menyala Terus tetapi Redup: Masalah Grounding

Setelah sistem berjalan dalam beberapa waktu, muncul tantangan baru—LED TX tidak lagi berkedip sesuai sinyal, melainkan menyala terus dalam kondisi redup.

Ketika saya memeriksa Serial Monitor, ternyata terjadi error lagi. Setelah melakukan analisis, saya menemukan penyebab utama masalah ini: ground dari ESP8266 dan RS485 converter tidak terhubung dengan baik.

Setelah menghubungkan ground ESP ke ground RS485, sistem kembali berfungsi secara normal, dan pembacaan data tidak mengalami gangguan lagi.

5. Pengujian Stabilitas: Berjalan Tanpa Masalah Setelah Ditinggalkan Semalaman

Setelah menyelesaikan seluruh troubleshooting, saya memutuskan untuk membiarkan sistem menyala semalaman guna memastikan kestabilannya. Keesokan harinya, saya memeriksa kembali dan sistem berjalan dengan sempurna tanpa kendala.

Dari pengalaman ini, saya dapat menyimpulkan beberapa hal penting:
Pastikan koneksi perangkat sesuai dengan diagram yang benar, terutama jika terdapat label asing pada PCB.
Gunakan kabel jumper dengan kualitas baik, karena koneksi yang buruk bisa menghambat komunikasi data.
Power supply yang cukup sangat krusial, terutama untuk perangkat komunikasi seperti RS485.
Pastikan ground terhubung dengan baik untuk menghindari gangguan sinyal dan komunikasi.

Pengalaman ini menunjukkan bahwa trial & error adalah bagian penting dalam eksplorasi teknologi, dan setiap tantangan dapat diselesaikan dengan pendekatan yang sistematis. Semoga pengalaman ini dapat membantu bagi siapa pun yang menghadapi kendala serupa!

Membangun PLTS Atap: Backup PLN

Pada tulisan sebelumnya tentang Membangun PLTS Atap: UPS Modif, saya telah berbagi cerita mengenai awal mula pencarian energi alternatif untuk PC saya. Saat itu, saya mulai mencari solusi agar perangkat saya tetap bisa beroperasi dengan sumber daya yang lebih efisien dan berkelanjutan. Kini, saya akan melanjutkan ke tahap berikutnya dalam pengembangan sistem ini.

Upgrade ke LiFePO4: Investasi untuk Masa Depan

Setelah mempertimbangkan berbagai opsi, akhirnya saya memutuskan untuk membeli baterai LiFePO4 sebagai penyimpanan daya utama. Keunggulan utama dari teknologi ini adalah umur pakai yang lebih panjang, efisiensi yang lebih tinggi, dan kestabilan daya yang lebih baik dibandingkan baterai SLA atau AGM. Dengan kapasitas yang mencukupi, LiFePO4 memberikan fleksibilitas dalam sistem cadangan daya saya.

Memaksimalkan Daya dengan Inverter 3000 Watt

Agar bisa memanfaatkan baterai LiFePO4 secara optimal, saya juga memilih untuk menggunakan inverter 3000W. Keputusan ini didasarkan pada kebutuhan daya yang cukup besar, terutama untuk backup lampu, server, dan bahkan AC saat terjadi pemadaman listrik. Dengan inverter berkapasitas besar, sistem ini mampu memberikan cadangan energi yang lebih andal dan dapat menangani beban daya lebih tinggi tanpa kendala.

Sistem Sementara: Backup PLN Tanpa Solar Panel

Saat ini, saya belum memiliki solar panel dan solar charge controller (SCC), sehingga sistem sementara ini hanya berfungsi sebagai cadangan daya untuk PLN. Artinya, baterai diisi ulang dari listrik PLN, lalu digunakan sebagai UPS untuk menjaga perangkat tetap menyala saat terjadi pemadaman listrik. Meskipun belum sepenuhnya mandiri, langkah ini sudah menjadi awal yang baik dalam transisi menuju energi terbarukan.

Langkah Berikutnya: Pemasangan Solar Panel dan SCC

Tahap selanjutnya dalam proyek ini adalah memasang solar panel dan SCC agar sistem ini benar-benar bisa bekerja secara off-grid. Dengan adanya solar panel, baterai tidak lagi bergantung pada PLN untuk pengisian daya, melainkan dapat menggunakan energi matahari secara langsung. SCC berperan penting dalam mengatur aliran daya dari panel ke baterai, memastikan efisiensi pengisian yang optimal dan melindungi sistem dari overcharge.

Kesimpulan: Menuju Energi Mandiri

Membangun PLTS Atap bukanlah proses instan, melainkan perjalanan bertahap yang membutuhkan pemikiran strategis dan investasi yang tepat. Dari UPS modif, baterai LiFePO4, inverter 3000W, hingga perencanaan pemasangan solar panel dan SCC, setiap langkah membawa saya lebih dekat menuju sistem energi yang lebih efisien, berkelanjutan, dan mandiri.