NodeMCU merupakan sebuah papan mikrokontroler yang berbasis modul WiFi ESP8266, sehingga sesuai untuk diterapkan di bidang Internet of Things (IoT), smart home control atau aplikasi pengendalian tanpa kabel lainnya. Para pemula tidak perlu kuatir untuk belajar mikrokontroler ini, karena pemrogramannya dilakukan seperti halnya pada Arduino. Selain itu sudah banyak juga library yang beredar di internet, sehingga urusan pemrograman bisa lebih cepat.
NodeMCU ESP8266 sebagai pengendali papan informasi dot matrix.
Kali ini akan saya bagikan penerapannya untuk pengendalian papan informasi yang terintegrasi dengan jaringan WiFi. Papan informasi terdiri dari beberapa modul dot matrix yang sudah tersedia kitnya di pasaran. Anda bisa cari di Google dengan kata kunci “MAX7219 Dot Matrix Module DIY”. Satu unit terdiri dari 8x8 dot pixel. Misalnya Anda ingin membuat papan dengan ukuran panjang 40 pixel x lebar 8 pixel, berarti harus merangkai 5 unit modul MAX7219.
Pada sketsa di atas, modul NodeMCU dihubungkan ke dot matrix MAX7219 melalui 5 kabel, yaitu VCC, GND, DIN, CS dan Clock. Anda bisa menggunakan library LedMatrix untuk mengendalikan modul dot matrix ini. Sedangkan untuk berkomunikasi dengan router (Access Point), kita memerlukan ESP8266WiFi.h, ESP8266WiFiMulti.h, dan ESP8266HTTPClient.h.
Sistem ini dapat digunakan untuk memperoleh informasi langsung dari internet lalu ditayangkan ke dot matrix, sehingga kita tidak memerlukan bantuan komputer atau kontroler lain. Contoh informasi yang dapat ditayangkan antara lain informasi valuta asing, saham, cuaca, dan berita (running text). Contoh program di bawah ini adalah menayangkan berita ke dot matrix display dalam bentuk teks berjalan. Berita diambil dengan format RSS dari BBC Indonesia (http://www.bbc.com/indonesia/berita_indonesia/index.xml), karena kita hanya memerlukan format teks tanpa gambar atau media lain. Tapi karena format RSS masih terlalu besar dan banyak teks / tag yang tidak kita perlukan, maka saya memakai bantuan program php untuk menyeleksi kata-kata yang diperlukan (phrasing). Dalam hal ini kita ambil kalimat hanya yang berada di antara tag <summary dan </summary. Perlu diperhatikan, tag ini bisa berbeda jika kita mengambil berita dari situs lain.
Program ini sudah sukses saya uji 24jam/7hari tanpa ada kendala apapun. Tentunya koneksi internet di router juga harus tanpa ada kendala. Program ini bisa dikembangkan agar lebih dinamis, artinya jika sumber berita mengalami perubahan format, maka sistem harus bisa menyesuaikan.
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#define USE_SERIAL Serial
ESP8266WiFiMulti WiFiMulti;
//==========================
#include <SPI.h>
#include "LedMatrix.h"
#define NUMBER_OF_DEVICES 6
#define CS_PIN 0
LedMatrix ledMatrix = LedMatrix(NUMBER_OF_DEVICES, CS_PIN);
//counter
int x = 0;
//===========================
void setup()
{
delay(500);
ledMatrix.init();
ledMatrix.setIntensity(1); // range is 0-15
ledMatrix.setText("Berita hari ini : >> >> >> ");
delay(100);
USE_SERIAL.begin(115200);
USE_SERIAL.println();
USE_SERIAL.println();
for (uint8_t t = 4; t > 0; t--)
{
USE_SERIAL.printf("[SETUP] WAIT %d...\n", t);
USE_SERIAL.flush();
delay(1000);
}
WiFiMulti.addAP("SSID", "password"); // ganti SSID dan password sesuai dengan router Anda
}
void connect_to(String address) {
if ((WiFiMulti.run() == WL_CONNECTED))
{
HTTPClient http;
USE_SERIAL.print("[HTTP] begin...\n");
// konfigurasi alamat website/url
http.begin(address); //HTTP
USE_SERIAL.print("[HTTP] GET...\n");
// mulai koneksi dan mengirim HTTP header
int httpCode = http.GET();
// httpCode bernilai negatif jika ada kesalahan
if (httpCode > 0) {
// HTTP header berhasil dikirim dan response header dari server sudah diproses
USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);
// file/dokumen ditemukan di server
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
USE_SERIAL.println(payload);
//kirim teks ke display
ledMatrix.setNextText(payload);
}
}
else
{
USE_SERIAL.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}
}
void loop() {
//ledMatrix.clear();
ledMatrix.scrollTextLeft();
ledMatrix.drawText();
ledMatrix.commit();
delay(30);
x = x + 1;
if (x == 150) {
// wait for WiFi connection
//connect_to("http://madajimmy.com/rssreader/index.php?link=http://www.bbc.com/indonesia/index.xml");
connect_to("http://madajimmy.com/rssreader/index.php?link=http://www.bbc.com/indonesia/berita_indonesia/index.xml");
}
if (x==50000)
{x=1; } }
Jika menemui kendala, silakan komen di bawah ini, saya akan jawab semaksimal mungkin. Anda tertarik membuatnya?