Membaca PZEM-017 Dengan ESP 8266

Disclimer dulu bahwa ini sebenarnya adalah cerita eksperimen yang hampir sama dengan cerita sebelumnya tentang membaca PZEM-017 dengan Wemos D1 Mini. Tetapi di tulisan ini saya akan lebih membahas kendala yang muncul kembali setelah sebelumnya berhasil.

Hampir seharian saya nyari penyebab kenapa pembacaan nilai PZEM-017 yang dulu berhasil, kenapa sekarang jadi gagal. Setidaknya ada beberapa faktor berikut sesuai pengalaman saya kemarin.

Baterai (Sumber Tegangan) Tidak Tersambung

Ternyata input test voltase yang akan kita ukur, dalam skema rangkaian yang ada dibelakang digambarkan baterai, harus disambungkan dengan pzem-017. Sebelumnya saya berasumsi bahwa karena pzem-017 sudah saya kasih tegangan 5v dari sumber lain sehingga tidak perlu menyambung sumber, ternyata ini jadi salah satu penyebab tidak terbacanya data.

Tx dan Rx yang Terbalik

Hal yang tidak saya duga bisa terjadi adalah sambungan Tx dan Rx yang terbalik. Dari berbagai referensi, Tx ESP harusnya tersambung dengan Rx nya modul TTL to RS485, bgeitu juga sebaliknya dengan Rx nya tersambung dengan Tx. Tetapi secara desperate saya balik, ternyata secara mengejutkan malah bisa terbaca datanya. Dari referensi saya dapatkan bahwa ternyata bisa jadi penamaan label modulnya yang tidak sesuai standar. Misalnya Tx itu yang harusnya transmit, bisa jadi bermaksud bahwa di titik itu tempat tersambungnya Tx dari lawannya.

Kesimpulan

Dari beberapa hari experimen ini, sudah ada satu modul pzem-017 yang rusak. Ketika diberikan catu daya 5v, seakan terjadi korsleting, sehingga menimbulkan reaksi pada power supply yang menyediakan tegangan.

Sudah seharusnya kita membaca dokumentasi atau datasheet dari modul yang akan kita pakai, cuma masalahnya tidak semua modul memiliki datasheet, terutama modul-modul murah yang tidak disertai datasheet. Apalagi karena populer dan murah, banyak versi dan juga versi kw nya.

Mengganti Lampu Sein dan Senja CRV Gen 3

Kemarin baru sadar kalau ternyata nambah satu lampu lagi yang mati di CRV gen 3. Setelah sebelumnya lampu senja sebelah kiri mulai lemah, lampu sein sebelah kiri ternyata mati juga.

Setelah beberapa kali klik untuk browsing lampu-lampu di marketplace online, saya akhirnya memutuskan untuk mengganti lampu sein dengan lampu yang sejenis, artinya saya tidak melakukan modif atau mengganti dengan lampu jenis lain.

Sedangkan untuk lampu senja, saya coba mencari alternatif dari yang sudah ada. Saya menemukan lampu senja yang bisa diganti-ganti warnanya dan sepertinya menarik. Warna lampu ini bisa diganti menggunakan remote yang sudah disediakan, jadi tidak seperti lampu lain yang biasanya perlu dinyala-matikan untuk mengganti warna.

Dengan berbekal referensi di youtube, saya ganti sendiri lampu sein dan lampu senja. Awalnya agak sedikit kesulitan karena posisinya sangat sempit. Dengan sedikit tekanan, akhirnya saya bisa buka rumah lampu senja dan memasang lampunya.

Sempet terjadi kegagalan karena lampu tidak nyala setelah dipasang. Setelah diotak-atik tetep tidak menyala. Sempet nyala sebentar tapi kemudian mati. Saya coba cek sekring ternyata putus. Dan memang dari penjualnya sudah memberikan warning kalau lampu mati, kemungkinan sekring yang putus karena watt nya lebih besar dari lampu biasanya. Saya ganti dengan nilai sikring setingkat lebih tinggi dan normal nyala kembali.

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.