สรุปว่าใช้ Broker ของ HiveMQ MQTT broker แต่ใช้ use ของคนอื่น โอเคเดียวว่างๆ ผมจะลองเล่นดูนะครับ
ตอนนี้ ฮาร์ทแวร์ต่อแบบไหนครับ มีรูปไหม
ตอนนี้คือสั่ง เปิด/ปิด led online ได้แล้วใช่ไหมครับ
ใช่ครับผมตอนนี้สั่งเปิดปิดได้แล้วแต่มันจะบัคตรงเวลา led เปิด2 ดวงเวลาจะปิดต้องคลิก 2 ครั้งถึงจะดับ
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#define LED D5
#define LED1 D4
#define LED2 D3
#define LED3 D2
int sw = D6;
long lastMsg = 0;
char boss[50];
int value = 0;
String savetxt;
//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 = "inboss"; //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("intboss", "Hello from ESP8266");
client.publish("inboss", "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);
//LED on
if (message == "a") {
digitalWrite(LED, HIGH);
client.publish("inboss", "LED1 ON");
Serial.println(" [ LED1 ON ]");
}
if (message == "s") {
digitalWrite(LED1, HIGH);
client.publish("inboss", "LED2 ON");
Serial.println(" [ LED2 ON ]");
}
if (message == "d") {
digitalWrite(LED2, HIGH);
client.publish("inboss", "LED3 ON");
Serial.println(" [ LED3 ON ]");
}
if (message == "f") {
digitalWrite(LED3, HIGH);
client.publish("inboss", "LED4 ON");
Serial.println(" [ LED4 ON ]");
}
// led off
if (message == "z") {
digitalWrite(LED, LOW);
client.publish("inboss", "LED1 OFF");
Serial.println(" [ LED1 OFF ]");
}
if (message == "x") {
digitalWrite(LED1, LOW);
client.publish("inboss", "LED2 OFF");
Serial.println(" [ LED2 OFF ]");
}
if (message == "c") {
digitalWrite(LED2, LOW);
client.publish("inboss", "LED3 OFF");
Serial.println(" [ LED3 OFF ]");
}
if (message == "v") {
digitalWrite(LED3, LOW);
client.publish("inboss", "LED4 OFF");
Serial.println(" [ LED4 OFF ]");
}
Serial.println();
Serial.println("-----------------------");
}
void loop() {
sw = digitalRead(D6);
client.loop();
long now = millis();
if (now - lastMsg > 2000) {
lastMsg = now;
value++;
snprintf (boss, 50, "Handsome Boss #%ld", value);
Serial.print("Nodemcu message: ");
Serial.println(boss);
client.publish("inboss", boss);
}
if (sw == 1) {
client.publish("inboss", "SW ON");
delay(500);
}
}
อันนี้คือแก้หรอครับ
เปล่าครับ ผมเอามาวางเพื่อไว้ดูโค้ตในกระทู้นี้ประกอบไปเลย จะได้ไม่ต้องสลับไปดูใน IDE
แล้วที่ว่าต้อกด 2 ครั้งคือกดตรงไหนครับ
กดใน โปรแกรมครับ
Code
เวลาที่กด เปิดมันส่งค่า อะไรขึ้นไปครับ
เปิดนี้คือ อะไรหรอครับอันนี้ code ผม ก็อปวางอย่างเดียว 5555
ใน C# กดปุ่มให้เปิด led ครับ
ตอนนี้ผมติดตรงเวลา ใส่ topic ของทั้งสองมันทำงานแค่อันเดียวอะครับ ตอนนี้ผมแก้แบบแยก ฝั่ง subscibe และ publish
ตรงนี้แก้ไขไปยังครับ
ไอตรงนี้เอาไว้ทำอะไรครับ อธิบายหน่อย 555






