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

Tampilkan postingan dengan label microcontroller. Tampilkan semua postingan
Tampilkan postingan dengan label microcontroller. Tampilkan semua postingan

Kamis, 19 Agustus 2021

Wemos ESP8266 - Part 3 - Hello Internet : Kontrol Perangkat Dari Luar Rumah

 



Setelah anda berhasil mengenal fungsi dasar dari Wemos D1 R2 dan berhasil mengirim data pengukuran suhu DHT 11 melalui protokol TCP ke smartphone, kini saatnya membawa data suhu kelembaban dan kontrol I/O ke luar rumah melalui jalur Internet. Jika sebelumnya data hanya berupa teksmelalui TCP, maka ini akan terlihat menjadi kurang menarik. Kita akan manfaatkan fasilitas Web Server yg dimiliki oleh ESP8266. Wihh kok canggih ? alat sekecil itu bisa menjadi web server ?

Library dasar yg digunakan adalah ESP8266WiFi.h dimana ada class WifiServer yg bisa dimasukkan kedalamnya teks berformat HTML  dan juga terdapat fungsi dasar response HTTP  baik GET maupun POST. 

Masih ingat kan, project sebelumnya untuk menghidupkan LED pada board wemos ? Kali ini kita buat versi lain dalam bentuk website yg lebih menarik dan mengandung CSS, sehingga UI tombolnya tampil lebih keren, script nya seperti berikut :


// Load Wi-Fi library
#include <ESP8266WiFi.h>

// Ganti dengan nama wifi yg digunakan
const char* ssid     = "nama wifi";
const char* password = "password";

// Set web server port :80
WiFiServer server(80);

// Variable menyimpan HTTP request
String header;

// Variabel menyimpan status LED SCK(14) dan Led ESP (2)
String LedSCKState = "off";
String LedESPState = "off";

// Pilih GPIO pin untuk kedua LED
const int LedSCK = 14; //LED SCK
const int LedESP = 2;  //LED ESP

// variabel untuk delay timer asynchronous tanpa mengganggu fungsi utama
unsigned long currentTime = millis();
// Previous time
unsigned long previousTime = 0; 
// Define timeout time in milliseconds (example: 2000ms = 2s)
const long timeoutTime = 2000;

void setup() {
  Serial.begin(9600);
  // Inisialisasi PIN
  pinMode(LedSCK, OUTPUT);
  pinMode(LedESP, OUTPUT);
  // Buat LED mati
  digitalWrite(LedSCK, LOW);
  digitalWrite(LedESP, HIGH); //logika terbalik aktif LOW

  // konek ke wifi
  Serial.print("Terhubung ke jaringan ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  // Print local IP address lalu mulai web server
  Serial.println("");
  Serial.println("WiFi terhubung ...");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  server.begin();
}

void loop(){
  WiFiClient client = server.available();   // Listen for incoming clients

  if (client) {                             // If a new client connects,
    Serial.println("New Client.");          // print a message out in the serial port
    String currentLine = "";                // make a String to hold incoming data from the client
    currentTime = millis();
    previousTime = currentTime;
    while (client.connected() && currentTime - previousTime <= timeoutTime) { // loop while the client's connected
      currentTime = millis();         
      if (client.available()) {             // if there's bytes to read from the client,
        char c = client.read();             // read a byte, then
        Serial.write(c);                    // print it out the serial monitor
        header += c;
        if (c == '\n') {                    // if the byte is a newline character
          // if the current line is blank, you got two newline characters in a row.
          // that's the end of the client HTTP request, so send a response:
          if (currentLine.length() == 0) {
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
            
            // Nyalain LED on and off sesuai header GET 
            if (header.indexOf("GET /SCK/on") >= 0) {
              Serial.println("Led SCK on");
              LedSCKState = "on";
              digitalWrite(LedSCK, HIGH);
            } else if (header.indexOf("GET /SCK/off") >= 0) {
              Serial.println("Led SCK off");
              LedSCKState = "off";
              digitalWrite(LedSCK, LOW);
            } else if (header.indexOf("GET /ESP/on") >= 0) {
              Serial.println("Led ESP on");
              LedESPState = "on";
              digitalWrite(LedESP, LOW);
            } else if (header.indexOf("GET /ESP/off") >= 0) {
              Serial.println("Led ESP off");
              LedESPState = "off";
              digitalWrite(LedESP, HIGH);
            }
            
            // Display the HTML web page & CSS
            client.println("<!DOCTYPE html><html>");
            client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
            client.println("<link rel=\"icon\" href=\"data:,\">");
            // CSS to style the on/off buttons 
            // Feel free to change the background-color and font-size attributes to fit your preferences
            client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
            client.println(".button { background-color: #195B6A; border: none; color: white; padding: 16px 40px;");
            client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
            client.println(".button2 {background-color: #77878A;}</style></head>");
            
            // Web Page Header
            client.println("<body><h1>ESP8266 Web Server</h1>");
            
            // Display current state, and ON/OFF buttons for LED SCK
            client.println("<p>Status LED SCK " + LedSCKState + "</p>");
            // If the output5State is off, it displays the ON button       
            if (LedSCKState=="off") {
              client.println("<p><a href=\"/SCK/on\"><button class=\"button\">ON</button></a></p>");
            } else {
              client.println("<p><a href=\"/SCK/off\"><button class=\"button button2\">OFF</button></a></p>");
            } 
               
            // Display current state, and ON/OFF buttons for LED ESP 
            client.println("<p>Status LED ESP " + LedESPState + "</p>");
            // If the output4State is off, it displays the ON button       
            if (LedESPState=="off") {
              client.println("<p><a href=\"/ESP/on\"><button class=\"button\">ON</button></a></p>");
            } else {
              client.println("<p><a href=\"/ESP/off\"><button class=\"button button2\">OFF</button></a></p>");
            }
            client.println("</body></html>");
            
            // The HTTP response ends with another blank line
            client.println();
            // Break out of the while loop
            break;
          } else { // if you got a newline, then clear currentLine
            currentLine = "";
          }
        } else if (c != '\r') {  // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }
      }
    }
    // Clear the header variable
    header = "";
    // Close the connection
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
  }
}


Dan lanjutkan mengcompile dan download menuju wemos, perhatikan IP address yg muncul pada serial monitor :



Lanjutkan masuk ke alamat IP tadi pada browser dan akan muncul layar berisikan status LED dan tombol ON - OFF :



Perhatikan ketika salah satu tombol ditekan maka akan ada perintah GET menuju ke header dari websever, mengikuti script a href sepert berikut :


client.println("<p><a href=\"/ESP/on\"><button class=\"button\">ON</button></a></p>");


Artinya saat tombol ditekan maka a href akan mengarahkan browser masuk ke http://ipnya/ESP/on , lalu dibaca headernya dan di baca oleh IF untuk menentukan  LED mana yang nyala dan yang mati.


 if (header.indexOf("GET /SCK/on") >= 0) {

              Serial.println("Led SCK on");

              LedSCKState = "on";

              digitalWrite(LedSCK, HIGH);

            } else if (header.indexOf("GET /SCK/off") >= 0) {

              Serial.println("Led SCK off");

              LedSCKState = "off";

              digitalWrite(LedSCK, LOW);

            } else if (header.indexOf("GET /ESP/on") >= 0) {

              Serial.println("Led ESP on");

              LedESPState = "on";

              digitalWrite(LedESP, LOW);

            } else if (header.indexOf("GET /ESP/off") >= 0) {

              Serial.println("Led ESP off");

              LedESPState = "off";

              digitalWrite(LedESP, HIGH);

            }



            


Memang agak sedikit primitive, ada juga cara lain yg asyncronous tapi memerlukan pemahaman webserver lebih lanjut seperti tulisan saya disini.

 

Lalu bagaimana jika ingin menambahkan pembacaan sensor DHT 11 dan tampil pada laman web ? Cukup ambahkan library DHT11 seperti penjelasan di tulisan  sebelumnya dan  buat function berikut, letakkan diatas setup :


String SendTempHumid(){
  
 String datae ="";
  
  float h = dht.readHumidity();
  float t = dht.readTemperature();


   if (isnan(h) || isnan(t) ) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return "error";
  }

datae+= String(t).substring(0, 4); // tampilkan hanya 3 digit 
datae+= "&deg;C / " ;
datae+= String(h).substring(0, 2); //tapilkan hanya 2 digit
datae+= "%";
Serial.println(datae);
return datae;

}

Function diatas akan menghasilkan string berupa pembacaan suhu dan kelembaban, selanjutnya akan ditampilkan pada layar web. Karena pembacaannya tidak periodik, maka butuh tombol refresh seperti script berikut :


 client.println("<br>");
 client.println("<p>Kondisi : " + SendTempHumid() + "</p>");
 client.println("<p><a href=\"/refresh/\"><button class=\"button\">Refresh</button></a></p>");

Tambahkan script diatas tadi dibagian sebelum client.println("</body></html>"); dan selanjutnya bila ingin mengupdate pembacaan sensor bisa tekan tombol refresh.


Pekerjaan belum selesai sampai disini, naggung ! Masih cuman bisa ngontrol wemos dari lokasi yg dekat dengan wifi routernya, lalu bagaimana menghubungkannya ke Internet ? 

Kita manfaatkan fasilitas DDNS, yaitu Dynamic DNS yg memungkinkan membuat nama domain gratis dan diarahkan ke IP publik yg bisa berubah-ubah. Ada syarat utama yaitu kamu harus menggunakan router wifi dari jaringan kabel/optik dengan ip publik , dan tidak bisa untuk koneksi melalui GSM /4G yang IP nya umumnya lokal / sharing IP. Untuk itu pastikan IP yg didapatkan oleh Router wifi kamu adalah IP publik seperti pada gambar.



Urutannya seperti berikut :

  • Masuk ke konsole GPON atau wifi router (IP nya belakangnya mesti 1) , syukur-syukur masih admin:admin atau user passwordnya kamu ketahui, kalau tidak ya jangan lanjutkan praktek ini.
  • Cek WAN status dan bandingkan dengan IP yg muncul dari  myipadress.com
  • Daftar ke noip.com , tambahkan nama domain DDNS sesuai yg kamu inginkan seperti contoh diatas.
  • Lanjut tambahkan DDNS pada wifi router seperti gambar berikut ini.




  • Pada DDNS masukkan username dan password noip.com 
  • Lakukan port forwarding di 80 (wan dan lan) sehingga setiap yg masuk ke domain akan di routing forward menuju IP Wemo s8266. Jadi jangan sampai salah menambahkan IP wemos kamu.
  • Buka website seperti contoh dibawah ini : http://rumahnyo.ddns.net dan kini bisa mengontrol lampu dan mengetahui suhu dari luar rumah menggunakan jaringan GSM / Internet.










Cara ini adalah cara paling dasar untuk mempelajari IOT menggunakan wemos D1 R2, tujuannya agar mengerti prinsip dasarnya dan tidak bergantung pada platform siap pakai yg ada diluaran sana. Contohnya BLYNK yg sudah umum dipakai tugas IOT mahasiswa dengan library dan platform gratis, cukup menuliskan sebaris script pada sketch arduino dan kemudahan drag drop GUI pada smatphone.

Pada bagian selanjutnya kita akan kirim-kirim data menggunakan standar komunikasi IOT ke cloud yaitu MQTT - PUB SUB.





Share:

Wemos ESP8266 - Part 2 - Hello TCP / IP

 



Praktek kedua dari Wemos D1 R2 kali ini mulai membahas fungsi wifi dari ESP8266, yang merupakan modul wifi + GPIO (General Purpose Input Output) yang siap dipakai mengirimkan berbagai data ke sistem lain yg memerlukan menggunakan jalur TCP/IP atau kerennya internet. 

Sebelum kita lanjut pada prakteknya, kita perlu mengenal I/O pin yg dimiliki oleh wemos dan ada beberapa catatan yg sedikit berbeda dari modul arduino UNO yg berusaha dijiplak oleh Wemos D1.







Port atau pin pada wemos d1 r2 memiliki level logic 5 volt, ada 14 buah I/O yg sering dipakai dan 1 buah analog input untuk tegangan ADC (0-5 volt 10 bit). Penamaan pin nya ada 2 jenis dan umumnya dapat dilihat pada marking tulisan di sebelah portnya. Kalau dilihat dari atas maka Pin nya dinamakan D0 - D13 , sedangkan kalau di balik pada belakang board, nama markingnya ditulis sebagai GPIO X yang nilainya acak. Kadang ada library seperti DHT11 yg bisa menggunakan pin marking atas, namun sebaiknya agar mengikuti pola GPIO Arduino (marking bawah) seperti berikut :



  • D0 dan D1 = RX dan TX dari uart, jangan dipakai karena berhubungan dengan debug, kecuali memang terpaksa
  • D2 (GPIO 16) = Pin ini entah kenapa ter pull down (ada resistor didalamnya yg default GND) , jadi dihindari untuk komunikasi data semisal DHT 11
  • D3 - D10 ( GPIO lihat gambar) = Pin I/O yg aman digunakan
  • D11 - D13 = Terhubung dengan port SPI/programming, jadi kadang ada yg butuh dilepas saat download program dari sketch menuju wemos
  • D14 - D15 = jarang dipakai karena berhubungan dengan data Esp8266
  • A0 = Input analog untuk ADC


Pin I/O 14 terhubung LED pada tengah  board  wemos (marking led SCK)  dan Pin I/O  2 terhubung juga dengan LED pada  Modul ESP8266  sehingga kita dapat bermain-main seperti script dibawah atau menggunakannya untuk keperluan lain. Led pada Pin 14 aktif High sedangkan Led pada pin 2 aktif Low. 






#define LED1 14  //Led board wemos
#define LED2 2 //Led Esp 8266
void setup() {


 pinMode(LED1, OUTPUT);
 pinMode(LED2, OUTPUT);

}

void loop() {
  
 digitalWrite(LED1, LOW);
 digitalWrite(LED2, LOW);
 delay(1000);
 
 digitalWrite(LED1, HIGH);
 digitalWrite(LED2, HIGH);
 delay(1000);
  

}


Hasilnya seperti ini :


*) jika menggunakan LED diluar board, jangan lupa menambahkan resistor 220/330 ohm agar tidak jebol.


Okey kita cukupkan bermain LED yg menyilaukan mata ini, kita kembali ke inti dari tulisan yaitu kita akan melakukan komunikasi TCP ke perangkat lain yaitu Smrtphone. Untuk itu install aplikasi bernama TCP Terminal, atau aplikasi sejenis lainnya. Ini tidak terbatas pada aplikasi simulasi TCP terminal lainnya pada PC, tapi akan terlihat lebih keren pada smartphone.



Untuk koneksi wifinya bisa menggunakan 2 mode yaitu mode router di rumah  atau kata lain jika berlangganan indihome / firstmedia dan lain lain maka bisa memanfaatkan wifi dirumah. Atau jika kamu hanya menggunakan smartphone, maka gunakan fasilitas WIFI Hotspot / tethering  pada smartphone kamu.

Selanjutnya kita akan menjalankan TCP terminal dan memanfaatkannya sebagai TCP server seperti setting berikut :





Script dibawah ini saya buatkan dalam dua mode Router wifi di rumah atau Hotspot smartphone, buka tutup comment untuk menyesuaikan. Untuk kelancaran praktek, sebaiknya membaca dulu praktek DHT 11 di bagian sebelumnya  PART 1.



#include <ESP8266WiFi.h>  //library wifi
#include "DHT.h" //Library DHT 11

#define DHTPIN D7   // lib dht bisa menggunakan penamaan pin DX
#define DHTTYPE DHT11
  
DHT dht(DHTPIN, DHTTYPE);

const char* ssid = "nama wifi"; // Nama wifi yg dipakai
const char* password =  "password"; //  WiFi password

const char* host = "192.168.0.100"; // mode router, gunakan IP HP kamu
//String host="";  //mode Hotspot atau tethering smartphone
const uint16_t port = 4000; //port TCP

WiFiClient klien; 

void setup() {
  Serial.begin(9600);
  dht.begin();
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Terhubung ke WiFi..");
  }
    Serial.println("Koneksi WiFi Berhasil");

  Serial.println("");
  Serial.println("IP address: ");
//  host = WiFi.gatewayIP().toString(); //buka comment jika mode hotspot
  Serial.print("Host IP : ");
  Serial.println(host);
  Serial.print("Local IP : ");
  Serial.println(WiFi.localIP());
  
}


void SendTempHumid(){
  
 String datae ="";
  
  float h = dht.readHumidity();
  float t = dht.readTemperature();


   if (isnan(h) || isnan(t) ) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }



datae+= F("Humidity: ");
datae+= String(h);
datae+= F("%  Temperature: ");
datae+= String(t); 
datae+= F(" °C") ;

Serial.println(datae);

  Serial.print("Terhubung ke ");
  Serial.print(host);
  Serial.print(':');
  Serial.println(port);

  Serial.println("...kirim data ke server..\n");
  

   if (!klien.connect(host, port)) {
    Serial.println("connection failed");
    delay(5000);
    return;
  }

  // kirim data TCP ke server
  if (klien.connected()) {
    klien.println(datae);
  }


}


void loop() {
 
SendTempHumid();
delay(5000);

}


Tampilan di monitor sketch kamu seperti ini :





Dan jika koneksi sukses maka pada smartphone kamu akan terkirim data pengukuran dari sensor suhu dan kelembaban DHT 11.



Praktek selanjutnya disini.

Share:

Rabu, 18 Agustus 2021

Wemos Esp8266 - Part 1 - Hello World !

 

WeMos-D1R2 adalah kit mikrokontroller berkemampuan WiFi berbasis ESP8266-12 yang kompatibel dengan kit Arduino-UNO. Itu berarti papan circuitnya didesain sama dan berfungsi (layaknya) seperti UNO. Tampaknya beberapa shield, sensor, dan perangkat I/O yang dibuat untuk platform Arduino akan bekerja pada WeMos-D1R2 dengan keuntungan sudah tersedia modul WiFi bawaan.


Ada dua produk WeMos yg beredar di pasaran online dan rata-rata merupakan clone ( KW ) namun harganya terjangkau. Yang pertama adalah WeMos-D1 R2 seperti penjelasan diatas, jangan sampai beli versi jadulnya ya. Sedangkan versi mungilnya D1 mini yg menyediakan versi " siap launching " semisal anda mau menjual kontrol elektronik yg packingnya lebih sederhana. D1 R2 memiliki level tegangan I/O 3.3 - 5Volt, sedangkan D1 mini umumnya menggunakan level logic 3,3 volt. Namun anda tidak perlu dipusingkan dengan level logic karena modul siap pakai yg beredar umumnya mampu menghandel logic ini, kecuali menggunakan tambahan IC TTL jadul maka harus menggunakan logic 5 volt 


Saya akan berfokus pada D1 R2 karena sudah tersolder dan siap pakai. Jadi dalam praktek hello World kali ini perlu disiapkan perangkat tambahan :


DHT11 / DHT22





Kabel Jumper Male Female untuk koneksi ke komponen lainnya




Sebelum instalasi pada komputer maka butuh sesuatu untuk menghubungkan wemos ke komputer berupa kabel data micro usb, yg pasti anda temui di charger hp jaman now. Untuk power supply tegangan dari Wemos D1 R2 cukup menggunakan catuan PC dari kabel data micro USB itu juga, jadi tanpa butuh adaptor atau power supply lagi. 

Wemos D1 R2 memiliki chipset USB to serial jenis ch340, sehingga butuh mendapatkan driver yg sesuai, bisa diunduh untuk berbagai jenis OS komputer disini . Jika sukses maka akan muncul com portnya seperti gambar dibawah.







Sedangkan untuk software IDE yg digunakan adalah sketch milik Arduino yang berbasis java. Jadi kalau windows mungkin akan memakan memory namun untuk linux dapat dikatakan lebih cepat eksekusinya. Unduh saja di websitenya : https://www.arduino.cc/en/software






Karena kita akan menggunakan boards yg merupakan bukan boards asli arduino, maka langkah pertama setelah instalasi selesai adalah memberikan library/packages untuk board wemos. Pilih menu preferences pada gambar.




Lalu masukkan pada additional boards : 

http://arduino.esp8266.com/stable/package_esp8266com_index.json 






Jika OK maka pada menu boards manager maka akan dapat menambahkan boards microcontroller berbasis ESP8266 seperti wemos dan sejenis.






Tunggu sebentar untuk loading daftar boards dan ketika sudah loading semua, pilihlah yg paling bawah seperti pada gambar berikut :




Lanjutkan install boards berbasis esp8266, jika selesai lanjutkan dengan memilih board wemos D1 R2 pada menu boards.





Langkah selanjutnya hanya meilih PORT COM yang sesuai, dan kemudian buka sketch dan tambahkan script hello world seperti berikut :



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

}

void loop() {
  Serial.println("Hello World");
  delay(1000);

}

Script singkat diatas akan mengirimkan "hello world" ke serial com di PC kamu dengan baud rate 9600.






Serial monitor pada pojok kanan atas sketch arduino merupakan alat debugging paling powerful terutama saat melihat output pada suatu kejadian atau perubahan variabel.

Lalu bagaimana dengan sensor suhu kelembaban DHT 11? Untuk praktek ini kita perlu menginstall library  unified sensor "adafruit" dan library  DHT. Pilih tools => Manage libraries dan ikuti gambar dibawah.





Selanjutnya hubungkan DHT11 dengan header female, (+) (Out) (-) , sedangkan male nya colokkan ke wemos dengan pin (+) ke 5V, (-) ke GND dan kabel jumper (Out) masukkan ke pin D3 (cari label atau tulisan di atas board) . Script contohnya sebagai berikut :




#include "DHT.h"

#define DHTPIN D3     
#define DHTTYPE DHT11   // DHT 11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println(F("DHT HELLO WORLD!"));
  
  dht.begin();
}

void loop() {
  
  delay(2000);

  //read kelembaban
  float h = dht.readHumidity();
  // Read temperatur celcius
  float t = dht.readTemperature();
 

  // Check error
  if (isnan(h) || isnan(t) ) {
    Serial.println(F("Gagal Terhubung Sensor DHT!"));
    return;
  }

  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.println(F("°C "));
}



Hasilnya sebagai berikut :






Dibagian selanjutnya kita akan mulai menghubungkan wemos ke WiFi dan berkomunikasi secara TCP ke perangkat lainnya.

Share:

Attiny2313 vs Arduino Library, bagaimana solusinya agar tidak habis memorynya ?

 



Seperti yang saya sudah kira sebelumnya kalau platform bernama arduino ini,  memang dirancang untuk IC AVR dengan memory baik flash maupun RAM yang ukurannya berlimpah. Sekelas board arduino UNO menggunakan ATmega328 dengan kapasitas flas 32Mb dan memory SRAM sebanyak 2Kb. Jadi para pembuat library lumayan leluasa untuk berkreasi. Bagaimana dengan Attiny2313 yg hanya flash 2Kb dan memory ram 128 bytes? Ya lihat saja gambar diatas, untuk melakukan pengiriman serial pun sudah menghabiskan memory ram 70% dan ini dijamin akan membuat proses tidak berjalan.

Solusi yang diperlukan untuk mengatasi masalah ini adalah kembali ke model bit banging pada register yg khusus berhubungan dengan komunikasi serial, yang pada attiny2313 berada pada bagian  :

  1. UCSR A/B/C
  2. UBRR L/H
Selengkapnya bisa dilihat pada datasheet dan saya sarankan bisa baca pada project pengenalan USART atau komunikasi serial disini : https://www.aisi555.com/2013/06/tutorial-komunikasi-serial-pada.html .

Jika anda menggunakan  USART atau komunikasi serial pada ATtiny 2313 maka butuh clock yang akan mudah dibagi dengan baudrate umum semisal 9600. Jadi karena dengan adanya DIV8 pada Fusebit ATtiny, maka butuh mengubah setting clock div8 agar attiny menggunakan clok internal 8Mhz. Caranya seperti pada gambar berikut ini :




Mungkin hal ini lebih mudah dilakukan jika kamu menggunakan programmer / dowloader AVR ISP MK2 yg bisa langsung merubah fusebit di atmel studio, seperti yg pernah dibahas disini : https://www.aisi555.com/2013/02/pejelasan-mengenai-fusebit-dari-avr.html . Jadi karena kita menggunakan USBasp maka diingat nilai yg didapat pada kalkulator fusebit tadi yaitu : 

  • LOW = 0xE4
  • HIGH = 0xDF
  • Extended = 0xFF
Lalu bisa dilanjutkan pada Avrdude versi Gui yang lebih gampang dan menghindari kesalahan saat melakukan setting fusebit.





Selanjutnya dengan memasukkan script pada pelajaran komunikasi serial sebelumnya, maka kirim-kiriman serial attiny menggunakan sketch arduino dapat berlangsung dengan lancar.


#define USART_BAUDRATE 9600  // baudrate 9600 bps
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
void init_usart(void)

{

  UCSRB |= (1 << TXEN);   // kirim aja
  UCSRC |= (1 << UCSZ0) | (1 << UCSZ1);
  UBRRL = BAUD_PRESCALE;
  UBRRH = (BAUD_PRESCALE >> 8);

}

void USART_Tx(unsigned char data)

{
  
  while (!(UCSRA & (1<<UDRE)));{} // wait till transmit Data register is empty
  UDR = data; // Send data to the computer


}


void setup() {
  init_usart();


}

void loop() {
  USART_Tx('h');USART_Tx('a');USART_Tx('l');USART_Tx('0');USART_Tx('\n');
  delay(1000);

}





Lalu apa bedanya dengan programming atau koding pada atmel studio ? Ya begitulah tak ada kemewahan library pada chip microcontroller versi mungil seperti attiny, jadi butuh kembali ke dasar pemahaman mengenai register dan proses geser-geser bit, yang akan kita dalami kembali di bagian berikutnya saat attiny akan dicoba mengirim data serial berupa pembacaan sensor DHT11.

Share:

Selasa, 17 Agustus 2021

USB ASP vs Arduino Sketch - Mampu nggak ya ? Kita gunakan packages ATTinyCore

Saat arduino muncul dengan library opensource nya yg beragam dan kemudahan kodingnya, inilah menjadi awal keengganan orang elektro menggunakan IC microcontroller dasar. Padahal fungsi yang sama dengan arduino dapat diraih dengan penggunaan resource ( memori flash dan RAM ) yang lebih irit. Namun ketika IC cloning Atmel 328 muncul dari produsen negara api, semua kemudahan itu menjadi pilihan para mahasiswa yg belajar mikrokontroller.



Lalu bagaimana dengan nasib pencinta IC AVR dasar yang menginginkan kemudahan koding pada sketch arduino? Ternyata diluar sana ada github yg khusus menyediakan platform penerjemah sketch ke avr sekelas attiny yaitu : https://github.com/SpenceKonde/ATTinyCore . Gambar diatas merupakan penerjemahan port I/O yg biasa dikenal di arduino menjadi port pada attiny 2313. Lalu langkah instalasi packagenya bagaimana ?


1. Ubah board manager tambahan dengan pilihan preferences seperti pada gambar 



Pada Additional board tambahkan : http://drazzy.com/package_drazzy.com_index.json 


2.  Pilih Boards manager  




3. Install boards bernama ATTinyCore



4. Pastikan sketch Arduino kamu sudah paling terbaru, sehingga menu boards attiny core muncul seperti gambar 



Ic avr yg kita gunakan adalah ATTiny 2313 A , jadi pilih pada menu yang benar.



5. Hubungkan USB ASP dan pilih jenis programmer yang digunakan 




6. Kita coba scriptnya, dengan Led pada #B0 atau I/O # 9 dan Tombol pull up pada port #B1 atau  I/0 # 10 .



int ledPin = 9; // pin untuk LED
int inPin = 10;   // input pin (tombol)
int val = 0;     // var pin status



void setup() {
  pinMode(ledPin, OUTPUT);  // LED sebagai output
  pinMode(inPin, INPUT);    // tombolsebagai input
  digitalWrite(ledPin, LOW);
}

void loop()
{

val = digitalRead(inPin);  // read input value

  if (val == HIGH) {         // cek tombol
    digitalWrite(ledPin, LOW);  // LED OFF
  } 
  else {
    digitalWrite(ledPin, HIGH);  //  LED ON
  }
}

7. Compile pada arduino scketch dan bisa di unduh menuju attiny melalui usbasp, baik menggunakan sketch langsung atau menggunakan avrdude.



Walau muncul warning seperti diatas, jangan khawatir karena ini merupakan missmatch firmware  saat perintah merubah clock USBasp. Warning ini muncul juga kok di penjelasan sebelumnya  : https://www.aisi555.com/2021/08/usb-asp-avrdude-cara-flash-ic.html


Untuk script lainnya kita bisa gunakan mode tombol toogle terhadap LED.



int ledPin = 9; // pin untuk LED
int inPin = 10;   // input pin (tombol)
int val = 0;     // var pin status
bool nyala = false; // status toogle


void setup() {
  pinMode(ledPin, OUTPUT);  // LED sebagai output
  pinMode(inPin, INPUT);    // tombolsebagai input
  digitalWrite(ledPin, LOW);
}

void loop()
{

val = digitalRead(inPin);  // read input value

 if (val == LOW && nyala == false) {     //toogle
    digitalWrite(ledPin, HIGH);  // LED ON
    nyala=true;
    delay(50);
  } 
  else if (val == LOW && nyala == true){
    digitalWrite(ledPin, LOW);  //  LED OFF
    nyala=false;
    delay(50);
  }
}

Perlu diingat bahwa sketch arduino sangat bergantung pada library yang sangat memakan memory, sedangkan attiny merupakan ic yg minimalis. Jadi penggunaan library sangat dihindari agar mengatasi error akibat memori habis, terutama RAM.

Pada penjelasan selanjutnya akan kita coba membaca DHT11 tanpa library pada attiny 2313.


Share:

USB ASP & AVRDUDE - Cara flash IC Microcontroller AVR

Masih ingat project mikrokontroller pertama kita ? Yah..yang itu bikin led dan tombol ? Jadi saya ingin melewati batas waktu kembali ke 10 tahun yang lalu saat blog ini mulai disusun,  dimana kamu bisa baca kembali disini project dasar mikrokontroller: http://www.aisi555.com/2011/08/basic-output-input-dengan-attiny-2313.html . 




Dengan menggunakan attiny 2313 , led dan tombol saya telah buat panduan agar bisa mempelajari dasar pemrograman dan bahasa GCC dari atmel studio, namun kali ini saya menggunakan alat downloader USB ASP yang lebih murah namun memiliki keterbatasan dalam koneksinya dengan tools IDE milik atmel.

Jangan lupa untuk merakit rangkaian pada projectboard, dan hubungkan PIN USB ISP dengan hubungan kabel seperti berikut :


*) LED pada ISP dapat diabaikan


Kali ini LED dihubungkan pada port #B0  (pin 12) dan kita akan blink LED sederhana saja.


#define F_CPU 1000000UL // frekuensi clock internal 8mhz div 8 
#include <avr/io.h> // definisi standar io port
#include <util/delay.h> // definisi include untuk delay


int main(void)

{



	DDRB=0b1 ; // Inisialisasi bahwa port B0 adalah output



	while(1)

	{

		PORTB=0b1; //port B0 = 1 atau nyala

		_delay_ms(100); //delay

		PORTB=0b0; //port B0 = 0 atau mati

		_delay_ms(100); //delay

	}
	
}

Lalu dimana tempat hexnya di keluarkan saat di build melalui atmel studio ? Ada kok, kira-kira pola direktori nya seperti berikut :


C:\Users\NAMA PC\Documents\Atmel Studio\7.0\nama_project\nama_project\Debug




Lanjut kita akan menggunakan AVRDUDEyang sudah terkenal itu, saya pilihkan saja yg mudah yaitu AVRDUDESS 2.13 Download disini,  pilihan lainnya bisa juga disesuaikan selera anda.





  1. Langkah pertama pastikan koneksi ISP ke port RST-MISO-MOSI-SCK sudah benar ke IC, dengan melakukan signature check IC yang digunakan.
  2. Kalau mau lihat fusebit juga boleh, ini berhubungan dengan pengaturan clock. Lakukan jika anda sudah paham dengan fusebit yaitu membaca ini : https://www.aisi555.com/2013/02/pejelasan-mengenai-fusebit-dari-avr.html . Hati-hati jangan utak-atik karena bisa membunuh ic avr kamu.
  3. Pilih file hex pada directory yg sesuai dan pencet GO. 





Perhatikan output dibawah sebagai monitoring progress download file HEX. Jangan khawatir ada pesan error muncul mengenai perubahan clock speed, tapi ini tidak critical hanya firmware usbasp yg saya gunakan kelihatannya sedikit jadul.


Mudah bukan ? Selanjutnya kita akan bahas USBASP versus arduino sketch, apakah bisa buat download langsung ke IC AVR ?


Share:

USB ASP - ISP Programmer untuk AVR - Bagaimana cara install drivernya ?

Bagaimana kalau kita kembali flashback, ke jaman mikrokontroller AVR singel chip ? Jaman dimana dunia micro tanpa bootloader, yang selalu berhubungan dengan programmer bernama ISP. Ya IC microcontroller AVR sekelas attiny atau ATmega yang saya dalami sejak 2008 silam tidak jauh-jauh dari sebuah hardware bernama ISP atau In Sistem Programming - nama keren nya downloader. 



klik gambar biar lebih jelas

Salah satu alat downloader yg banyak dibicarakan pada saat awal dulu (walau bagi saya sempat menjengkelkan juga) adalah USB ASP. 10 tahun kemudian alat ini masih diperlukan bagi mereka yg belajar mikrokontroller secara dasar, atau yg ingin mendesain mikrokontroller dengan "mode irit" baik biaya maupun resource chip nya disaat pandemi dan perang chip antara amerika vs china, yg membuat pasokan chip semakin langka.


USBasp adalah programer in-circuit dengan interface USB untuk melakukan kontrol dan pemrogramman IC Atmel AVR. Ini hanya terdiri dari ATMega88 atau ATMega8 dan beberapa komponen pasif. Pemrogram menggunakan driver USB khusus firmware, tidak diperlukan pengontrol USB khusus. Dibanding versi komersial yg merupakan ISP dengan approval dari pembuat IC nya langsung yaitu ATMEL, usb asp ini tidak memerlukan lisensi khusus dan semuanya gratis dibagikan di websitenya https://www.fischl.de/usbasp/. Harganya pun jauh sangat murah dibanding downloader sekelas STK500 atau AVR ISP MKII namun ada beberapa perhatian :


  1. Memerlukan instalasi driver secara manual berupa win-lib usb 32
  2. Menggunakan software downloader terpisah berupa AVRDUDE atau versi GUI
  3. Tidak support download software langsung melalui tools Atmel studio, jadi butuh manual mengambil file hex (atau mengarahkan ke direktory file hex setelah compile/build) lalu di flashing menggunakan avrdude.


Sebenarnya, ada dua cara untuk menginstal driver USB ASP di komputer Anda. Cara yang lebih sulit adalah dengan mendownload dan install manual. Memang akan ada warning digital signaturenya, sehingga saya akan merekomendasikan untuk tidak melakukannya


Ada cara yang lebih sederhana dan super mudah untuk menginstal driver libusb yang "signature" nya sudah benar, menggunakan penginstal driver Zadig ( https://zadig.akeo.ie/ ). Zadig menginstal versi libusb yang lebih baru sehingga mungkin tidak berfungsi dengan versi avrdude yang versi jadul. Saya hanya mengujinya dengan versi avrdude terbaru dan berfungsi dengan baik


Dan sekarang untuk petunjuk instalasi:





Usb asp  anda jangan  dicolokkan dulu ke port USB pada PC.



Unduh Zadig dari http://zadig.akeo.ie/ dan jalankan file yang dapat exe nya. Ketika Anda sudah menjalankan aplikasi Zadig, colokkan programmer USBasp.





Pilih libusb-win32 seperti pada gambar diatas, kadang jika terlanjur salah install  anda juga bisa melakukan replace driver seperti gambar dibawah.



Cara menampilkannya dengan memilih options dan list all device. Pilih juga usb asp pada daftar hargware di dropdown menu paling atas. Dan ketika dilihat pada Device manager akan muncul device seperti berikut :



Jika menggunakan AVRDUDE dan koneksi usbasp ke IC benar (akan dibahas pada tulisan selanjutnya) akan muncul signature IC yg benar seperti gambar berikut:


AVRDUDE versi GUI yg paling mudah, silahkan googling untuk mencarinya GRATIS !

Untuk cara pemrograman buka saja link berikut : https://www.aisi555.com/2021/08/usb-asp-avrdude-cara-flash-ic.html

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 (28) 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 (76) 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