igurug

igurug

Пикабушник
поставил 1587 плюсов и 1474 минуса
отредактировал 0 постов
проголосовал за 0 редактирований
Награды:
5 лет на Пикабу
1210 рейтинг 16 подписчиков 0 подписок 16 постов 1 в горячем

Спасибо, Raspberry Pi! У моего сына будет классное детство :)

Спасибо, Raspberry Pi! У моего сына будет классное детство :)

Похвастаюсь своим подарком. Фрезерный мини-станок

Похвастаюсь своим подарком. Фрезерный мини-станок

Умный кирпичик для умного дома

Уже несколько лет назад умные дяди изобрели микросхему ESP8266, которая, при должном умении, позволяет превратить любую вещь в доме в гаджет, управляемый непосредственно по WiFi.


Расскажу я вам как сварганить достаточно простой, но очень практичный выключатель. У меня на пайку подобного девайса уходит всего около 2 часов, так что дома оснастил ими половину всех светильников, кофеварку, водонасос, ну и в более примитивной форме запитал электрические вентили для набора воды в ванную.


Нам понадобится совсем немного. Большинство этого можно купить в любом магазине радиодеталей. Сам модуль не настолько популярный, так что заказываю его у китайцев через eBay. Все компоненты дешевые, так что не акцентирую внимание на ценах. В сумме выходит около 10-20 баксов. Итак, список:


1) Модуль ESP8266. Подойдет самая простая модификация с двумя цифровыми входами-выходами. Можно использовать любую другую, так как стоят они ненамного дороже.

Умный кирпичик для умного дома Esp8266, Arduino, Умный дом, Выключатель, Длиннопост

Решил добавить еще распиновку этого модуля. Пригодится дальше

Умный кирпичик для умного дома Esp8266, Arduino, Умный дом, Выключатель, Длиннопост

2) Реле с напряжением переключения 5В и максимальным током нагрузки 10А. Подойдет практически любое реле, если нужно включать не очень мощные приборы.

Умный кирпичик для умного дома Esp8266, Arduino, Умный дом, Выключатель, Длиннопост

3) Полевой транзистор (ПТ). Нужен обязательно полевой. Причина стоила мне дня головоломок. Для того, чтобы включить режим программирования у ESP8266, нужно закоротить его gpio0 на землю. При использовании обычного транзистора из-за наличия p-n перехода между базой и коллектором как раз это и происходит. В результате, девайс всегда включается в режим программирования и не работает. Полевой транзистор также нужен не какой попало. Проблема в том, что ESP8266 работает на 3.3В максимум (при напряжении больше 3.8В сгорает как свечка). По спецификациям, указанным в большинстве ПТ, он начинает открываться от 2В и полностью открывается при 4В. Соответственно, при 3В транзистор только частично открыт и тока не хватает, чтобы активировать реле. В результате у меня получился весьма раздражающий генератор шума. Итак, ПТ должен быть с полным открытием на 3В. Я выбрал 2N7000. Они дешевые и имеют достаточный максимальный ток, чтобы активировать реле.

Умный кирпичик для умного дома Esp8266, Arduino, Умный дом, Выключатель, Длиннопост

4) Стабилизатор напряжения LM317. Может быть, есть что-то покомпактнее, но меня вполне устроил и этот. Он нужен для того, чтобы понизить напряжения до 3.3В. Зачем понижать, если можно использовать питание на 3.3В? Просто. Я не смог найти реле с напряжением активации 3.3В и пришлось использовать питание 5В. Если кто-то найдет – облегчит себе жизнь. Ну а мне, соответственно, чтобы не спалить ESP8266 нужно понижать напругу. 

Умный кирпичик для умного дома Esp8266, Arduino, Умный дом, Выключатель, Длиннопост

5) К LM317 нужны 2 сопротивления 800 Ом и 1000 Ом. По идее, нужны еще емкости на входе и на выходе, но поскольку я использую уже готовый источник питания, там все это присутствует. Ну и природная леность тоже дает знать.


6) Источник питания. Подойдет USB зарядка с током не менее 800А. Я выбирал из принципа: чем компактнее, тем лучше.


Ну и, собственно, это все из электроники, что нам понадобится. Схема соединения всего этого вот такая (прошу знающих электронику людей не ругаться, делал быстро тем, что первое под руку попалось):

Умный кирпичик для умного дома Esp8266, Arduino, Умный дом, Выключатель, Длиннопост

Как видите, схема более чем примитивная. Немного поясню то, что не обозначено. Внизу – изображение с распиновкой ESP8266. Если интересует название пинов, гуглится эта картинка очень быстро. Слева «батарейка» - это источник питания, то есть зарядка USB. Не перепутайте, реле запитывается от 5В, а не от 3.


Еще один комментарий. На выходе LM317 при таких сопротивлениях, как указаны на схеме, получается около 3В. Это нормально, модулю хватает. Если есть желание, можно поиграться и довести аж до 3.8В, но превышать нельзя. Горят модули очень быстро.


С электронной частью, кажись, разобрались, но на этом начинается все самое сложное и интересное. Нужно ведь еще запрограммировать ESP8266, ибо он здесь – тягловая лошадка. Поскольку вам придется много раз перепрограммировать модуль, дабы все хорошо освоить и оптимизировать, советую не впаивать его, а сделать сокет. Я его сотворил, выковыряв разъемы из сгоревших ардуинок и составив из них сокет 4х2. Хотя, конечно, готовые сокеты купить просто.


В собранном виде у меня все выглядит примерно так (сфоткал с разных ракурсов). По-хорошему, лучше бы вытравить платку. Компактнее будет, да и соплей поменьше. Но у меня не хватает на это терпения, так что паяю на обычных прототипных платах. Результат выглядит угрожающе, но посередине - это внутренность от USB-зарядки, так что не пугайтесь.

Умный кирпичик для умного дома Esp8266, Arduino, Умный дом, Выключатель, Длиннопост

Как программировать ESP8266. Если не залазить в дебри электроники, я бы рекомендовал использовать Arduino UNO, в котором Reset закорочен на землю. В этом случае он становится обычным конвертером и через пины RX-TX (d0 и d1) можно смело программировать ESP8266. Еще одно преимущество – наличие выхода 3.3В, который используем для питания модуля во время прошивки (в книгах рекомендуют отдельный источник, но у меня работает от ардуины). Соответственно, нужно запитать модуль, а RX-TX ардуино соединить с RX-TX модуля. Не помню точно, какой с каким соединять, но тут можно экспериментально определить. От этого, по крайней мере, ни один модуль еще не пострадал. Ну и, как я уже упоминал, gpio0 нужно соединить с землей до включения питания. Это позволит запустить модуль в режиме программирования.


Соединили. Чем программируем? Счастье все в том, что программировать ESP8266 можно прямо из оболочки ардуино (хотя, это не единственный способ). Но нужно скачать дополнительное ядро (вот тут все подробно описано и выложено https://github.com/esp8266/Arduino).


По сути программирования. Структура кода очень похожа на обычный ардуинный. Основное дополнение – полная реализованность TCP-протокола. С одной стороны это очень круто. Но вот если решите сделать из кнопки полноценный веб-сервер с сайтом и глюками, то придется весь HTTP-протокол прописывать ручками, со всеми его поклонами и реверансами.


Вот самый простой код, который заставит работать эту чудо-кнопку. Оставил только все самое нужное, но, в принципе, наворотить можно много всего. Извините, выглядит убого, поскольку редактора кода с подстветкой синтаксиса тут нет.


#include <ESP8266WiFi.h>

#include <WiFiServer.h>

#include <WiFiClient.h>


const char* ssid = "mywifi"; //вот это название точки доступа


const char* password = "1234567890"; //а это ее пароль



IPAddress ip(192, 168, 1, 176); //поскольку для управления используется IP, задаем его


IPAddress mask(255, 255, 255, 0); //и маску


IPAddress gate(192, 168, 1, 254); //и шлюз, если захотим модулем качать из инета чегото


WiFiServer server(80); //создаем переменную сервер с номером порта. Здесь он 80



void setup(void)

{

pinMode(0, OUTPUT); //В схеме используется один только пин, но на всякий случай обнуляем оба


digitalWrite(0, LOW);


pinMode(2, OUTPUT);


digitalWrite(2, LOW);



WiFi.begin(ssid, password); //Поключаемся к нашему вайфаю


while (WiFi.status() != WL_CONNECTED) {


delay(500);


}


WiFi.config(ip, gate, mask); //Задаем айпишник и все такое


server.begin(); //Стартуем сервер. После этого можем посылать запросы через tcp


} //Все, настройку завершили. Теперь как наш модуль будет включать лампочку



void loop() 

{


WiFiClient client = server.available(); // Проверяем, есть ли какой запрос


if (!client) //Если нет, нечего тут делать. Выходим

return;

}


while (!client.available())  //и ждем, пока появятся данные

{

delay(1);

}


String req = client.readStringUntil('\r'); //читаем данные


client.flush(); // Очищаем буфер от мусора (не уверен точно, но кажется, это так)


if (req.indexOf("/1on") != -1) // Проверяем, содержат ли данные строку «1on»

{

digitalWrite(0, HIGH); //и если да, включаем лампочку

}


else if (req.indexOf("/1off") != -1) // Проверяем, содержат ли данные строку «1off» 

{

digitalWrite(0, LOW); //и если да, выключаем лампочку

}


else if (req.indexOf("/2on") != -1) //Аналогично для второго контакта. Не знаю, к какому 

//будете подключать, но лишняя строка кода не утянет

digitalWrite(2, HIGH);

}


else if (req.indexOf("/2off") != -1) 

{

digitalWrite(2, LOW);

}


client.flush();


//Поскольку, наиболее вероятно, что для управления будет использоваться протокол HTTP, нужно завершить запрос. Формируем строку


String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: close\r\n\r\n";


// и посылаем ее клиенту


client.print(s);


delay(1);


}


Если правильно установили ядро для esp8266 в среде разработки Ардуино, среди возможных моделей должны появиться варианты esp8266. Выбираем Generic esp8266 и компилим.


Вот, собственно, и все. После достаточно долгого процесса компиляции и загрузки, вставляем модуль в выключатель, запитываем оный и если все правильно, реле должно пару раз щелкнуть, когда модуль загружается.


Чтобы включить реле, в браузере пишем «http://192.168.1.176/1on», ну или «http://192.168.1.176/2on». Можно для эффектности еще попрыгать вокруг или произнести заклинение, поскольку на странице не отобразится ничего, а вот реле должно активироваться.


Хотел сделать видео, но оно непоказательно. Если будут предложения или вопросы конкретные, могу заснять отдельные моменты разработки и выложить в комменты.


Ну и небольшое заключение. Модуль действительно мощный. После того, как узнал о нем, раздарил все RF и Bluetooth за ненадобностью ;) Конкретно эта модификация позволяет управлять 2 реле, но есть, например esp8266-12, который имеет 11 цифровых выходов/входов и 1 аналоговый вход. Такой монстр почти способен заменить ардуино. Ну а учитывая еще и частоту 160 МГц против 16 ардуиновских, становится ясно, что за esp8266 будущее.

Показать полностью 7

Очередное неопровержимое доказательство агрессии (новость от 5 канала)

Я у шефа инженер

Свич, конечно, в стене имеется, но выглядит устрашающе
Я у шефа инженер Свич, конечно, в стене имеется, но выглядит устрашающе

Как герои, так украинцы, а как маньяки - советские. Определитесь с наследственностью, а? (повторяю с профом)

http://www.5.ua/polityka/Ukrainskyi-dyplomat-porivniav-Putina-iz-seriinym-maniiakom-Chykatylom-93055.html
Как герои, так украинцы, а как маньяки - советские. Определитесь с наследственностью, а? (повторяю с профом) http://www.5.ua/polityka/Ukrainskyi-dyplomat-porivniav-Putina-iz-seriinym-maniiakom-Chykatylom-93055.html

Обычно обхожу политику стороной, но это очень показательно

Как герои, так украинцы, а как серийный убийца, так советский :) Определитесь уже с наследственностью, а?
Обычно обхожу политику стороной, но это очень показательно Как герои, так украинцы, а как серийный убийца, так советский :) Определитесь уже с наследственностью, а?

Доскакались

Живу в весьма дальнем забугорье, а родители в Харькове. Дабы им не было совсем противно, иногда покупаем им электронику и бытовую технику в интернет магазинах (оплачивал все иностранной кредиткой). Еще в мае все было ОК. Купил папе внешний винт в магазине "rozetka". А несколько дней назад попытался маме на день рождения подарок купить, а меня круто обломали. Электронные платежные системы уже не принимают иностранные карты. То есть, ни подарка, ни цветы заказать уже не получится.
Так вот вопрос: нафига там кто-то скакал, а? И против кого санкции применяют? Получается, против бабушек?
Ну и так, на всякий случай, может кто-то знает Укровские интернет магазины, где можно PayPal расплатиться?
Отличная работа, все прочитано!