ตอนนี้ผมจะเรียนรู้กดเปิดปิดไฟ ผ่าน Nodemcu โดยใช้ MQTT ใครรู้มั้งครับ

ตอนนี้ใช้โปรแกรม MQTTBOX ในการเชื่อมต่อ

แล้วตอนนี้เรารู้อะไรบ้างครับ

ตอนนี้ยังไม่ค่อยรู้อะเลยครับ แต่ตอนนี้กำลัง ทำให้ nodemcu กับ Mqttbox เชื่อมหากัน

คืออะไร ลองอธิบายหน่อย ใช้ของอะไรทำครับ

คือแบบว่า สั่ง on ในโปรแกรม Mqtt box แล้ว Mqtt box จะส่งไปให้ nodemcu ให้ที่ค่าส่งมา ทำให้ led ติดอะคับ

http://www.themakerthailand.com/article/17/lesson-13-ก้าวเข้าสู่-iot-ตอนที่-3-สั่งปิดเปิดไฟผ่านโปรโตคอล-mqtt

ผมลองทำตามเว็บนี้แล้วแล้วไฟไม่ติด

1 Likes

ได้แบบนี้รึยังครับ

image

ตรวจสอบตรงนี้รึยัง

ทำตามหมดแล้วครับ

มีครบตามนี้รึป่าวแคบมาดูหน่อยครับ

q

วางโค้ตที่ใช้ หน่อยครับ

code

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const char* ssid = "Home Boss_2.4G";
const char* password = "0984364710";

const char* mqttServer = "broker.mqtt-dashboard.com";
const int mqttPort = 1883;
const char* mqttUser = "aichan";
const char* mqttPassword = "mme28038";

WiFiClient espClient;
PubSubClient client(espClient);

//Pin ที่ต่อไฟ LED
const int led = 2;

void setup() {
Serial.begin(115200);
pinMode(led, OUTPUT);

//สั่งให้ไฟดับก่อน
digitalWrite(led, LOW);

//เชื่อมต่อ wifi
WiFi.begin(ssid, password);


while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print("Connecting to WiFi..");
}

Serial.println("Connected to the WiFi network");

//connect ไปที่ mqtt broker
client.setServer(mqttServer, mqttPort);

//กำหนด function เมื่อมีการส่งข้อมูลมาจาก MQTT
client.setCallback(callback);


while (!client.connected()) { //วนลูปจนกว่าจะต่อสำเร็จ
Serial.println("Connecting to MQTT...");

if (client.connect("ESP8266Client" )) { //Connect to MQTT และกำหนดชื่อในการติดต่อ

Serial.println("connected");

} else {

Serial.print("failed with state ");
Serial.print(client.state());
delay(2000);

}
}

//ส่งข้อมูล publish ไปที่ MQTT Broker โดยตั้ง topic เป็น "esp/test"
client.publish("esp/test", "Hello from ESP8266");

//subscribe topic "esp/test"
client.subscribe("esp/test");

}

//เมื่อมีข้อมูลกลับมาจาก MQTT จะโดนส่งกลับมาที่ Method นี้
void callback(char* topic, byte* payload, unsigned int length) {

Serial.print("Message arrived in topic: ");
Serial.println(topic);

Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);

//หาก message ที่ส่งกลับมามีค่าเป็น 0 ที่ array index ที่ 10 จะสั่งให้ไฟดับ เช่น {'hello':'0'}
//หาก message ที่ส่งกลับมาเป็น 1 จะสั่งให้ไฟติด เช่น {'hello':'1'}
//ตรงนี้แล้วแต่เราจะกำหนดครับ แต่ผมอยากทำให้ง่าย ๆ ก่อนเลยใช้วิธีการ fix ค่าไว้ครับ
if (i == 10) {
if ((char)payload[i] == '0') { //turn off light
digitalWrite(led, LOW);
} else {
digitalWrite(led, HIGH);
}
}
}



Serial.println();
Serial.println("-----------------------");

}

void loop() {
client.loop();

}

ทำแล้วครับผม

ตอนนี้ผมทำให้ led ติดได้แล้ว แต่ผมอยากพิมข้อความจาก node แล้วไปขึ้น mqtt อะครับพอชี้แนะได้ปะครับ

ทำอะไรไปถึงได้ชี้แนะหน่อยครับ

ผมลอง copy code จากฝรั่งแล้วลองแก้ไรนิดหน่อย

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

#define LED D2
#define LED1 D3
#define LED2 D4
#define LED3 D5

//Enter your wifi credentials
const char* ssid = "Home Boss_2.4G";
const char* password =  "0984364710";

//Enter your mqtt server configurations
const char* mqttServer = "broker.mqtt-dashboard.com";    //Enter Your mqttServer address
const int mqttPort = 1883;       //Port number
const char* mqttUser = "aichan"; //User
const char* mqttPassword = "mme28038"; //Password

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
  delay(1000);
  pinMode(LED, OUTPUT);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  Serial.begin(115200);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Connecting to WiFi..");
  }
  Serial.print("Connected to WiFi :");
  Serial.println(WiFi.SSID());

  client.setServer(mqttServer, mqttPort);
  client.setCallback(MQTTcallback);

  while (!client.connected()) {
    Serial.println("Connecting to MQTT...");

    if (client.connect("ESP8266", mqttUser, mqttPassword )) {

      Serial.println("connected");

    } else {

      Serial.print("failed with state ");
      Serial.println(client.state());  //If you get state 5: mismatch in configuration
      delay(2000);

    }
  }

  client.publish("outboss", "Hello from ESP8266");
  client.subscribe("inboss");

}

void MQTTcallback(char* topic, byte* payload, unsigned int length) {

  Serial.print("Message arrived in topic: ");
  Serial.println(topic);

  Serial.print("Message:");

  String message;
  for (int i = 0; i < length; i++) {
    message = message + (char)payload[i];  //Conver *byte to String
  }
  Serial.print(message);
  if (message == "A") {
    digitalWrite(LED, HIGH);
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, HIGH);
    client.publish("outboss", "LED ON");
    Serial.println(" [ LED On ]");
    
  }   //LED on
  if (message == "B") {
    digitalWrite(LED, LOW);
    digitalWrite(LED1, LOW);
    digitalWrite(LED2, LOW);
    digitalWrite(LED3, LOW);//LED off
    client.publish("outboss", "LED OFF");
    Serial.println(" [ LED OFF ]");
  }

  Serial.println();
  Serial.println("-----------------------");
}

void loop() {
  client.loop();
}
1 Likes