Loading...
OUR BLOG

Kawal LED dan hantar data Ultrasonic Sensor pada Adafruit IO menggunakan NodeMCU ESP8266

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:

 

 

Litar

 

Ultrasonic sensor

 

 

LED

 

 

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. 

 

 

 

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!

Unsure Whether You Need Our Help?

Have you got an awesome new idea or project that you want to talk about? We're here to talk you through it. Flick us an email or give us a call to get started.