Hi BDx-ian!
Tutorial kali ini kita akan belajar cara nak kawal LED dan hantar data jarak Ultrasonic Sensor menggunakan Adafruit IO dengan NodeMCU ESP8266. Konsepnya adalah LED akan menyala apabila button “ON” manakala LED tidak menyala apabila button “OFF”. Seterusnya, data jarak dari Ultrasonic Sensor yang bersambung dengan NodeMCU ESP8266 akan dihantar pada Adafruit IO. Output pada Serial Monitor dan dashboard Adafruit IO memaparkan data jarak.
Apa itu Adafruit IO?
Adafruit IO adalah IoT platform yang direka untuk papar dan berinteraksi dengan peranti anda. Adafruit IO membolehkan anda monitor dan kawal sensor atau peranti anda di mana sahaja namun, perlu memastikan ada sambungan internet. Adafruit platform adalah percuma tetapi sekiranya anda ingin lebih banyak pilihan feature pada dashboard anda, platform menawarkan versi berbayar.
Arduino IDE
Install Library
1. Adafruit IO Arduino
Tekan Sketch-> Include Library-> Manage Libraries ->Cari Adafruit IO Arduino by Adafruit -> Install

2. HTTP Client
Tekan Sketch-> Include Library-> Manage Libraries->Cari ArduinoHttpClient by Arduino -> Install

3. Adafruit MQTT
Tekan Sketch-> Include Library-> Manage Libraries->Cari Adafruit MQTT Library by Adafruit -> Install

Board NodeMCU ESP8266
Pergi ke Tools->Pilih board “NodeMCU 1.0 (ESP-12E Module)”

Jika anda belum pernah menggunakan ESP8266, pergi ke tutorial lepas yang terdapat di Cara install board NodeMCU pada Arduino IDE untuk mengetahui cara install.
Adafruit
1. Cipta akaun
Pergi ke Adafruit IO ->Tekan Get Started -> Masukkan maklumat->tekan Create Account.

2. Cipta dashboard
Klik pada menu IO -> Klik Dashboard-> Klik New Dashboard-> Taip “Kawal LED dan hantar data ultrasonic sensor” pada Name -> Tekan Create


3. Cipta feed
Klik Feed-> Klik New Feed-> Taip “onoffbutton” pada Name-> Tekan Create.

Ulang lagi sekali untuk cipta feed ultrasonic sensor.

4. Cipta Block
Pergi ke Dashboard-> Klik pada dahsboard yang anda telah cipta tadi-> Klik Dashboard Settings->Tekan Create New Block

LED
Pilih Toggle-> Klik Feed “onoffbutton”->Tekan Next Step->Isi maklumat Block Settings-> Tekan Create Block



Ultrasonic sensor
Pilih Stream-> Klik Feed “ultrasonicsensor”->Tekan Next Step->Isi maklumat Block Settings-> Tekan Create Block



Komponen
Komponen yang diperlukan untuk tutorial ini:
- LED
- NodeMCU ESP8266
- Breadboard
- Jumper
- Ultrasonic Sensor
Litar

Ultrasonic sensor
- VCC → pin Vin ESP8266
- TRIG → pin D7 ESP8266
- ECHO → pin D8 ESP8266
- GND → GND ESP8266
LED
- +ve terminal → pin D4 ESP8266
- -ve terminal → GND ESP8266
Code
|
#include <ESP8266WiFi.h> #include "AdafruitIO_WiFi.h" #include "Adafruit_MQTT.h" #include "Adafruit_MQTT_Client.h"
#define WIFI_SSID "Nama wifi anda"
#define WIFI_PASS "Password wifi anda"
// Adafruit IO #define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883
#define AIO_USERNAME "Username Adafruit IO anda" #define AIO_KEY "Adafruit IO key anda"
WiFiClient client; // Setup the MQTT client class by passing in the WiFi client and MQTT server and login details. Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); Adafruit_MQTT_Publish ultrasonicsensor = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/ultrasonicsensor"); Adafruit_MQTT_Subscribe onoffbutton = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/onoffbutton");
int LED = 2; int triggerPin = 13; int echoPin = 15;
void MQTT_connect();
void setup() { Serial.begin(115200); delay(10);
// added by Michael pinMode(LED, OUTPUT); pinMode (triggerPin, OUTPUT); pinMode (echoPin, INPUT); Serial.println(F("Adafruit MQTT demo"));
// Connect to WiFi access point. Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASS); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println();
Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP());
// Setup MQTT subscription for onoff feed. mqtt.subscribe(&onoffbutton);
}
uint32_t x=0;
void loop() {
MQTT_connect();
Adafruit_MQTT_Subscribe *subscription; while ((subscription = mqtt.readSubscription(5000))) { if (subscription == &onoffbutton) { Serial.print(F("BUTTON: ")); Serial.println((char*)onoffbutton.lastread);
if (String((char*)(onoffbutton.lastread)) == "ON") { digitalWrite(LED, HIGH); Serial.println("LED ON"); } if (String((char*)(onoffbutton.lastread)) == "OFF") { digitalWrite(LED, LOW); Serial.println("LED OFF"); } Serial.println(); } }
int duration, distance; digitalWrite(triggerPin, HIGH); delayMicroseconds(10); digitalWrite(triggerPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration/2)/29.1;
if (! ultrasonicsensor.publish(distance)) { Serial.println(F("Failed")); } else { Serial.print(F("\distance ")); Serial.print(distance); Serial.print("..."); Serial.println(); } }
// Function to connect and reconnect as necessary to the MQTT server. // Should be called in the loop function and it will take care if connecting. void MQTT_connect() { int8_t ret;
// Stop if already connected. if (mqtt.connected()) { return; }
Serial.print("Connecting to MQTT... ");
uint8_t retries = 3; while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected Serial.println(mqtt.connectErrorString(ret)); Serial.println("Retrying MQTT connection in 5 seconds..."); mqtt.disconnect(); delay(5000); // wait 5 seconds retries--; if (retries == 0) { // basically die and wait for WDT to reset me while (1); } } Serial.println("MQTT Connected!"); } |
Peringatan
|
#define WIFI_SSID "Nama wifi anda"
#define WIFI_PASS "Password wifi anda"
#define AIO_USERNAME "Username Adafruit IO anda" #define AIO_KEY "Adafruit IO key anda" |
Output
Setelah Adafruit MQTT connect dengan projek anda, buka dashboard Adafruit IO.
Apabila button LED “ON”, LED akan menyala. Output pada Serial Monitor memaparkan LED ON.



Apabila button LED “OFF”, LED tidak menyala. Output pada Serial Monitor memaparkan LED OFF.
.jpeg)


Apabila data jarak Ultrasonic Sensor dihantar ke Adafruit MQTT, output pada Serial Monitor dan dashboard Adafruit IO memaparkan data jarak.

Jika anda suka dengan perkongsian tutorial dalam blog kami ni, jangan lupa untuk follow Facebook dan Instagram kami, kat situ ada bermacam info dan update terkini yang akan kami kongsikan kepada anda. Itu sahaja untuk tutorial kami. Stay update dan selamat mencuba!