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

Материал из ВикиСправочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 1819 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ambox content.png Черновик


Модуль 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

См.также

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

  1. randomnerdtutorials.com - ESP8266 Remote Controlled Sockets