ตอนนี้ใช้โปรแกรม MQTTBOX ในการเชื่อมต่อ
แล้วตอนนี้เรารู้อะไรบ้างครับ
ตอนนี้ยังไม่ค่อยรู้อะเลยครับ แต่ตอนนี้กำลัง ทำให้ nodemcu กับ Mqttbox เชื่อมหากัน
คืออะไร ลองอธิบายหน่อย ใช้ของอะไรทำครับ
คือแบบว่า สั่ง on ในโปรแกรม Mqtt box แล้ว Mqtt box จะส่งไปให้ nodemcu ให้ที่ค่าส่งมา ทำให้ led ติดอะคับ
ผมลองทำตามเว็บนี้แล้วแล้วไฟไม่ติด
1 Likes
ได้แบบนี้รึยังครับ
ทำตามหมดแล้วครับ
มีครบตามนี้รึป่าวแคบมาดูหน่อยครับ
วางโค้ตที่ใช้ หน่อยครับ
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