
Салам баарына! Бул макалада esp8266 модулун колдонмо аркылуу 20 мүнөттүн ичинде кантип алыстан башкарууну орнотуу керектиги кеңири түшүндүрүлүп, көрсөтүлөт. Android MQTT протоколу аркылуу.
Алыстан башкаруу жана мониторинг идеясы дайыма электроника жана программалоону сүйгөн адамдардын акылын козгоп келет. Анткени, кайсы жерде болбосун, керектүү маалыматтарды каалаган убакта алуу же жөнөтүү мүмкүнчүлүгү кенен мүмкүнчүлүктөрдү берет. Мурунку макалаларымда и ) Мен Интернет аркылуу микроконтроллерлерди алыстан башкарууну ишке ашыруунун бир нече жеткиликтүү жана салыштырмалуу жөнөкөй варианттарын карап көрүүгө аракет кылдым. Бирок, убакыт жана буткул дуйне бир орунда турбайт — прогресс алга карай езунун кыйшаюусуз кыймылын улантууда. Ушул кыска убакыттын ичинде esp8266 модулу кеңири популярдуулукка ээ болду, ал өзүнүн арзан баасына жана орнотулган wi-fi аркасында Smart үйдүн негизги компоненттеринин бири болуп калды.
Азыркы учурда, MQTT Smart Home тутумдарынын ичиндеги айрым түзмөктөрдүн ортосунда өнүккөн жана эң популярдуу маалыматтарды өткөрүү протоколу. Ал башка протоколдорго караганда бир катар артыкчылыктарга ээ:
— трафикти аз керектөө;
- кардар менен сервердин ортосундагы байланыш дайыма ачык;
- Интернет-каналды жүктөбөйт;
— маалыматтарды берүүдөгү кечигүүлөрдүн жоктугу;
— темаларга жазылуунун ыңгайлуу системасы;
Мунун баары реалдуу убакыт режиминде мониторинг жүргүзүүгө жана көзөмөлдөөгө мүмкүндүк берет. Бирок, MQTT өзүнүн серверин талап кылат, ал тармак кардарларынын ортосунда ортомчу болуп иштейт. Өзүңүздүн сервериңизди түзүүнүн же үчүнчү тараптын кызматтарын колдонуунун эки жолу бар.
Сүрөттөлгөн башкаруу системасы эки негизги бөлүктөн турат: MQTT сервери (адатта бирөө гана) жана кардарлар, алардын саны бир топ болушу мүмкүн. Биздин учурда, кардарлар иштеп жаткан тиркеме болот Android жана esp8266 модулунун өзү.
Системанын иштөө алгоритми төмөнкүдөй. Кардарлар серверге туташып, туташкандан кийин дароо эле алардын ар бири аны кызыктырган темаларга жазылышат. Кардарлардын ортосундагы бардык коммуникациялар сервер аркылуу өтөт, бул алардын жазылууларынын негизинде башка кардарларга маалыматтарды кайра багыттайт.
MQTT сервери.
Биздин учурда, биз абдан ыңгайлуу кызматты колдонобуз Акылдуу үйдөгү кичинекей системаны ишке ашыруу үчүн муктаждыктарды толугу менен жабуучу акысыз тарифтик планы бар (Сүйкүмдүү мышык).

Келгиле, сайтка катталып, серверге кирүү үчүн керектүү маалыматтарды алалы. Кардарларды конфигурациялоодо сиз кадимки портту (SSL жана TLSсиз) колдонушуңуз керек.

Приложения на Android.
Биздин тиркеме микроконтроллердин башкаруу панелинин ролун аткарат, ошондой эле esp8266дан алынган бардык маалыматты алат жана көрсөтөт.
Колдонмо деп аталат жана аз сандагы абдан ыңгайлуу виджеттери бар даяр mqtt кардары. Колдонмону кантип колдонуу керектиги тууралуу кененирээк маалымат алуу үчүн видеону көрө аласыз.
Esp8266.
Модуль Arduino программалоо чөйрөсүндө жаркырап турат, бирок мен модулда Arduino'нун акыркы версияларында микропрограммада көйгөйлөр бар экенин белгилегим келет, ошондуктан мен 1.6.4 версиясын колдонууну сунуштайм.
Мисалы, LED (8266 пин) жана температура сенсору ds5b18 (20 пин) esp2га туташтырылган.
LEDди башкаруу үчүн маалыматтарды алуу зарыл болгондуктан, туташтырылгандан кийин, esp тиешелүү "сыноо / LED" темасына жазылуу керек, антпесе бардык жөнөтүлгөн маалыматтар биздин микроконтроллерибизден өтөт.
Температура маалыматтарын жөнөтүү үчүн жазылуунун кереги жок, бирок температуранын маанилерин жөнөтүүдө бул маалыматтар бара турган теманы көрсөтүшүңүз керек.
Төмөндө деталдуу комментарийлер менен эскиз болуп саналат.
Эскиз Esp8266_mqtt.ino// Светодиод подлкючен к 5 пину
// Датчик температуры ds18b20 к 2 пину
#киргизүү
#киргизүү
#киргизүү
#киргизүү
#БИР_ЗИМ_АВТОБУС 2ди аныктаңыз
OneWire oneWire(ONE_WIRE_BUS);
ДалласТемпература сенсорлору(&oneWire);
const char *ssid = "АЭРОПОРТ"; // WiFi кирүү чекитинин аталышы
const char *pass = "PASSWORD"; // Кирүү чекитинен сырсөз
const char *mqtt_server = "сервер"; // MQTT сервердин аты
const int mqtt_port = 11140; // MQTT серверине туташуу үчүн порт
const char *mqtt_user = "Кирүү"; // Серверден журналдар
const char *mqtt_pass = "Өтүү"; // Сервер сырсөз
#БУФЕР_ӨЛЧӨМҮН 100 аныктоо
bool LedState = false;
int tm=300;
float temp=0;
// Серверден маалыматтарды кабыл алуу функциясы
кайра чалууну жокко чыгаруу(const MQTT::Publish& pub)
{
Serial.print(pub.topic()); // сериялык портко теманын атын чыгарыңыз
Serial.print(" => ");
Serial.print(pub.payload_string()); // алынган маалымат маанисин сериялык портко чыгаруу
String payload = pub.payload_string();
if(String(pub.topic()) == "test/led") // маалымат бизге керектүү темадан келгенин текшериңиз
{
int stled = payload.toInt(); // алынган маалыматтарды бүтүн сан түрүнө которуу
digitalWrite(5, stled); // алынган маалымат баалуулуктарына жараша LEDди күйгүзүңүз же өчүрүңүз
}
}
WiFiClient wclient;
PubSubClient кардары(wclient, mqtt_server, mqtt_port);
жараксыз орнотуу () {
sensors.begin();
Serial.begin (115200);
кечигүү (10);
Serial.println ();
Serial.println ();
pinMode (5, OUTPUT);
}
жараксыз цикл () {
// wi-fiга туташуу
эгерде (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 серверине туташуу");
if (client.connect(MQTT::Connect("arduinoClient2")
.set_auth(mqtt_user, mqtt_pass))) {
Serial.println("MQTT серверине туташкан");
client.set_callback(кайра чалуу);
client.subscribe("test/led"); // LED үчүн маалыматтар менен темага жазылуу
башка} {
Serial.println("MQTT серверине кошула алган жок");
}
}
эгерде (client.connected()){
client.loop();
TempSend();
}
}
} // негизги циклдин аягы
// Температура сенсорунан окууларды жөнөтүү функциясы
void TempSend(){
эгерде (tm==0)
{
sensors.requestTemperatures(); // сенсордон температуранын маанисин алабыз
float temp = sensors.getTempCByIndex(0);
client.publish("test/temp",String(темп)); // температуранын маанисин температура сенсорунун темасына жөнөтүңүз
Serial.println(температура);
tm = 300; // 3 секундга жакын температуранын маанилерин жөнөтүү ортосунда тыныгуу
}
tm--;
кечигүү (10);
}
Натыйжада, биз алыстан башкаруу жана маалыматтарды көзөмөлдөө үчүн ыңгайлуу куралды алабыз, аны үйрөнүү абдан оңой, жада калса жаңы баштагандар да жасай алышат.
Башкаруу системасынын иштешин көрсөткөн видео

Системаны орнотуу боюнча кеңири видео көрсөтмөлөр

MQTT протоколу аркылуу esp8266 башкарууну колдонуу варианттарынын бири

LED тилкесин Интернетти башкаруу

Эгерде сизде бул материал боюнча суроолоруңуз болсо, анда мен видеонун экинчи бөлүгүн көрүүнү сунуштайм, анда материал ачык-айкын берилген.
Архив микроконтроллерди мисалдагы эскиз менен жаркыруу үчүн эскизди жана бардык керектүү китепканаларды камтыйт.
ESP8266WiFi.h китепканасы бул архивге кирбегендигин эске алыңыз, ал Arduino чөйрөсүндө Boards менеджери аркылуу орнотулган.
MQTT сервери -
IoT MQTT Dashboard колдонмосуна шилтеме -
Конул үчүн рахмат.
Source: www.habr.com
