Dalam penulisan kali ini, kita akan belajar bagaimana untuk menghantar data ke ThingSpeak menggunakan papan Wemos Lolin32 ESP32 dengan Arduino IDE. Kita akan menggunakan cara mudah untuk menghantar data ke server ThingSpeak iaitu dengan menggunakan pustaka ThingSpeak yang telah disediakan oleh Mathwork. – Pengenalan –

Oleh Muhammad Ilyasaa dalam Tutorial Arduino
Tahap Kesukaran : Baru Mula Belajar

Ikuti tutorial ini terlebih dahulu >> IoT ESP32 Menggunakan Sensor DHT11 DHT22

PERHATIAN : Versi Arduino IDE yang digunakan untuk penulisan tutorial ini adalah Arduino IDE Versi 1.8.4. Kami tidak menjamin penulisan tutorial ini berfungsi pada versi Arduino IDE yang lain.

>> Muat turun Arduino IDE Versi 1.8.4 di sini <<

Kami persembahkan bacaan di laman NADI Eleczone Solutions ini kepada para pelajar, mahasiswa dan peminat teknologi, demi kepentingan perkembangan ilmu teknologi ilmiah dan amaliah di Malaysia tercinta kita.
Semoga diberkahi dan diredhai Allah Subhanahu wa Ta’ala – Amin!

>> PEngenalan <<

Dalam penulisan kali ini, kita akan belajar bagaimana untuk menghantar data ke ThingSpeak menggunakan papan Wemos Lolin32 ESP32 dengan Arduino IDE. Kita akan menggunakan cara mudah untuk menghantar data ke server ThingSpeak iaitu dengan menggunakan pustaka ThingSpeak yang telah disediakan oleh Mathwork.

Melalui pustaka ThingSpeak, kita hanya perlu memanggil beberapa fungsi yang mudah untuk menghantar data ke server ThingSpeak seperti :


ThingSpeak.begin(client);
ThingSpeak.setField(1, dataSuhu);
ThingSpeak.setField(2, dataKelembapan);
ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);

>> teori di sebalik  pustaka ThingSpeak <<

Fungsi fungsi yang akan kita gunakan nanti kelihatan mudah, tapi sebenarnya apa yang berlaku di sebalik fungsi fungsi tersebut? Mari kita rangkumkan serba sedikit tentang apa yang berlaku di sebalik fungsi fungsi mudah di atas melalui gambar di bawah :

HTTP POST Request Method

Hypertext Transfer Protocol (HTTP) adalah antara perkataan yang amat sinonim dengan zaman sekarang. Ianya berfungsi sebagai protokol komunikasi diantara client dan server. Di dalam kes kita kali ini, client adalah ESP32 manakala server adalah ThingSpeak. Berikut adalah contoh komunikasi diantara Client dan Server melalui komunikasi HTTP :

  • ESP32 (yang bertindak sebagai Client) menghantar HTTP request ke ThingSpeak (yang bertindak sebagai Server).
  • ThingSpeak (yang bertindak sebagai Server) membalas respons kepada ESP32 (yang bertindak sebagai Client) melalui komunikasi HTTP.
  • Akhirnya, respons yang diterima ESP32 (yang bertindak sebagai Client) mengandungi info seperti status atau maklumat maklumat tertentu.

HTTP POST

Kata kunci POST digunakan untuk menghantar data ke Server. Contohnya, ESP32 perlu menghantar kata kunci POST bersama sama data sensor bagi membolehkannya disimpan di dalam Server ThingSpeak.

Maklumat maklumat yang dikirim bersama sama kata kunci POST melalui HTTP Request adalah seperti berikut :

POST /update HTTP/1.1
Host: api.thingspeak.com
api_key=api&field1=value
Content-Type: application/x-www-form-urlencoded

Walaubagai manapun, HTTP Request yang diterangkan di atas telah dipermudahkan kepada kita melalui hanya satu fungsi berikut :


ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);

>> Mencipta akaun ThingSpeak <<

ThingSpeak menyediakan Server percuma yang membolehkan kita menyimpan dan mengambil data melalui komunikasi HTTP. Dalam tutorial ini, kita akan menggunakan ThingSpeak untuk menyimpan dan memaparkan data tersebut di mana sahaja melalui laman sesawang ThingSpeak. Dalam penulisan ini, kita akan menyimpan dan memaparkan bacaan sensor DHT pada Server dan laman sesawang ThingSpeak.

Jom kita mulakan penjelajahan untuk menggunakan ThingSpeak. Pertama, pergi ke ThingSpeak.com dan mula untuk membuat akaun secara percuma.

Pastikan anda berjaya membuat akaun baru, kita tidak akan menunjukkan satu persatu cara untuk membuat akaun baru ThingSpeak di sini. Jika anda berjaya membuat akaun baru, dashboard ThingSpeak boleh mula diakses. Pergi ke tab Channel,seterunya My Channel, dan klik pada New Channel.

Kita akan diminta untuk memberi nama pada Channel dan Field yang akan kita wujudkan. Untuk penulisan kali ini, kita akan cuba untuk menghantar data sensor DHT yang dihubungkan kepada papan Wemos Lolin32 ESP32 kita kepada Server ThingSpeak.

Jadi jika anda belum membuat tutorial sebelum ini iaitu tutorial IoT ESP32 Menggunakan Sensor DHT11 DHT22, anda perlulah melakukan tutorial ini terlebih dahulu.

Seterusnya, kita akan memberi nama kepada Channel kita sebagai Projek DHT. Disebabkan DHT akan menghasilkan dua jenis data yang boleh dibaca iaitu data suhu dan data kelembapan, maka kita akan tandakan dua Field untuk digunakan. Field pertama akan kita namakan Suhu manakala Field kedua akan kita namakan Kelembapan. Akhirnya kita klik pada Save Channel untuk mengakhiri tetapan channel kita.

Seterusnya, ada beberapa perkara yang perlu diambil perhatian. Antaranya adalah Channel ID, Channel Sharing Settings dan Write API Key.

Channel ID boleh diperoleh seperti yang ditunjukkan pada gambar di atas.

Channel Sharing Settings yang berada di bawah tab Sharing perlu ditetapkan kepada Share channel view with everyone. Tetapan ini diperlukan untuk kegunaan tutorial kita yang kehadapan.

Write API Key boleh diperoleh di bawah tab API Keys seperti yang ditunjukkan pada gambar di atas.

>> ke bahagian hardware <<

Untuk penulisan kali ini, anda perlu mendapatkan sensor suhu dan kelembapan DHT11 atau DHT22 dan papan Wemos Lolin32 ESP32 :

Buat sambungan sensor DHT11 atau DHT22 ke papan Wemos Lolin32 anda seperti yang ditunjukkan dalam gambar di atas. Kita akan menyambungkan pin data DHT (yang berlabel OUT) ke pin GPIO 25 papan Wemos Lolin32.

Jika anda masih belum melakukan tutorial IoT ESP32 Menggunakan Sensor DHT11 DHT22, anda perlu melakukan tutorial tersebut terlebih dahulu.

>> memasang PUSTAKA <<

Sebelum meneruskan tentang pemasangan pustaka ThingSpeak, pastikan anda telah memasang pustaka OLED dan pustaka DHT. Jika masih belum memasang pustaka OLED dan pustaka DHT, anda boleh ikuti cara caranya melalui penulisan IoT ESP32 Menggunakan Paparan OLED SSD1306 dan juga penulisan IoT ESP32 Menggunakan Sensor DHT11 DHT22.

>> memasang PUSTAKA ThingSpeak <<

Terdapat satu pustaka (Library) ThingSpeak yang sangat popular iaitu pustaka ThingSpeak dari MathWorks.

Buka Arduino IDE dan pergi ke Sketch Include Library > Manage Libraries. Buat carian ThingSpeak di kotak carian dan pasang pustaka ThingSpeak by MathWorks.

Setelah selesai memasang pustaka ThingSpeak, tutup dan buka semula Arduino IDE anda bagi membolehkan pustaka bersedia untuk digunakan.

>> muat naik kod ke papan Wemos Lolin32 <<

Buka perisian Arduino IDE dan copy paste kod di bawah ke Arduino IDE anda.

/* Programmer : Muhammad Ilyasaa Bin Abdul Rahman
 * More info at https://www.nadieleczone.com.my
 */

// Bahagian Pustaka
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DHT.h"
#include "WiFi.h"
#include "ThingSpeak.h"

// Tetapan Paparan OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
const int oledSDA = 5;
const int oledSCL = 4;

// Tetapan Sensor DHT
#define DHTTYPE DHT11
const int sensorDHT = 25;
DHT dht(sensorDHT, DHTTYPE);

// Tetapan Thingspeak
char * ssid = "Nadi Eleczone Solution";   // your network SSID (name) 
char * pass = "abcdefgd";   // your network password
int keyIndex = 0;            // your network key Index number (needed only for WEP)
WiFiClient  client;
unsigned long myChannelNumber = 1824952;
const char * myWriteAPIKey = "QWOGFV982TQ4OX18";
long previousMillis = 0;
long interval = 20000;

void setup() 
{
  // Tetapan untuk OLED
  Wire.begin(oledSDA, oledSCL);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C, false, false)) 
  {
    Serial.println(F("SSD1306 Tiada Dalam Carian"));
    for(;;);
  }

  // Tetapan untuk DHT
  dht.begin();
 
  // Kosongkan Paparan
  display.clearDisplay();
  display.display(); // Arahan dilaksanakan  
  
  // Menetapkan Saiz Perkataan
  display.setTextSize(1);
  display.display(); // Arahan dilaksanakan

  // Menetapkan Warna Perkataan
  display.setTextColor(WHITE);
  display.display(); // Arahan dilaksanakan

  // Tetapan Thingspeak
  WiFi.mode(WIFI_STA);   
  ThingSpeak.begin(client);    
}
 
void loop() 
{
  // Membuat sambungan ke WiFi
  if(WiFi.status() != WL_CONNECTED)
  {
    display.setTextSize(1);
    display.clearDisplay();
    display.setCursor(0, 0);
    display.print("Attempting to connect to SSID: ");
    display.println(ssid);
    display.display();  
      
    while(WiFi.status() != WL_CONNECTED)
    {
      WiFi.begin(ssid, pass); // Connect to WPA/WPA2 network. Change this line if using open or WEP network
      display.print(".");
      display.display();       
      delay(5000);     
    } 
    display.println("\nConnected.");
    display.display();  
    delay(5000);  
    display.clearDisplay();
    display.display();
  }
    
  delay(2000);

  float t = dht.readTemperature();
  float h = dht.readHumidity();

  // Kosongkan Paparan
  display.setTextSize(3);
  display.clearDisplay();
  display.display(); // Arahan dilaksanakan 
  
  // Menetapkan posisi pixel
  display.setCursor(0, 0);
  display.display(); // Arahan dilaksanakan
  
  // Memaparkan perkataan
  display.print(t);
  display.println(" C");
  display.display(); // Arahan dilaksanakan 

  // Memaparkan perkataan
  display.print(h);
  display.println(" %");
  display.display(); // Arahan dilaksanakan 

  // Menghantar data ke Thingspeak setiap 20 saat
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > interval)
  {
    previousMillis = currentMillis; 

    ThingSpeak.setField(1, t);
    ThingSpeak.setField(2, h);
    int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);

    display.setTextSize(1);
    display.clearDisplay();
    display.setCursor(0, 0);   
    if(x == 200)
    {
      display.println("Channel update successful.");
    }
    else
    {
      display.print("Problem updating channel. HTTP error code ");  
      display.println(String(x));    
    }
    display.display(); 
    delay(1000);
  }      
}

Ada beberapa perkara yang perlu diubah pada kod di atas iaitu ssid (nama kepada wifi / hotspot kita) dan pass (password kepada wifi / hotspot kita), myChannelNumber dan myWriteAPIKey.


char * ssid = "Nadi Eleczone Solution";   // your network SSID (name) 
char * pass = "abcdefgd";   // your network password

unsigned long myChannelNumber = 1824952;
const char * myWriteAPIKey = "QWOGFV982TQ4OX18";

myChannelNumber dan myWriteAPIKey boleh didapati di dashboard ThingSpeak kita seperti yang disebutkan sebelum ini. Tukarkan 4 perkara di atas kepada tetapan anda sendiri.

Seterusnya, hubungkan papan Wemos Lolin32 ESP32 ke komputer menggunakan wayar USB. Pilih jenis papan ESP32 anda (dalam penulisan ini, jenis papan yang dipilih adalah WEMOS LOLIN32).

Kemudian, pilih Port yang betul. Pemilihan Port yang salah akan menyebabkan kod gagal dimuat naik. Jika anda tidak dapat melihat Port COM yang memberi tindak balas kepada papan ESP32 di Arduino IDE anda, anda perlu memasang pemacu CP210x USB to UART Bridge VCP terlebih dahulu. Antara satu komputer dengan komputer yang lain akan memberikan nombor COM yang berbeza atau mungkin sama dengan gambar di bawah.

Tekan butang Upload di Arduino IDE. Selepas menekan butang, kod akan mula di compile dan seterusnya mula untuk dimuat naik ke papan Wemos Lolin32 ESP32 anda.

Jika kesemua proses berjalan dengan lancar, anda akan melihat mesej Done uploading yang menandakan proses memuat naik kod ke papan ESP32 sudah berjaya dan selesai.

Sepatutnya sejurus selesai berjaya memasukkan kod, paparan OLED akan mula menunjukkan sesuatu. Pertama ia akan cuba untuk membuat sambungan kepada SSID wifi / hotspot kita menggunakan password yang telah ditetapkan kita  sebentar tadi di dalam kod.

Selepas sambungan kepada SSID wifi / hotspot berjaya disambung, ESP32 kan mula mengambil bacaan suhu dan kelembapann daripada sensor DHT11.

Setiap jangka waktu selang 20 saat, ESP32 akan menghantar data suhu dan kelembapan semasa ke Server ThingSpeak melalui channel number dan API Key yang telah dikodkan oleh kita sebentar tadi.

Pada dashboard ThingSpeak kita pula akan terpapar graf atau bacaan suhu dan kelembapan yang akan dikemaskini setiap 20 saat (selagi papan ESP32 kita dihidupkan).

>> TAHNIAH, ANDA HEBAT <<

Baca artikel tentang Piawaian IoT – Teknologi Radio, Internet Kebendaan Dan Peranti Berkuasa Rendah.

Baca artikel tentang ESP32-S2 Bukan Sebagai Pengganti ESP32.

Kunjungi sekarang kedai Internet of Things ESP32 Pulau Pinang di

Nadi Eleczone Solutions
Lot 1667, Tingkat 1, Jalan Teluk Air Tawar, Taman Air Tawar Indah, 13050 Butterworth, Penang
04 – 351 1802

TINGGALKAN JAWAPAN BALAS ANDA

Sila masukkan ulasan anda!
Sila masukkan nama anda di sini