Esp8266 การควบคุมอินเทอร์เน็ตผ่านโปรโตคอล MQTT

Esp8266 การควบคุมอินเทอร์เน็ตผ่านโปรโตคอล MQTT
สวัสดีทุกคน! บทความนี้จะอธิบายรายละเอียดและแสดงวิธีตั้งค่าการควบคุมระยะไกลของโมดูล esp20 โดยใช้แอปพลิเคชัน Android โดยใช้โปรโตคอล MQTT ในเวลาว่างเพียง 8266 นาที

แนวคิดของการควบคุมและการตรวจสอบจากระยะไกลได้กระตุ้นความคิดของผู้ที่หลงใหลเกี่ยวกับอุปกรณ์อิเล็กทรอนิกส์และการเขียนโปรแกรมอยู่เสมอ ท้ายที่สุดแล้ว ความสามารถในการรับหรือส่งข้อมูลที่จำเป็นได้ตลอดเวลา โดยไม่คำนึงถึงตำแหน่งที่ตั้งของคุณ ทำให้มีโอกาสมากมาย ในบทความก่อนหน้านี้ของฉัน บทความ 1 и บทความ 2) ฉันพยายามพิจารณาตัวเลือกราคาไม่แพงและค่อนข้างง่ายหลายตัวสำหรับการนำการควบคุมระยะไกลของไมโครคอนโทรลเลอร์ผ่านอินเทอร์เน็ต อย่างไรก็ตาม เวลาและโลกทั้งโลกไม่หยุดนิ่ง ความก้าวหน้ายังคงดำเนินต่อไปอย่างไม่ย่อท้อ ในช่วงเวลาสั้น ๆ นี้ โมดูล esp8266 ได้รับความนิยมอย่างกว้างขวาง ซึ่งด้วยราคาที่ถูกและ wi-fi ในตัว ได้กลายเป็นหนึ่งในองค์ประกอบหลักของสมาร์ทโฮม

ในขณะนี้ MQTT เป็นโปรโตคอลการถ่ายโอนข้อมูลขั้นสูงและเป็นที่นิยมมากที่สุดระหว่างอุปกรณ์แต่ละเครื่องภายในระบบสมาร์ทโฮม มีข้อดีหลายประการเหนือโปรโตคอลอื่น:
- ปริมาณการใช้ข้อมูลต่ำ
- การเชื่อมต่อระหว่างไคลเอ็นต์และเซิร์ฟเวอร์เปิดอยู่เสมอ
- ไม่โหลดช่องอินเทอร์เน็ต
— ไม่มีความล่าช้าในการรับส่งข้อมูล
— ระบบการสมัครสมาชิกหัวข้อที่สะดวก;
ทั้งหมดนี้ทำให้สามารถตรวจสอบและควบคุมได้แบบเรียลไทม์ อย่างไรก็ตาม MQTT ต้องการเซิร์ฟเวอร์ของตัวเอง ซึ่งทำหน้าที่เป็นสื่อกลางระหว่างไคลเอนต์เครือข่าย มีสองวิธีในการสร้างเซิร์ฟเวอร์ของคุณเองหรือใช้บริการของบุคคลที่สาม

ระบบควบคุมที่อธิบายประกอบด้วยสองส่วนหลัก: เซิร์ฟเวอร์ MQTT (โดยปกติจะเป็นส่วนเดียว) และไคลเอนต์ซึ่งอาจมีจำนวนมาก ในกรณีของเรา แอปพลิเคชัน Android และโมดูล esp8266 จะทำหน้าที่เป็นไคลเอ็นต์

อัลกอริทึมการทำงานของระบบมีดังนี้ ลูกค้าเชื่อมต่อกับเซิร์ฟเวอร์และทันทีหลังจากเชื่อมต่อ ลูกค้าแต่ละคนจะสมัครรับข้อมูลในหัวข้อที่เขาสนใจ การสื่อสารทั้งหมดระหว่างไคลเอนต์ส่งผ่านเซิร์ฟเวอร์ ซึ่งเปลี่ยนเส้นทางข้อมูลไปยังไคลเอนต์อื่นตามการสมัครของพวกเขา

เซิร์ฟเวอร์ MQTT

ในกรณีของเรา เราจะใช้บริการที่สะดวกมาก www.cloudmqtt.com ซึ่งมีแผนภาษีฟรี (แมวน่ารัก) ที่จะครอบคลุมความต้องการอย่างเต็มที่สำหรับการติดตั้งระบบสมาร์ทโฮมขนาดเล็กภายในองค์กร
Esp8266 การควบคุมอินเทอร์เน็ตผ่านโปรโตคอล MQTT
มาลงทะเบียนบนเว็บไซต์และรับข้อมูลที่จำเป็นเพื่อเข้าถึงเซิร์ฟเวอร์ เมื่อกำหนดค่าไคลเอนต์ คุณต้องใช้พอร์ตปกติ (ไม่มี SSL และ TLS)
Esp8266 การควบคุมอินเทอร์เน็ตผ่านโปรโตคอล MQTT

แอพพลิเคชั่นสำหรับแอนดรอยด์

แอปพลิเคชันของเราจะทำหน้าที่เป็นแผงควบคุมสำหรับไมโครคอนโทรลเลอร์ และจะรับและแสดงข้อมูลทั้งหมดที่ได้รับจาก esp8266

แอพพลิเคชั่นนี้มีชื่อว่า แดชบอร์ด IoT MQTT และเป็นไคลเอนต์ mqtt สำเร็จรูปที่มีวิดเจ็ตที่มีประโยชน์จำนวนน้อย คุณสามารถดูวิดีโอสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีใช้แอป

เอสพี8266.

โมดูลถูกแฟลชในสภาพแวดล้อมการเขียนโปรแกรม Arduino อย่างไรก็ตาม ฉันต้องการทราบว่าโมดูลมีปัญหากับเฟิร์มแวร์ใน Arduino เวอร์ชันล่าสุด ดังนั้นฉันขอแนะนำให้ใช้เวอร์ชัน 1.6.4
ตัวอย่างเช่น LED (8266 ขา) และเซ็นเซอร์อุณหภูมิ ds5b18 (20 ขา) เชื่อมต่อกับ esp2
เนื่องจากจำเป็นต้องรับข้อมูลเพื่อควบคุม LED หลังจากเชื่อมต่อแล้ว esp จะต้องสมัครรับหัวข้อ "ทดสอบ / นำ" ที่สอดคล้องกัน มิฉะนั้น ข้อมูลที่ส่งทั้งหมดจะผ่านโดยไมโครคอนโทรลเลอร์ของเรา
คุณไม่จำเป็นต้องสมัครสมาชิกเพื่อส่งข้อมูลอุณหภูมิ แต่เมื่อส่งค่าอุณหภูมิ คุณต้องระบุหัวข้อที่จะส่งข้อมูลนี้

ด้านล่างนี้เป็นภาพร่างพร้อมความคิดเห็นโดยละเอียด

ร่าง Esp8266_mqtt.ino// Светодиод подлкючен к 5 пину
// Датчик температуры ds18b20 к 2 пину

#รวม
#รวม
#รวม
#รวม

#กำหนด ONE_WIRE_BUS 2
วันไวร์ วันไวร์(ONE_WIRE_BUS);
เซ็นเซอร์อุณหภูมิดัลลาส(&oneWire);

const char *ssid = "สนามบิน"; // ชื่อจุดเชื่อมต่อ WiFi
const char *pass = "รหัสผ่าน"; // รหัสผ่านจากจุดเข้าถึง

const char *mqtt_server = "เซิร์ฟเวอร์"; // ชื่อเซิร์ฟเวอร์ MQTT
const int mqtt_port = 11140; // พอร์ตสำหรับเชื่อมต่อกับเซิร์ฟเวอร์ MQTT
const char *mqtt_user = "เข้าสู่ระบบ"; // บันทึกจากเซิร์ฟเวอร์
const char *mqtt_pass = "ผ่าน"; // รหัสผ่านเซิฟเวอร์

#กำหนด BUFFER_SIZE 100

bool LedState = false;
inttm=300;
อุณหภูมิลอยตัว=0;

// ฟังก์ชั่นสำหรับรับข้อมูลจากเซิร์ฟเวอร์

การโทรกลับเป็นโมฆะ (const MQTT::Publish& pub)
{
Serial.print(pub.topic()); // ส่งออกชื่อหัวข้อไปที่พอร์ตซีเรียล
Serial.print(" => ");
Serial.print (pub.payload_string()) // ส่งออกค่าของข้อมูลที่รับได้ไปยังพอร์ตซีเรียล

สตริง payload = pub.payload_string();

if(String(pub.topic()) == "test/led") // ตรวจสอบว่าข้อมูลมาจากหัวข้อที่เราต้องการหรือไม่
{
int stled = payload.toInt(); // แปลงข้อมูลที่ได้รับให้เป็นชนิดจำนวนเต็ม
digitalWrite(5,สเต็ด); // เปิดหรือปิดไฟ LED ขึ้นอยู่กับค่าข้อมูลที่ได้รับ
}
}

WiFiClient ไคลเอนต์;
ไคลเอนต์ PubSubClient (wclient, mqtt_server, mqtt_port);

การตั้งค่าเป็นโมฆะ () {

เซ็นเซอร์.เริ่มต้น();
Serial.begin (115200);
ล่าช้า (10);
อนุกรม. println ();
อนุกรม. println ();
โหมดพิน (5, เอาต์พุต);
}

ห่วงเป็นโมฆะ () {
//เชื่อมต่อไวไฟ
หาก (WiFi.status() ไม่เท่ากับ WL_CONNECTED) {
Serial.print("กำลังเชื่อมต่อกับ ");
Serial.print(ssid) คือ
Serial.println("...");
WiFi.begin(ssid, pass);

หาก (WiFi.waitForConnectResult() ไม่เท่ากับ WL_CONNECTED)
กลับ;
Serial.println("เชื่อมต่อ WiFi แล้ว");
}

// เชื่อมต่อกับเซิร์ฟเวอร์ MQTT
หาก (WiFi.status() == WL_CONNECTED) {
ถ้า (!client.connected()) {
Serial.println("กำลังเชื่อมต่อกับเซิร์ฟเวอร์ MQTT");
หาก (client.connect(MQTT::Connect("arduinoClient2")
.set_auth(mqtt_user, mqtt_pass))) {
Serial.println("เชื่อมต่อกับเซิร์ฟเวอร์ MQTT");
client.set_callback(การโทรกลับ);
ลูกค้า.สมัครสมาชิก("ทดสอบ/นำ"); // สมัครสมาชิกหัวข้อพร้อมข้อมูลสำหรับ LED
} else {
Serial.println("ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MQTT ได้");
}
}

หาก (client.connected()){
ไคลเอนต์.ลูป();
ส่งชั่วคราว();
}

}
} // สิ้นสุดลูปหลัก

// ฟังก์ชั่นสำหรับส่งค่าการอ่านจากเซ็นเซอร์วัดอุณหภูมิ
ว่างเปล่า TempSend(){
ถ้า (tm==0)
{
เซ็นเซอร์.requestTemperatures(); // เราได้ค่าอุณหภูมิจากเซ็นเซอร์
float temp = sensors.getTempCByIndex(0);
client.publish("ทดสอบ/ชั่วคราว",สตริง(ชั่วคราว)); // ส่งค่าอุณหภูมิไปที่หัวข้อสำหรับเซ็นเซอร์อุณหภูมิ
Serial.println(ชั่วคราว);
เวลา = 300; // หยุดชั่วคราวระหว่างการส่งค่าอุณหภูมิประมาณ 3 วินาที
}
ทีเอ็ม--;
ล่าช้า (10);
}

เป็นผลให้เราได้รับเครื่องมือที่สะดวกสำหรับการควบคุมระยะไกลและการตรวจสอบข้อมูล ซึ่งค่อนข้างง่ายต่อการเรียนรู้และแม้แต่ผู้เริ่มต้นก็สามารถทำได้

วิดีโอสาธิตการทำงานของระบบควบคุม

เล่นวิดีโอ

คำแนะนำวิดีโอโดยละเอียดสำหรับการตั้งค่าระบบ

เล่นวิดีโอ

หนึ่งในตัวเลือกสำหรับการใช้การควบคุม esp8266 ผ่านโปรโตคอล MQTT

เล่นวิดีโอ

การควบคุมอินเทอร์เน็ตของแถบ LED

เล่นวิดีโอ

หากคุณมีคำถามใดๆ เกี่ยวกับเนื้อหานี้ ฉันขอแนะนำให้ดูส่วนที่สองของวิดีโอ ซึ่งจะนำเสนอเนื้อหาได้ชัดเจนยิ่งขึ้น

ไฟล์เก็บถาวรประกอบด้วยภาพร่างและไลบรารีที่จำเป็นทั้งหมดสำหรับการแฟลชไมโครคอนโทรลเลอร์ด้วยภาพร่างจากตัวอย่าง
โปรดทราบว่าไลบรารี ESP8266WiFi.h ไม่รวมอยู่ในไฟล์เก็บถาวรนี้ แต่จะติดตั้งผ่านตัวจัดการบอร์ดในสภาพแวดล้อม Arduino

คลังเก็บเอกสารสำคัญ

เซิร์ฟเวอร์ MQTT - www.cloudmqtt.com

เชื่อมโยงไปยังแอปแดชบอร์ด IoT MQTT - play.google.com/store/apps/details?id=com.thn.iotmqttdashboard&hl=ru

ขอขอบคุณทุกท่านที่ให้ความสนใจของคุณ

ที่มา: will.com

เพิ่มความคิดเห็น