Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

  • IC Timer 555 yang Multifungsi

    IC timer 555 adalah sirkuit terpadu (chip) yang digunakan dalam berbagai pembangkit timer, pulsa dan aplikasi osilator. Komponen ini digunakan secara luas, berkat kemudahan dalam penggunaan, harga rendah dan stabilitas yang baik

  • Ayo Migrasi TV Digital

    Kami bantu anda untuk memahami lebih jelas mengenai migrasi tv digital, apa sebabnya dan bagaimana efek terhadap kehidupan. Jasa teknisi juga tersedia dan siap membantu instalasi - setting perangkat - pengaturan antena dan distribusi televisi digital ke kamar kos / hotel

  • Bermain DOT Matrix - LOVEHURT

    Project Sederhana dengan Dot Matrix dan Attiny2313. Bisa menjadi hadiah buat teman atau pacarmu yang ulang tahun dengan tulisan dan animasi yang dapat dibuat sendiri.

  • JAM DIGITAL 6 DIGIT TANPA MICRO FULL CMOS

    Jika anda pencinta IC TTL datau CMOS maka project jam digital ini akan menunjukkan bahwa tidak ada salahnya balik kembali ke dasar elektronika digital , sebab semuanya BISA dibuat dengan teknologi jadul

  • Node Red - Kontrol Industri 4.0

    Teknologi kontrol sudah melampaui ekspektasi semua orang dan dengan kemajuan dunia elektronika, kini semakin leluasa berkreasi melalui Node Red

Selasa, 09 Juni 2020

[Praktek Gampang] Jam di TV dengan Arduino - Part 3 - Esp8266-01 Kirim NTP via I2C



Kegemaran saya mengoprek jam kalender dan TV dimulai sejak  membaca tulisan mengenai steve wozniak dan steve jobs tentang bagaimana mereka bekerjasama membuat hardware video game "breakout" di Atari, hingga akhirnya menciptakan komputer apple yang legendaris itu. Dulu saat penulis kuliah sempat mendapat praktikum interfacing monitor VGA tapi hanya selintas aja dan menyesal juga kenapa gak sedari dulu bisa mengerti walau nilai praktikum dapat A (nyontek teman yg pinter sihhh). Dari dua latar belakang tersebut dan ketika microcontroller semakin murah dan mudah didapatkan menjadi tantangan tersendiri bermain micro di TV dan terlihat seperti main-main dan menghabiskan waktu, memang itu benar tapi asyik lhoo!  Tapi jangan berkecil hati karena penulis juga dapat banyak ilmu terutama mengenai pemrograman script yang lebih efisien. Salah satunya adalah ketika tantangan komunikasi arduino ke ESP agar tidak mengganggu timer Atmega328 untuk scanning TV. Jika menggunakan Serial baik Hardware atau emulasi software tetap aja akan menimbulkan interfrensi timer. Untuk itu digunakan komunikasi dengan timer  yg independen yaitu I2C. Dari hasil googling didapat bahwa ESP8266 bisa juga dimanfaatkan sebagai I2C master dan Arduino sebagai Slave nya. 




Komunikasi I2C sudah tersedia librarinya dalam instalasi default sketch,  yaitu dengan library " wire.h ". Untuk arduino uno / mini / micro yg berbasis ATmega328 pin SDA = A4 pin SCL =A5 . Dengan menggunakan I2C maka master dapat mengirim data atau meminta data ke slave. Tiap komponen yg diakses memiliki address masing-masing. Untuk ESP8266-01 memiliki 2 output GPIO yang bukan berfungsi sebagai I2C secara spesifik, sehingga perlu dilakukan inisialisasi port sendiri mana yg berfungsi sebagai SDA atau SCL. 

Menyambung tulisan mengenai jam di TV dan esp8266 , maka sebelum melanjutkan ke bahasan dibawah ada baiknya paca dulu PART1 dan PART2


- Praktek Testing I2C

Kita akan mencoba menghubungkan ESP sebagai master, terhubung secara I2C ke Arduino sebagai Slave dan tujuannya adalah mengirimkan data kalender secara periodik. Slave kemudian akan menuliskan hasil data yg diperoleh ke Serial port.

Script Master ( ESP8266-01)

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include "TimeLib.h"
//library I2c
#include <Wire.h>
//library NTP , unduh jika blom ada
#include <NTPClient.h>

const char *ssid     = "Nama Wifi";
const char *password = "Password";
//Offset WIB +7 , sesuaikan
const long utcOffsetInSeconds = 25200;

long previousMillis = 0;   
long interval = 10000; //tiap 10 detik
//Array kalender
char tanggalan[] ="20,1,1,23,59,0" ;

// NTP lokal, ubah jika perlu
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "ntp.bmkg.go.id", utcOffsetInSeconds);

void setup(){
  Serial.begin(9600); //monitor
  Wire.begin(0, 2); 
/* Koneksi i2c  SDA=0 and SCL=2  pada ESP-01 */

  WiFi.begin(ssid, password);

  while ( WiFi.status() != WL_CONNECTED ) {
    delay ( 500 );
    Serial.print ( "." );
  }

  timeClient.begin();
}

void loop() {

  unsigned long currentMillis = millis(); 

  if(currentMillis - previousMillis > interval) {

  previousMillis = currentMillis;
  timeClient.update();
  unsigned long epoch ;
  epoch = timeClient.getEpochTime();
  
//output ke array
  sprintf(tanggalan,"%2d,%02d,%02d,%02d,%02d,%02d", year(epoch)-2000, month(epoch), day(epoch), hour(epoch), minute(epoch), second(epoch));

  Wire.beginTransmission(8); /* address 8 */
  Wire.write(tanggalan);  /* kirim Kalender */
  Wire.endTransmission();    /* stop */
  Serial.print("tanggal : ");
  Serial.println(tanggalan);

  }
}



Script Slave (Arduino)

#include <Wire.h>


void setup()
{
Serial.begin(9600);
Wire.begin(8);
//rutin event receive i2c
Wire.onReceive(espWifiReceiveEvent);

}

void loop()
{
delay(1);
}

//Kirim ke serial saat ada data i2c masuk

void espWifiReceiveEvent(int count)
{
Serial.print("Received[");
while (Wire.available())
{
char c = Wire.read();
Serial.print(c);
}
Serial.println("]");

}


Nah jika dilihat output pada serial monitor / putty disisi arduino/slave seperti berikut:




- SCRIPT JAM LENGKAP

Terdapat beberapa hal yg menjadi perhatian saat data diterima arduino pada port I2C, dimana timer tetap akan kacau kalau data i2c nya panjang. I2C akan hang itulah yg terjadi saat 17 byte char diterima ,  jadi diakali dengan melakukan penonaktifan I2C setelah data kalender lengkap. Peng-update-an tanggalan dilakukan setiap jam atau sesuai keinginan misalnya tiap jam 3 pagi jika TV mau nyala terus dan gak dipake emak nonton sinetron..hehehehe...ayuk kita kupas satu persatu.


#include <TVout.h>
#include <Wire.h>
#include "fontALL.h"
#include <String.h>

TVout TV;

long previousMillis = 0;    
byte second, minute, hour, dayOfMonth, month, year;
long interval = 200;
int tvx,tvy,tvradius,x2,y2,x3,y3;
char buff[20]="20,08,06,23,58,58";
int buffindex=0;
char incomingByte ;

//status flag
bool ntpkomplit = false;
bool ntpupdate = false;

//function nulis kalender dan jam
void printTime()
{

second++;

if(second >=60){
  minute++;
  second=0;

}

if(minute >=60){
  hour++;
  minute=0;

  //reset flag
  ntpkomplit=false;
  ntpupdate=false;
  
  //restart i2C
   TWCR = 0;
   Wire.begin(8); //address 8
   Wire.onReceive(espWifiReceiveEvent);

}

if(hour >=24){
  hour=0;  
  dayOfMonth++;
}

//jika flag ntp komplit maka update kalender
if( ntpkomplit == true && ntpupdate == false ){
//parsing koma ke kalender
  char* ptr = strtok(buff, ",");
  byte i = 0;
  while (ptr) {
    if( i ==0 )year=atoi(ptr);
    else if( i == 1)month=atoi(ptr);
    else if( i == 2)dayOfMonth=atoi(ptr);
    else if( i == 3)hour=atoi(ptr);
    else if( i == 4)minute=atoi(ptr);
    else if( i == 5)second=atoi(ptr);
    
    ptr = strtok(NULL, ",");
    i++;
  }
  //flag ntp telah terupdate
  ntpupdate = true;
}

//tulis kalender

TV.set_cursor(0,0);
TV.print( char( hour/10 + 0x30) );
TV.print( char( hour%10 + 0x30) );
TV.print(":");
TV.print( char(minute/10 + 0x30));
TV.print( char(minute%10 + 0x30));
TV.print(":");
TV.print(char (second/10+0x30));
TV.print(char (second%10+0x30));


TV.set_cursor(8,9);
TV.print(char(dayOfMonth/10+0x30));
TV.print(char(dayOfMonth%10+0x30));
TV.print("/");
TV.print(char(month/10+0x30));
TV.print(char(month%10+0x30));
TV.set_cursor(10,18);
TV.print("20");
TV.print(char(year/10+0x30));
TV.print(char(year%10+0x30));
  
//status NTP connecting atau OK 

if( ntpupdate == false)
{
  TV.set_cursor(10,38);
  TV.print("con");
}

else{

  TV.set_cursor(10,38);
  TV.print("OK!");
}

//gambar Jam
//courtesy of Giant Metal Robot Blog 
  
TV.draw_circle(tvx,tvy,tvradius-5,BLACK,BLACK);

float angle = second*6 ;
angle=(angle/57.29577951) ; //Convert degrees to radians  
x3=(tvx+(sin(angle)*(tvradius-6)));
y3=(tvy-(cos(angle)*(tvradius-6)));
TV.draw_line(tvx,tvy,x3,y3,WHITE);
angle = minute * 6 ;
angle=(angle/57.29577951) ; //Convert degrees to radians  
x3=(tvx+(sin(angle)*(tvradius-11)));
y3=(tvy-(cos(angle)*(tvradius-11)));
TV.draw_line(tvx,tvy,x3,y3,WHITE);
angle = hour * 30 + int((minute / 12) * 6 )   ;
angle=(angle/57.29577951) ; //Convert degrees to radians  
x3=(tvx+(sin(angle)*(tvradius-15)));
y3=(tvy-(cos(angle)*(tvradius-15)));
TV.draw_line(tvx,tvy,x3,y3,WHITE);

}


void setup()  {
//TV di mode NTSC

TV.begin(_NTSC,150,71);
TV.select_font(font6x8);
TV.clear_screen();

tvx= TV.hres()/2;
tvy=TV.vres()/2;
tvradius=TV.vres()/2 ;
//clock face lingkaran
 TV.draw_circle(tvx,tvy,tvradius,WHITE);
//hour ticks
for( int z=0; z < 360;z= z + 30 ){
  //Begin at 0° and stop at 360°
  float angle = z ;
  angle=(angle/57.29577951) ; //Convert degrees to radians
  x2=(tvx+(sin(angle)*tvradius));
  y2=(tvy-(cos(angle)*tvradius));
  x3=(tvx+(sin(angle)*(tvradius-5)));
  y3=(tvy-(cos(angle)*(tvradius-5)));

  TV.draw_line(x2,y2,x3,y3,WHITE);
}
  
  
  TV.set_cursor(10,30);
  TV.print("NTP");
  TV.set_cursor(0,55);
  TV.print("aisi555");
  TV.set_cursor(3,63);
  TV.print(".com");



//buka serial kalau mau debug
//Serial.begin(9600);
Wire.begin(8); // I2C
Wire.onReceive(espWifiReceiveEvent);

}

void loop() {
  
unsigned long currentMillis = millis();

if(currentMillis - previousMillis > interval) {

  previousMillis = currentMillis;
  TV.delay(980); // Sesuaikan antara 950-1000
  printTime();

  }

}


void espWifiReceiveEvent(int count)
{

 //buka blok serial kalau mau debug
//Serial.print("Received[");

//jika i2c terima data dan blum komplit kalendernya
while (Wire.available() && ntpkomplit == false)
{
 char c = Wire.read();
 //Serial.print(c);
 buff[buffindex]=c;
 buffindex++;
}
//Serial.println("]");


//Ntpkomplit = true Jika buffer kalender sampe menit terpenuhi 
if(buffindex >=14) {
  ntpkomplit = true;
  TWCR = 0; //bunuh i2c
  
}

buffindex = 0;

}




HASIL :



Proses update yg saya gunakan adalah tiap JAM atau menit ke 0, jadi memang tidak akan langsung terupdate akibat proses BITBANG tabrak menabrak antar timer vs i2c. Jadi seperti video berikut ini dapat dilihat UPDATE ke waktu NTP terjadi hampir  2 menit kemudian.



Bagaimana ? Sudah Mumet ? Sebaiknya baca dari awal ya PART1 dan PART2 dan juga bagian sebelumnya mengenai TV menggunakan microcontroller yang sudah saya tulis sejak 2012. 

SELAMAT MENCOBA

Share:

[Praktek Gampang] Jam di TV dengan Arduino - Part 2 - ESP8266-01 NTP

Ini merupakan kelanjutan dari pembahasan Jam TV part1 dan merupakan bagian yang paling penting untuk mendapatkan waktu yg akurat. Umumnya para desainer elektronika yg membutuhkan pewaktu akan menggunakan RTC baik yg jadul paralel DS12887 atau yg sangat murah RTC serial/i2c DS1807. Penulis sangat benci menggunakan RTC karena ketidak akuratannya yg akan melenceng seiring waktu. Bahkan tidak pernah menggunakan RTC dalam proyek apapun karena selalu menggunakan timer internal dari AVR seperti yg pernah saya bahas secara gamblang disini. Karena sekarang saya menggunakan timer secara khusus untuk timing raster tv maka akan mengganggu library tvout nya. Untuk itu saya menggunakan NTP atau network time protocol yang kekauratatnnya teruji untuk penggunaan komputer. Menurut wikipedia....

Network Time Protocol (NTP) adalah sebuah protokol yang digunakan untuk pengsinkronan waktu di dalam sebuah jaringan bisa pada jaringan LAN (Local Area Network) maupun pada jaringan internet dan untuk sinkronisasi jam-jam sistem komputer di atas paket-switching, variabel-latency jaringan data. Proses sinkronisasi ini dilakukan didalam jalur komunikasi data yang biasanya menggunakan protokol komunikasi TCP/IP. Sehingga proses ini sendiri dapat dilihat sebagai proses komunikasi data yang hanya melakukan pertukaran paket-paket data saja.

NTP menggunakan port komunikasi UDP nomor 123. Salah satu contoh NTP server yg bisa dicoba adalah  ntp.bmkg.go.id  dan banyak lagi NTP server lainnya. Data yg diberikan oleh server NTP berupa elapsed second sejak tahun 1900. Komputer pada umumnya menggunakan unix / epoch time yg dihitung mulai 1 januari 1970,  jadi butuh perhitungan mengurangi data yg diterima sebanyak 2208988800 . Wow lumayan besar angkanya jadi kita akan terbiasa dengan format angka Unsigned Long. Untuk mempelajari prinsip epoch, unix time, dan NTP bisa baca di epochconverter.com .

- ESP8266 / ESP-01


Modul murah meriah ESP8266 merupakan penggerak utama dari perkembangan IOT di dunia sejak 10 tahun lalu. Bagaimana tidak hampir semua alat ber-wifi menggunakan platform yg sama dan membuat saya heran karena harganya super murah. Gak habis pikir deh berapa nilai keuntungan yg diambil oleh espressif ? Sebagai jebolan pabik komponen jadi ingat kalau pabrik di china bisa sampai menekan harga dan mengambil untung hanya 1 sen untuk tiap produknya, dengan catatan order  ke mereka main kuantitas besar. Ahh jangan dibahas lah kalau lawan industri china, kita di Indonesia hanya bisa lihat dan impor saja, bermimpi kembali ke jaman 80-90an dimana ada pabrik komponen yg pabriknya lokal jawa timuran.

Gambar Yang saya tampilkan diatas merupakan interfacing / hubungan antara ESP yg berlevel tegangan 3.3 volt dengan Arduino dengan level 5 volt. Pembagi tegangan menggunakan resistor bisa ditambahkan untuk keamanan, tapi menurut saya sudah bertahun-tahun level uart TTL bisa langsung dipake ke uart 3.3 volt asal jangan sampai tegangan supplynya / vcc aja sampe salah. 

Baudrate UART dari ESP pada umumnya di set 115200 dan menggunakan perintah AT command seperti halnya pada modul GSM SIM800. Anda bisa mencobanya dengan USB UART dan terminal yang memiliki fasiitas penambahan "CR" pada akhir command. Jadi jangan gunakan putty secara polos ya, gunakan monitor uart pada arduino atau Real Term daripada bingung karena Putty tanpa respond  hanya keluar tulisan " Ready". 

-Library ESPWiFi mode AT COMMAND



Kita lanjut pembahasan bagaimana interfacingnya modul ESP01 ini ke arduino dan penulis sangat terkejut bahwa library dari ESP yg dengan firmware AT "WiFiEsp" sudah memiliki fasilitas NTP-UDP siap pakai. Wahh tinggal copy paste ini sepertinya dan benar saja dari kumpulan script example bisa kita langsung dapatkan hasil yang memuaskan.

Untuk mengubah data waktu EPOCH dengan hasil yg lebih spesifik (hari tanggal bulan tahun) maka kita perlu menambahkan libary pengolah kalender "TimeLib.h". Ini karena pada library WiFiEsp tidak ada fasilitas pengolahan data EPOCH nya. Modifikasi saja pada script sesuai contoh berikut:

if (Udp.parsePacket()) {
    Serial.println("packet received");
    // We've received a packet, read the data from it into the buffer
    Udp.read(packetBuffer, NTP_PACKET_SIZE);

    // the timestamp starts at byte 40 of the received packet and is four bytes,
    // or two words, long. First, esxtract the two words:

    unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
    unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
    // combine the four bytes (two words) into a long integer
    // this is NTP time (seconds since Jan 1 1900):
    unsigned long secsSince1900 = highWord << 16 | lowWord;
    Serial.print("Seconds since Jan 1 1900 = ");
    Serial.println(secsSince1900);

    // now convert NTP time into everyday time:
    Serial.print("Unix time = ");
    // Unix time starts on Jan 1 1970. In seconds, that's 2208988800:
    const unsigned long seventyYears = 2208988800UL;
    // subtract seventy years:
    unsigned long epoch = secsSince1900 - seventyYears + 25200; //offset +7
    // print Unix time: Indonesia + 7 WIB
    Serial.println(epoch);

   
    // print the hour, minute and second , ini mode libraru standar
    Serial.print("Waktu WIB (+7) = ");       // WIB +7
   Serial.print(( epoch % 86400L) / 3600); // print the hour 
    Serial.print(':');
    if (((epoch % 3600) / 60) < 10) {
      // In the first 10 minutes of each hour, we'll want a leading '0'
      Serial.print('0');
    }
    Serial.print((epoch  % 3600) / 60); // print the minute 
    Serial.print(':');
    if ((epoch % 60) < 10) {
      // In the first 10 seconds of each minute, we'll want a leading '0'
      Serial.print('0');
    }
    Serial.println(epoch % 60); // print the second
  
  // dibawah ini penggunaan TimeLib.h yang lebih singkat

    char buffer[100] ;
sprintf(buffer, "  Tanggal : %4d-%02d-%02d", year(epoch), month(epoch),day(epoch));
    Serial.println(buffer);
  } 



- Mengubah ESP01 menjadi Berbasis Arduino 


Kelanjutan pembahasan saya kali ini alur ceritanya maju kedepan saat kegagalan mencoba Wifi + NTP + TVOUT gara-gara critical timingnya. Jadi saya perlu mendapatkan parameter waktu tanpa mengganggu timer 16 bit nya atmega328 dan ini sangat mustahil. Awalnya saya berpikir menggunakan Software Serial untuk mengambil data vi AT command, akan tetapi layar TV langsung blank. Jadi Mau tidak mau harus menggunakan jalur komunikasi lainnya yg memungkinkan, dan benar saja GPIO dari ESP8266/01 ini ada 2 buah yg GPIO 0 dan 2, jadi cukup lah untuk menjadikannya port I2C ( SDA dan SCL). Namun saya perlu merangkai flashernya agar bisa diprogram melalui sketch arduino.




Cara flashingnya  dengan urutan :  Menekan 2 Tombol Flash + Reset , kemudian lepas tombol Reset dan tombol Flash tetap ditekan , ditandai dengan led esp warna biru kedip sekali. Nah selanjutnya anda bisa menekan Upload pada sketch seperti biasanya. Pembahasan I2C untuk mengirim data kalender akan dibahas pada tulisan berikutnya.  Anda bisa mencoba menggunakan ESP01 untuk menerima data NTP dan menampilkan pada serial port / debug port seperti script dibawah.

#include <NTPClient.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

const char *ssid     = "Nama Wifi";
const char *password = "Passwordnya";

const long utcOffsetInSeconds =  25200; //offset +7 WIB

char daysOfTheWeek[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"};

// NTP lokal aja yg dipake, ubah kalau mau

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "ntp.bmkg.go.id", utcOffsetInSeconds);

void setup(){
  Serial.begin(9600); 

  WiFi.begin(ssid, password);

  while ( WiFi.status() != WL_CONNECTED ) {
    delay ( 500 );
    Serial.print ( "." );
  }

  timeClient.begin();
}

void loop() {
  timeClient.update();

  Serial.print(daysOfTheWeek[timeClient.getDay()]);
  Serial.print(", ");
  Serial.print(timeClient.getHours());
  Serial.print(":");
  Serial.print(timeClient.getMinutes());
  Serial.print(":");
  Serial.println(timeClient.getSeconds());
  
  delay(1000);
}


Lalu bagaimana menggabungkan Jam TV menggunakan Arduino dengan ESP8266-01 sebagai pengirim  NTP ? Bisa dibaca disini.

Selamat Mencoba
Share:

[Praktek Gampang] Jam di TV dengan Arduino - Part 1 - Library TvOut



Kekuatan dari arduino adalah kegilaan para "opreker" dalam membuat script library yang sangat rapih dan membuat anda yang kurang kekuatan berimajinasinya menjadi sangat terbantu. 10 tahun yg lalu mungkin ini menjadi kekecewaan saya , kenapa gak dari jaman saya awal belajar microcontroller dulu muncul library yg gampang ini? Akan tetapi ada bergunanya juga saya belajar microcontroller mulai dari bahasa assembly dimana saya dengan mudah melakukan modifikasi dari suatu library , hasil pemahaman "jeroan" dari register microcontroller  sekelas AVR. Contoh nyata adalah yang pernah saya tulis di Praktek Jam TV Dengan Attiny2313 dimana saya berhasil mengoprek library arduino agar muat ke ROM attiny yg super kecil.




Penjelasan teori dari bagaimana menampilkan gambar pada TV composite analog dapat dibaca pada  beberapa seri tulisan Micro vs TV yg menggunakan hardware yg sama seperti gambar diatas. Bermodal 2 resistor 1K dan 470 Ohm maka sinyal sync dan blanking dapat diatur sedemikian rupa menggunakan fungsi timer pada microcontroller. Cukup dengan script delay saja bisa membuat karakter sederhana seperti video yutub dibawah ini. Dan akhir dari seri praktek TV 7 taun yg lalu itu adalah membuat overlay/osd pada gambar live TV.

  

Ketika saya memutuskan membahas arduino pada blog, maka saya jadi berpikiran pasti ada library yang membahas TV dan ternyata ada library TVOUT yang memang sudah ada sejak lama. Namun kalau tampilannya itu itu aja maka akan sedikit kurang tantangannya. Hasil googling saya  menunjukkan hasil karya TVOUT jam digital  dengan gabungan tulisan dan animasi jam dinding. Bisa anda baca di http://giantmetalrobot.blogspot.com/2011/05/arduino-analog-clock.html.  Dan sebagai tantangannya saya akan merubah penggunaan RTC menjadi NTP yaitu mengambil data jam dari server internet semacam  http://ntp.bmkg.go.id. Saya akan membuat seri tulisan yg akan membahas satu persatu agar pembaca semakin paham, mulai dari menulis di tv, mengambil data NTP melalui ESP8266 dan terakhir penggabungannya.



Jika menggunakan pemrograman avr non arduino, maka register timer 16 bit diatas harus dipahami sampai diluar kepala. Ya mau tidak mau harus!  Karena menulis pada TV memerlukan timing yang pas pada jangka waktu per raster yg hanya 64us. Pada Library TVout nya arduino anda tidak perlu pusing-pusing lagi karena cukup menggunakan fasilitas langsung jadi. Hardware pun masih sama 2 resistor saja dengan menggunakan port seperti pada gambar.




Baiklah setelah terangkai dengan benar, maka kita bisa membuat tulisan sederhana seperti pada contoh script singkat berikut.

#include <TVout.h>
#include <fontALL.h>

TVout TV;
void setup()
{
  //Setup display.
  TV.begin(PAL,120,96);
  //Select font.
  TV.select_font(font6x8);
}
void loop()
{
  //Clear screen at the beginning of the loop.
  TV.clear_screen();
  //Set curosr position. (x,y)
  TV.set_cursor(0, 10);
  //Print text.
  TV.println("www.aisi555.com");
  
  TV.delay(60);
}


Thats it....hanya sebaris itu..Bagaimana dengan membuat jam seperti pada gambar paling atas? Tinggal langsung copy paste aja kok dari blog aslinya dan merubah bagian pembacaan RTC dan membuat delay 1 detik sehingga mensimulasi pergantian detik ke menit jam tanggal dan seterusnya.


void loop() {

unsigned long currentMillis = millis();

if(currentMillis - previousMillis > interval) {

  previousMillis = currentMillis;
  TV.delay(1000); // delay 1 detik
  printTime();

   // script asli membaca RTC kita hapus aja
  //read RTC
 // getDateDs1307() ; 
  }
}


void printTime()
{

second++;

if(second >=60){
  minute++;
  second=0;
}

if(minute >=60){
  hour++;
  minute=0;
}

if(hour >=24){
  hour=0;  
  dayOfMonth++;
}

...............................
script lainnya sama
...............................


Hasilnya bisa dilihat pada video berikut :





Lanjutan pembahasan NTP sebagai sumber waktu dapat dibaca DISINI

SELAMAT MENCOBA 



Share:

Kontak Penulis



12179018.png (60×60)
+628155737755

Mail : ahocool@gmail.com

Site View

Categories

555 (8) 7 segmen (3) adc (4) amplifier (2) analog (19) android (14) antares (11) arduino (27) artikel (11) attiny (3) attiny2313 (19) audio (5) baterai (5) blog (1) bluetooth (1) chatgpt (2) cmos (2) crypto (2) dasar (46) digital (11) dimmer (5) display (3) esp8266 (26) euro2020 (13) gcc (1) gsm (1) iklan (1) infrared (2) Input Output (3) iot (75) jam (7) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (17) komputer (3) komunikasi (1) kontrol (8) lain-lain (8) lcd (2) led (14) led matrix (6) line tracer (1) lm35 (1) lora (11) lorawan (2) MATV (1) memory (1) metal detector (4) microcontroller (70) micropython (6) mikrokontroler (2) mikrokontroller (14) mikrotik (5) modbus (9) mqtt (3) ninmedia (5) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (88) pcb (2) power (1) praktek (2) project (33) proyek (1) python (8) radio (28) raspberry pi (9) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (2) sharing (3) signage (1) sinyal (1) sms (6) software (18) solar (1) solusi (1) tachometer (2) technology (1) teknologi (2) telegram (2) telepon (9) televisi (167) television (28) telkomiot (5) transistor (2) troubleshoot (3) tulisan (94) tutorial (108) tv digital (6) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3) yolo (7)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika