ESP8266:Примеры/Модуль ESP8266, дистанционно управляющий розетками

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Pixel Art Mini Meow Animated.gif Черновик


Модуль ESP8266, дистанционно управляющий розетками[1]

В этой статье рассказывается, как собрать веб-сервер на базе ESP8266, позволяющий дистанционно управлять двумя розетками.

Перед тем, как продолжить, пройдите вот эти руководства:

Сначала посмотрите вот это видео:

[Видео]

Необходимые компоненты

  • Один модуль ESP8266
  • Один программатор FTDI
  • Одна плата Arduino
  • Одна пара из приемника/передатчика RF 433 MHz
  • Розетки и пульт дистанционного управления
ESP01v0.jpg

Дистанционно управляемые розетки (433 МГц)

Имейте в виду, что управление ими осуществляется на радиочастоте 433 МГц. Мой комплект работал вот так:

  • Пульт дистанционного управления – канал 1
  • Розетка 1 – канал 1, режим 1
  • Розетка 2 – канал 1, режим 3
Remote-controlled 2.png

Библиотека «RC Switch»

Для этого проекта нам понадобится библиотека «RC Switch». Чтобы становить ее в IDE Arduino, проделайте следующее:

  1. Загрузите отсюда ZIP-архив с библиотекой
  2. Распакуйте архив
  3. Удалите символы «-» из названия главной папки, иначе IDE Arduino эту библиотеку не распознает
  4. Установите библиотеку в IDE Arduino
  5. Перезапустите IDE Arduino

Эта библиотека работает почти со всеми радиоуправляемыми розетками, имеющимися на рынке.

Цепь и код для приемника

433mhz-receiver-circuit-esp8266-Copy 3.jpg

Подключите Arduino и приемник согласно схеме на картинке выше. Затем загрузите на Arduino код, показанный ниже. Его также можно открыть через IDE Arduino, кликнув на Файл > Примеры > RC Switch > ReceiveDemo_Advanced (File > Examples > RC Switch > ReceiveDemo_Advanced).

 1 /*********
 2   Автор - Руи Сантос (Rui Santos)
 3   Более подробно о проекте на: randomnerdtutorials.com  
 4 *********/
 5 
 6 #include <RCSwitch.h>
 7 
 8 RCSwitch mySwitch = RCSwitch();
 9 
10 void setup() {
11   Serial.begin(9600);
12   mySwitch.enableReceive(0);  //  приемник на прерывании 0,
13                               //  т.е. на цифровом контакте 2
14 }
15 
16 void loop() {
17   if (mySwitch.available()) {
18     output(mySwitch.getReceivedValue(), mySwitch.getReceivedBitlength(), mySwitch.getReceivedDelay(), mySwitch.getReceivedRawdata(),mySwitch.getReceivedProtocol());
19     mySwitch.resetAvailable();
20   }
21 }

Значения для кнопок пульта

Откройте монитор порта IDE Arduino на скорости 9600 бод и начните нажимать кнопки на пульте управления. В мониторе порта начнут появляться данные, и вам нужно сохранить куда-нибудь значения, выделенные на картинке ниже красным цветом:

Tristatevalues 4.png

Схема для 3,3-вольтового программатора FTDI

Чтобы загрузить код на ESP8266, его нужно подключить к программатору FTDI. Как это сделать, показано на картинке ниже:

Flashing-Firmware-FTDI-Programmer 5.png

Загрузка кода на ESP8266

Установите в IDE Arduino аддон для ESP8266, если еще не установили (о том, как это сделать, можно почитать тут). Далее кликните в IDE Arduino на Инструменты > Плата > Generic ESP8266 Module (Tools > Board > Generic ESP8266 Module).

Arduino-IDE-select-esp8266 6.png

Скопируйте в IDE Arduino скетч, показанный ниже. Замените SSID и пароль на собственные. Также понадобится изменить значения для кнопок пульта (их 4). Отредактировав скетч, загрузите его на ESP8266.

 1 /*********
 2   Автор – Руи Сантос (Rui Santos)
 3   Более подробно о проекте на http://randomnerdtutorials.com  
 4 *********/
 5 
 6 #include <ESP8266WiFi.h>
 7 #include <WiFiClient.h>
 8 #include <ESP8266WebServer.h>
 9 #include <ESP8266mDNS.h>
10 #include <RCSwitch.h>
11 
12 RCSwitch mySwitch = RCSwitch();
13 MDNSResponder mdns;
14 
15 // вставляем сюда SSID и пароль для вашей сети:
16 const char* ssid = "YOUR_SSID";
17 const char* password = "YOUR_PASSWORD";
18 
19 ESP8266WebServer server(80);
20 
21 // вставляем сюда значения для кнопок пульта:
22 char* socket1TriStateOn = "0FFF0FFFFFFF";
23 char* socket1TriStateOff = "0FFF0FFFFFF0";
24 char* socket2TriStateOn = "0FFFFF0FFFFF";
25 char* socket2TriStateOff = "0FFFFF0FFFF0";
26 
27 String webPage = "";
28  
29 void setup(void){
30   webPage += "<h1>ESP8266 Web Server</h1><p>Socket #1 <a href=\"socket1On\"><button>ON</button></a>&nbsp;<a href=\"socket1Off\"><button>OFF</button></a></p>";
31   webPage += "<p>Socket #2 <a href=\"socket2On\"><button>ON</button></a>&nbsp;<a href=\"socket2Off\"><button>OFF</button></a></p>";
32   mySwitch.enableTransmit(2);
33   delay(1000);
34   Serial.begin(115200);
35   WiFi.begin(ssid, password);
36   Serial.println("");
37 
38   // ждем подключения:
39   while (WiFi.status() != WL_CONNECTED) {
40     delay(500);
41     Serial.print(".");
42   }
43   Serial.println("");
44   Serial.print("Connected to ");  //  "Подключились к "
45   Serial.println(ssid);
46   Serial.print("IP address: ");  //  "IP-адрес: "
47   Serial.println(WiFi.localIP());
48   
49   if (mdns.begin("esp8266", WiFi.localIP())) {
50     Serial.println("MDNS responder started");
51                //  "MDNSresponder запущен"
52   }
53   
54   server.on("/", [](){
55     server.send(200, "text/html", webPage);
56   });
57   server.on("/socket1On", [](){
58     server.send(200, "text/html", webPage);
59     mySwitch.sendTriState(socket1TriStateOn);
60     delay(1000);
61   });
62   server.on("/socket1Off", [](){
63     server.send(200, "text/html", webPage);
64     mySwitch.sendTriState(socket1TriStateOff);
65     delay(1000); 
66   });
67   server.on("/socket2On", [](){
68     server.send(200, "text/html", webPage);
69     mySwitch.sendTriState(socket2TriStateOn);
70     delay(1000);
71   });
72   server.on("/socket2Off", [](){
73     server.send(200, "text/html", webPage);
74     mySwitch.sendTriState(socket2TriStateOff);
75     delay(1000); 
76   });
77   server.begin();
78   Serial.println("HTTP server started");   
79              //  "Запущен HTTP-сервер"
80 }
81  
82 void loop(void){
83   server.handleClient();
84 }

IP-адрес ESP8266

Откройте монитор порта IDE Arduino на скорости 115200 бод. Подключите 0-ой GPIO-контакт ESP8266 к контакту VCC и сбросьте плату.

Через несколько секунд в мониторе порта появится IP-адрес ESP8266. В моем случае это «192.168.1.70».

Esp-ip-address 7.png

Схема проекта

Это цепь для ESP8266, который хостит веб-сервер и передает радиочастотные сигналы для управления розетками.

Esp-with-433Mhz-Copy 8.jpg

Демонстрация

Чтобы посмотреть, как работает проект, откройте любой браузер на устройстве, подключенном к той же сети, что и ESP8266. Затем впишите в адресную строку IP-адрес и нажмите на  ↵ Enter .

Demonstration esp8266 remote controled demo 9.png

Теперь, нажимая кнопки в браузере, вы можете управлять обеими розетками. То, как проект работает вживую, можно посмотреть в видео в самом начале статьи.

On-and-off-sockets1 10.png

См.также

Внешние ссылки