Membuat installasi library DHT11• Buka library manager.• Taipkan dht esp dalam ruang carian.• Klik install bagi dhtESp32-rmt• Buka contoh.
Aturcara DHT11• Ubah baudrate baris ke-25 dari nilai 115200 kepada nilai 9600.• Ubah nilai pin baris ke-31 daripada 13 kepada 33 dan dari DHT22 kepada DHT11.• Upload aturcara dan buat pemerhatian pada Serial Monitor.960033DHT11
Meringkaskan aturcara DHT11• Nilai suhu dan kelembapan disusun supaya lebih informatif.#include <dhtESP32-rmt.h> float humidity = 0.0; { delay(1000); Serial.begin(9600); }{ uint8_t error=read_dht(temperature, humidity, 33, DHT11); if(error) Serial.println(error); else{ Serial.print(\"Suhu: \"); Serial.print(temperature); Serial.print(\", Kelembapan:\"); Serial.println(humidity); }delay(3000); }float temperature = 0.0; void setup() void loop() #include <dhtESP32-rmt.h>float temperature = 0.0;float humidity = 0.0;void setup(){ delay(1000);Serial.begin(9600);}void loop(){ uint8_t error=read_dht(temperature, humidity, 33, DHT11);if(error)Serial.println(error);else{ Serial.print(\"Suhu: \");Serial.print(temperature);Serial.print(\", Kelembapan:\");Serial.println(humidity);}delay(3000); }
Mengintegrasikan DHT11• Aturcara dibawah mengintegrasikan aturcara DHT11 denganaturcara OLED sebelum ini.• Ia akan membuat paparan di OLED berkenaan nilai suhu dankelembapan setiap 2 saat.Aturcara DHT11 + OLEDAturcara DHT11 + OLED
…{ … display.setTextColor(SSD1306_WHITE); display.clearDisplay(); writeOLED(25,30,\"Init...\"); delay(2000); …} display.setTextSize(2); writeOLED(40,0,\"DHT11\"); void setup() …void setup(){ …display.setTextSize(2); display.setTextColor(SSD1306_WHITE);display.clearDisplay();writeOLED(40,0,\"DHT11\");writeOLED(25,30,\"Init...\"); delay(2000); …}Mengubah font OLED utk DHT11 …//============================== DHT11 functions char dht11DataOLED[100], dht11DataT[100], dht11DataH[100];; void getDHT11() { uint8_t error=read_dht(temperature, humidity, 33, DHT11); if(error) Serial.println(error); else{ Serial.print(\"Suhu: \"); Serial.print(temperature); Serial.print(\", Kelembapan:\"); Serial.println(humidity); sprintf(dht11DataH,\"H:%.2f %%\",humidity); display.clearDisplay(); writeOLED(40,0,\"DHT11\"); writeOLED(10,25,dht11DataT); writeOLED(10,42,dht11DataH); }delay(3000); }… sprintf(dht11DataT,\"T:%.2f C\",temperature);…//============================== DHT11 functionschar dht11DataOLED[100], dht11DataT[100], dht11DataH[100];;void getDHT11(){ uint8_t error=read_dht(temperature, humidity, 33, DHT11);if(error)Serial.println(error);else{ Serial.print(\"Suhu: \");Serial.print(temperature);Serial.print(\", Kelembapan:\");Serial.println(humidity);sprintf(dht11DataT,\"T:%.2f C\",temperature);sprintf(dht11DataH,\"H:%.2f %%\",humidity);display.clearDisplay();writeOLED(40,0,\"DHT11\");writeOLED(10,25,dht11DataT); writeOLED(10,42,dht11DataH); }delay(3000); }…
Apakah Blynk?• Blynk ialah platform IoT yang membolehkan pengguna membinaaplikasi mudah alih untuk mengawal dan memantau perantimikropengawal seperti Arduino, ESP32 dan lain-lain secara jauhmelalui internet.
Tetapan Blynk di Arduino IDE• Buka library manager dan taip blynk.• Pasang aplikasi dari Volodymyr.
Membuat akaun Blynk• Buka browser dan taipkan alamat blynk.io• Login atau klik sign up sekiranya tiada akaun.
Limitasi kod akaun free
Carta Alir Projek Blynk5 datastream sahaja3 template projek2 device sahaja
Membina template
Membina template12
Mencipta datastream123
Mencipta datastream12 34Jumlah virtual pin = 8-bit = 0 hingga 255Nilai data type: - Integer : 0, 2, 354 - Double : 1.5, 2.39 - String : “YES”, “26.3 C”
Mencipta dashboard1
Mencipta dashboard1 : Drag n Drop2
Mencipta dashboard123
Mencipta device12
Mencipta device1
Mencipta device12
Copy Auth Token dan ID1Copy tiga tetapan diatas untuk digunakan dalam aturcara Blynk.
Copy Auth Token dan ID1Sekiranya tertekan x dan memerlukan tiga data bagi firmware info, boleh: 1. Klik developer tools. 2. Skrol ke bawah dan copy semula firmware info
Copy Auth Token dan ID1
Aturcara asas Blynk• Buka contoh aturcara Blynk mengikut gambarajah dibawah.
Aturcara asas Blynk• Pada baris ke-33 hingga 35, paste Salinan firmware info Blynk.• Pada baris ke-44 dan 45, isikan tetapan SSID dan pw.• Muat turun aturcara dan buat pemerhatian pada Serial Monitor.
Aturcara asas Blynk#define BLYNK_PRINT Serial #define BLYNK_TEMPLATE_ID \"TMPL6rj7YaUWJ\" #define BLYNK_TEMPLATE_NAME \"Latihan IoT\" #define BLYNK_AUTH_TOKEN \"nNVfm7Ty_6iFg7ntPU-Kzoku7VZZFaEI\" #include <WiFi.h> #include <WiFiClient.h> #include <BlynkSimpleEsp32.h> char pass[] = \"123456abcd\"; { Serial.begin(9600); Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass); }{ Blynk.run(); char ssid[] = \"UTHM_IoT\"; void setup() void loop()#define BLYNK_PRINT Serial#define BLYNK_TEMPLATE_ID \"TMPL6rj7YaUWJ\"#define BLYNK_TEMPLATE_NAME \"Latihan IoT\"#define BLYNK_AUTH_TOKEN \"nNVfm7Ty_6iFg7ntPU-Kzoku7VZZFaEI\"#include <WiFi.h>#include <WiFiClient.h>#include <BlynkSimpleEsp32.h>char ssid[] = \"UTHM_IoT\";char pass[] = \"123456abcd\";void setup(){ Serial.begin(9600);Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);}void loop(){ Blynk.run();}Firmware infoSSID & pwMuat turun aturcara,Buka Serial Monitor,Klik pb RST pada ESP32.
• Pada bahagian Serial Monitor, akan ada paparan Ready.• Manakala pada bahagian Blynk Dashboard, tertera perkataanonline.Aturcara asas Blynk
Menghidupkan LED via Blynk• Tambah aturcara untuk membaca status virtual pin V0 bagi LED.…char pass[] = \"123456abcd\"; { int led = param.asInt(); digitalWrite(15,!led); }{ pinMode(15,OUTPUT); digitalWrite(15,HIGH); Serial.begin(9600); Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass); }…BLYNK_WRITE(V0) void setup()…char pass[] = \"123456abcd\";BLYNK_WRITE(V0){ int led = param.asInt();digitalWrite(15,!led);}void setup(){ pinMode(15,OUTPUT); digitalWrite(15,HIGH);Serial.begin(9600);Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);}…
LED8 LED1PB1 PB2Blynk: LED1
Dashboard pada telefon pintar• Pastikan aplikasi Blynk telah dimuat turun kedalam telefon pintar.• Log masuk menggunakan akaun yang samaseperti di Blynk Web Dashboard.• Ikuti panduan video untuk menetapkandashboard pada telefon pintar.
Hari KetigaPlatform Blynk
Recap Hari Kedua1. Bagaimana untuk mengawal lampu AC melalui ESP32?2. Sekiranya PB jenis active low digunakan, apakah nilai boolsekiranya PB dalam keadaan idle?3. Jika voltan adalah 1.73V, berapakah nilai ADC 12-bit?4. Sekiranya nilai ADC adalah 2971, berapakah nilai voltan?5. Apakah maksimum datastream bagi Blynk akaun percuma?6. Adakah dashboard pada web akan terjana secara automatik diperanti telefon pintar?
Mengawal kecerahan LED melalui PWM• Mengawal kecerahan LED melalui PWM adalah teknik asas yangselalu digunakan untuk:• Kawalan analog seperti kawalan kelajuan motor,• Kecerahan lampu,• Pelarasan nilai suhu dalam sistem pemanas atau penyejuk,• Mengawal posisi servo motor.• etc…
Membuat tetapan pada Blynk Datastream• Pada bahagian Blynk, tambah tetapan mengikut spesifikasi:DatastreamName LED FadingPin V1Data Type IntegerUnits Percentage, %ValueMin 0Max 100DashboardWidget Box SliderSlider SettingDatastream LED Fading (V1)Send value on release OFF
Paparan Blynk Dashboard
Konsep PWM• Pulse Width Modulation (PWM) ialah satu teknik untukmenghasilkan isyarat yang menyerupai output analog.• Teknik ini berbeza daripada output digital yang hanyamemberikan nilai sama ada HIGH atau LOW sahaja.• Voltan purata ini dikawal dalam julat 0V hingga 3.3V denganmengawal duty cycle.• Duty cycle merujuk kepada tempoh denyut berada dalamkeadaan HIGH berbanding keseluruhan tempoh denyutan, dandinyatakan dalam peratus (%).
PWM: Duty Cycle
PWM: Duty CycleFrequency = time to complete 1 cyclevoltage(v)3.3V1 period, tDuty Cycle = ON time for 1 cycle in %50% DC 75% DCDC 100% ? DC 75% ?time(s)50100× 3.3? = 1.65?75100× 3.3? = 2.475?100100× 3.3? = 3.3?
Membaca nilai virtual pin slider …char pass[] = \"123456abcd\"; { Blynk.virtualWrite(V0,LOW); Blynk.virtualWrite(V1,LOW); }BLYNK_WRITE(V0) { int led = param.asInt(); digitalWrite(leds[0],!led); BLYNK_WRITE(V1) { int pwm = param.asInt(); pwm = 255 - (pwm*255/100); Serial.println(pwm); analogWrite(leds[1],pwm); }…uint8_t leds[]={15,2,4,16,17,5,18,19}; BLYNK_CONNECTED()…char pass[] = \"123456abcd\";uint8_t leds[]={15,2,4,16,17,5,18,19};BLYNK_CONNECTED(){ Blynk.virtualWrite(V0,LOW);Blynk.virtualWrite(V1,LOW);}BLYNK_WRITE(V0){ int led = param.asInt();digitalWrite(leds[0],!led);}BLYNK_WRITE(V1){ int pwm = param.asInt();pwm = 255 - (pwm*255/100);Serial.println(pwm);analogWrite(leds[1],pwm);}……{ for(uint8_t i=0;i<8;i++) { pinMode(leds[i],OUTPUT); digitalWrite(leds[i],LOW); }Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass); }{ Blynk.run(); Serial.begin(9600); void loop() void setup()…void setup(){ for(uint8_t i=0;i<8;i++){ pinMode(leds[i],OUTPUT);digitalWrite(leds[i],LOW);}Serial.begin(9600);Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);}void loop(){ Blynk.run();}1. BLYNK_CONNECTED akan memastikan nilai awalan dashboard adalah 0.2. BLYNK_WRITE(V1) membaca sebarang perubahan nilai pada dashboarddan mengubah sbg invert kerana tetapan LED adalah active low.3. Setup untuk 8-bit LED menggunakan konsep array dimana index 0mewakili LED1, sehingga index 7 mewakili LED8.
LED8 LED1PB1 PB2Blynk: LED2
Konsep Task Scheduling• Dalam pembangunan sistem berasaskan mikropengawal, taskscheduling ialah proses untuk memastikan setiap fungsi atauaktiviti dilaksanakan mengikut masa tertentu secara sistematik.• Ini penting kerana mikropengawal biasanya hanya menjalankansatu tugasan pada satu masa.• Sesuai digunakan bagi tugasan yang perlu berjalan serentakseperti membaca sensor, mengawal output, dan menghantar datake server.
Konsep Task Scheduling
Analogi Task Scheduling
Kepentingan Task Scheduling• Mengelakkan penggunaan delay() yang melambatkan keseluruhansystem.• Membolehkan tugasan seperti bacaan sensor, kemas kinipaparan, dan penghantaran data dilakukan secara berkala.• Menjadikan void loop() lebih bersih dan teratur.• Menyokong prestasi sistem yang stabil dan boleh dipercayai.
BlynkTimer dalam Task Scheduling• BlynkTimer ialah alat dalam library Blynk yang membolehkananda menjadualkan pelbagai tugasan secara automatik tanpamengganggu operasi utama Blynk seperti sambungan ke pelayandan penghantaran data.• Slaid berikut menunjukkan format asas penggunaan aturcaradengan BlynkTimer.
Aturcara asas BlynkTimer…#include <BlynkSimpleEsp32.h>BlynkTimer timer;…BLYNK_WRITE(V1){ …}bool statusLED=0;void kelip(){ digitalWrite(leds[2],statusLED);statusLED=!statusLED;}……void setup(){ for(uint8_t i=0;i<8;i++){ pinMode(leds[i],OUTPUT);digitalWrite(leds[i],LOW);}Serial.begin(9600);Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);timer.setInterval(200,kelip);}void loop(){ Blynk.run();timer.run();}123 4• The timer.setInterval set every 0.2s to jump toa function named kelip.• The kelip function will blink the LED3 at aninterval of 5Hz
LED8 LED1PB1 PB2Blynk: LED3
Menghantar nilai ADC ke Blynk• Baca analog pada variable resistor dan map kepada nilai 1-10.• Hantar nilai tersebut ke virtual pin V2.• Tetapan Blynk:DatastreamName ADC ValuePin V2Data Type IntegerUnits NoneValueMin 1Max 10Default value 1DashboardWidget Box GaugeGauge SettingDatastream ADC Value (V2)
Menghantar nilai ADC ke Blynk…BlynkTimer timer;#define var 34…void getADC(){ uint32_t sum=0, avg=0;uint8_t adc=0;for(uint8_t i=0; i<10; i++){ sum += analogRead(var);delay(2); }avg=sum/10;adc=map(avg,0,4095,1,10);Blynk.virtualWrite(V2,adc);}……void setup(){ …timer.setInterval(200,kelip);timer.setInterval(1000,getADC);}…231
Paparan Gauge bagi ADC