Esp8266 управление светом

Справочная информация

Основы программирования на Lua

Это скриптовый язык программирования, написанный на C. Разработка этого проекта началась в 1993 году силами Роберту Иерузалимски, Луиша Энрике де Фигейреду и Валдемара Келе, работавшими тогда в подразделении Tecgraf при Католическом университете Рио-де-Жанейро.

Более подробно об этом языке программирования можно почитать в «Википедии».

Прошивка NodeMCU для ESP8266 основана на Lua, поэтому если вы хотите писать собственные скрипты для ESP8266, вам важно знать основы этого языка.

Переменные

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

  • Глобальные переменные. Все переменные по умолчанию считаются глобальными (если в коде специально не задано, что они локальные).

pin = 3
test = «It works!»

  • Локальные переменные. Если переменная задана локальной, область ее видимости будет ограничена лишь ее функцией.

local pin = 3
local test = «It works!»

  • Поля таблиц. Это особый тип переменных, в которых может храниться все, за исключением «nil» (мы это затрагивать не будем).

Примечание: Lua – это язык, чувствительный к регистру. Поэтому переменная «PIN» – это не то же самое, что «Pin» или «pin».

Типы данных (типы значений)

Lua – это язык с динамической типизацией, поэтому у переменных нет типов данных. Типы данных есть только у значений. Значения могут храниться в переменных, передаваться в виде параметров и возвращаться в виде результатов.

В таблице ниже показаны типы данных для значений в языке Lua.

Тип значения Описание
Строка (string) Массив символов
Число (number) Действительное (двойной точности с плавающей запятой) число
Булево значение (boolean) Значение «true» или «false». Как правило, используется для проверки выполнения условий
Функция (function) Функция, написанная на Lua
Неопределенное значение (nil) В такой переменной не хранится никаких данных
Таблица (table), пользовательские данные (userdata) и поток (thread) Эти три типа данных мы затрагивать не будем

Вот примеры некоторых из этих типов значений:

  1. print(type(«Hello world!»)) –- строка
  2. print(type(7)) — число
  3. print(type(true)) — булево значение
  4. print(type(print)) — функция
  5. print(type(nil)) — неопределенное значение

Примечание: Работая с ESP8266 и прошивкой NodeMCU, вы изредка будете встречать тип данных «nil». Это будет значить лишь, что такая переменная не определена. Также, если вы хотите удалить какое-то значение в какой-то переменной, просто присвойте ей значение «nil».

Комментарии – это просто текст, в котором программист объясняет, как работает его код. Если какой-то фрагмент кода помечен как комментарий, то ESP-модуль проигнорирует его и не будет обрабатывать. Комментарии начинаются с двух тире («—«). Вот два типа комментариев:

  • Однострочные комментарии:

print(«Hello World!») –- комментарий в одну строчку

  • Многострочные комментарии:

—]

Операторы

Оператор – это символ, который говорит интерпретатору выполнить определенное математическое или логическое действие. В язык Lua встроено много операторов разных типов:

  • Арифметические операторы;
  • Операторы сравнения;
  • Логические операторы;
  • Прочие операторы;

Читая таблицы и примеры ниже, представьте, что имеете дело с двумя переменными: «А», в которой хранится значение «1», и «B», в которой хранится значение «2».

  1. A = 1
  2. B = 2
Арифметические операторы
Оператор Пример Результат
+ A + B 3
A — B -1
* A * B 2
/ B / A 2
% B % A 0
^ B^2 4
-A -1
Операторы сравнения
Оператор Пример Результат
== (A == B) false
~= (A ~= B) true
> (A > B) false
< (A < B) true
>= (A >= B) false
<= (A <= B) true
Логические операторы
Оператор Пример Результат
and (и) (A and B) false
or (или) (A or B) true
not (не) !(A and B) true
Оператор конкатенации

Теперь представьте, что у нас две новые переменные:

  1. a = «Hello!»
  2. b = «World!»
Оператор Пример Результат
.. a..b «Hello World!»

Циклы

Цикл позволяет выполнить блок кода несколько раз, пока выполняется заданное условие. Во фрагменте кода ниже – пока значением в переменной «boolean_value» является «true».

  1. — цикл while
  2. while boolean_value
  3. do
  4. — код будет выполняться, пока в «boolean_value» будет «true»
  5. end
  6. — и цикл for
  7. for min, max, increment
  8. do
  9. — код будет выполняться, пока не будет достигнуто макс. значение
  10. end

Операторы if… else

Операторы if… else (т.е. «если… иначе») – один из самых важных инструментов для управления программой. Они используются следующим образом:

  1. if boolean_value then
  2. — если в переменной «boolean_value» значение «true»
  3. else
  4. — если в переменной «boolean_value» значение «false»
  5. end

Названия этих операторов говорят сами за себя. Если выполнено условие «boolean_value=true», то программа выполнит код, идущий после «if». Но если условием является «boolean_value=false», то программа выполнит код, идущий после «else».

Функции

Функции – отличный способ организации кода. Если вы хотите сделать в программе что-либо несколько раз, вам необязательно по несколько раз прописывать этот код. Можно просто создать отдельную функцию, содержащую этот код, а затем вызывать ее, когда вам нужно.

Ниже показано, как создать новую функцию, принимающую один параметр (температуру в градусах Кельвина) и преобразующую это значение в градусы Цельсия и Фаренгейта.

  1. function displayTemperature(kelvin)
  2. celsius = kelvin – 273.15
  3. print(«Temperature in Celsius is: «, celsius)
  4. fahrenheit = (celsius*9/5+32)
  5. print(«Temperature in Fahrenheit is: «, fahrenheit)
  6. end
  7. k = 294 –- температура в градусах Кельвина
  8. displayTemperature(k) –- эта строчка вызывает функцию, созданную выше

>Загрузка на ESP8266 прошивки NodeMCU

Для этого руководства нам понадобится прошивка NodeMCU. О том, как загрузить ее на чип ESP8266, читайте .

Сборка макетной платы ESP8266

ESP8266 – недорогой SoC-чип со встроенным микроконтроллером и полным стеком протоколов TCP/IP, что означает, что он может напрямую обращаться к вашей Wi-Fi сети.

Поскольку у этого чипа есть свой микроконтроллер, вы можете поместить в него код своего приложения или можете использовать модуль просто как Wi-Fi приемопередатчик, что мы и собираемся сделать в данном проекте. Более эффективно было бы использовать этот модуль и как приемопередатчик, и как контроллер, но в целях обучения мы будем взаимодействовать с модулем, используя Arduino.

Чип ESP8266 поставляется в разных модулях. Мы будем использовать модуль ESP-01. Конечно, вы можете использовать любой другой модуль.

Во-первых, вы должны знать, что модуль работает с напряжением 3,3 В, и напряжение высокого логического уровня от Arduino должно быть таким же, чтобы не повредить наш модуль. Для этого требуется преобразователь уровня напряжения между платой Arduino (которая работает на 5 В) и модулем. Хорошей новостью является то, что в преобразователе будет нуждаться только вывод для передачи на Arduino, поскольку приемный вывод обычно распознает логические сигналы с напряжением 3,3 В от ESP8266.

Одним из простейших способов выполнения этого преобразования является схема от Sparkfun. Вы можете заказать готовый модуль.

Преобразователь уровня 5В → 3,3В

На рисунке ниже показана распиновка нашего модуля на ESP8266:

Распиновка Wi-Fi модуля ESP8266 (вид сверху, не в масштабе)

Вывод Назначение
UTXD Передача данных через UART
URXD Прием данных через UART. Выход, к которому он подключается, должен быть 3,3 В.
CH_PD Выключение: низкий уровень на входе выключает чип, высокий уровень на входе включает его; для нормальной работы модуля необходимо подтянуть его к линии питания.
GPIO0 При загрузке: должен быть высокий уровень, чтобы входить в нормальный режим загрузки; низкий уровень вводит в специальные режимы загрузки.
GPIO2 При загрузке: низкий уровень заставляет загрузчик войти в режим загрузки флеш-памяти; высокий уровень вызывает нормальный режим загрузки.
RST Сброс; активный уровень – низкий.
GND Земля.
VCC Питание/3,3В.

Я использовал LM317, настраиваемый линейный регулятор напряжения с выходным током до 1,5 А, для обеспечения модуля подходящим источником питания 3,3 В.

Примечание: Не используйте вывод 3,3 В от Arduino, так как стабилизатор напряжения 3,3 В на плате Arduino не может обеспечить необходимую для модуля величину тока, особенно при пиковом потреблении энергии во время передачи.

Принципиальная схема макетной платы ESP8266

Я использовал BS170 (вместо BSS138) для преобразователя логических уровней; оба работают хорошо.

Макетная плата ESP8266

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

Код Arduino

Теперь мы сталкиваемся с проблемой. ESP8266 использует UART в качестве интерфейса для AT-команд, а Arduino Uno (которая использует Atmega328) имеет только один порт UART. Этот порт уже подключен к мосту USB-TTL, а также к выводам 0 и 1.

В качестве решения вы можете использовать эмулятор для UART порта на другом цифровом выводе Arduino с помощью библиотек AltSoftSerial или SoftwareSerial. Это позволит вам по-прежнему иметь аппаратный порт UART для отладки и печати сообщений в консоли, а программный порт – для связи с модулем.

Платы Arduino

Многие люди (включая меня) сообщают о проблемах с программным последовательным портом при высоких скоростях передачи – как на тех, что мы будем использовать с esp8266, 115200 бит/с. Я могу сказать, что у вас 50% принятых от модуля данных будет повреждено, если вы используете программный UART, а из переданных от Arduino к модулю данных почти 100% будет корректно. Я получил эти результаты после отслеживания сигналов на линиях RX и TX.

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

//раскомментируйте Serial.*** , если хотите для связи с ESP использовать аппаратный последовательный порт (выводы 0,1) //раскомментируйте esp8266.*** , если хотите для связи с ESP использовать программный последовательный порт (выводы 2,3) #define esp8266_Available() Serial.available() //esp8266.available() #define esp8266_Find(ARG) Serial.find(ARG) //esp8266.find(ARG) #define esp8266_Read() Serial.read() //esp8266.read() #define esp8266_Write(ARG1,ARG2) Serial.write(ARG1,ARG2) //esp8266.write(ARG1,ARG2) #define esp8266_Print(ARG) Serial.print(ARG) //esp8266.print(ARG)

В исходнике вы найдете часть кода, которая устанавливает модуля с вашим роутером:

sendCommand(«AT+RST\r\n», 2000, DEBUG); // перезапустить модуль sendCommand(«AT+CWMODE=1\r\n», 1000, DEBUG); // настроить как точку доступа sendCommand(«AT+CWJAP=\»tur\»,\»341983#tur\»\r\n», 3000, DEBUG); //**** ИЗМЕНИТЬ SSID и ПАРОЛЬ В СООТВЕТСТВИИ С ВАШЕЙ СЕТЬЮ ******// delay(10000); sendCommand(«AT+CIFSR\r\n», 1000, DEBUG); // получить ip адрес sendCommand(«AT+CIPMUX=1\r\n», 1000, DEBUG); // настроить для нескольких соединений sendCommand(«AT+CIPSERVER=1,1337\r\n», 1000, DEBUG); // включить сервер на порту 1337

Цикл скетча ожидает команды, которые должны прийти через Wi-Fi соединение. В настоящее время поддерживаются следующие команды:

  • ‘con’ для получения состояния выводов, высокий или низкий логический уровень;
  • ‘on=’ включить соответствующий вывод;
  • ‘of=’ выключить соответствующий вывод;
  • ‘Tm=n/fS’ установить таймер включения (n) или выключения (f) соответствующего вывода.

Все команды имеют отклик подтверждения.

Примечания:

  • некоторые части скетча основаны на этом руководстве;
  • если вы используете модули со старым SDK, у вас могут быть такие же ошибки, как и у меня. Единственным решением в этом случае является обновление вашей прошивки до последней версии. Посмотрите эту статью, для получения помощи в обновлении прошивки модуля на ESP8266. Я обновил прошивку с версии 1.3 до 1.5.4.

Полный код программы:

#include <SoftwareSerial.h> #define DEBUG 0 // если вы для связи с ESP используете аппаратный последовательный порт, измените значение на 0 #define ESPBaudRate 115200 #define HWSBaudRate 115200 #define OUTPUT1 11 #define OUTPUT2 12 #define OUTPUT3 13 //раскомментируйте Serial.*** , если для связи с ESP хотите использовать аппаратный последовательный порт (выводы 0,1) //раскомментируйте esp8266.*** , если для связи с ESP хотите использовать программный последовательный порт (выводы 2,3) #define esp8266_Available() Serial.available() //esp8266.available() #define esp8266_Find(ARG) Serial.find(ARG) //esp8266.find(ARG) #define esp8266_Read() Serial.read() //esp8266.read() #define esp8266_Write(ARG1,ARG2) Serial.write(ARG1,ARG2) //esp8266.write(ARG1,ARG2) #define esp8266_Print(ARG) Serial.print(ARG) //esp8266.print(ARG) // Делает RX линию Arduino выводом 2, а TX линию Arduino выводом 3. // Это означает, что вам необходимо подключить TX линию от ESP к выводу 2 Arduino, // а RX линию от ESP к выводу 3 Arduino. SoftwareSerial esp8266(2, 3); /*************/ byte OUTPUTstate; byte OUTPUTTMRIsSet ; byte OUTPUTTMRState ; long OUTPUTTimer; /*************/ /***Commands**/ String GETSTATE = «con»; // Строка запроса от мобильного приложения, чтобы узнать состояние каждого выхода String SETON = «on=»; // Строка запроса от мобильного приложения, чтобы включить выход String SETOFF = «of=»; // Строка запроса от мобильного приложения, чтобы выключить выход String TIMER = «tm=»; // Строка запроса от мобильного приложения, чтобы задать таймер для выхода /*************/ void setup() { Serial.begin(HWSBaudRate); // Последовательный порт для отправки сообщений от Arduino на компьютер esp8266.begin(ESPBaudRate); // Программный последовательный порт для отправки сообщений от Arduino на ESP8266 pinMode(OUTPUT1, OUTPUT); digitalWrite(OUTPUT1, LOW); pinMode(OUTPUT2, OUTPUT); digitalWrite(OUTPUT2, LOW); pinMode(OUTPUT3, OUTPUT); digitalWrite(OUTPUT3, LOW); // перезапустить модуль sendCommand(«AT+RST\r\n», 2000, DEBUG); // настроить как точку доступа sendCommand(«AT+CWMODE=1\r\n», 1000, DEBUG); //**** ИЗМЕНИТЬ SSID и ПАРОЛЬ В СООТВЕТСТВИИ С ВАШЕЙ СЕТЬЮ ******// sendCommand(«AT+CWJAP=\»tur\»,\»341983#tur\»\r\n», 3000, DEBUG); delay(10000); // получить ip адрес sendCommand(«AT+CIFSR\r\n», 1000, DEBUG); // настроить для нескольких соединений sendCommand(«AT+CIPMUX=1\r\n», 1000, DEBUG); // включить сервер на порту 1337 sendCommand(«AT+CIPSERVER=1,1337\r\n», 1000, DEBUG); if (DEBUG == true) Serial.println(«Server Ready»); } void loop() { if (esp8266_Available()) // проверить, послал ли esp сообщение { if (esp8266_Find(«+IPD,»)) { // ждать, когда последовательный буфер заполнится (прочитаются все последовательные данные) delay(1000); // получить id подключения, чтобы мы могли отключиться int connectionId = esp8266_Read() — 48; // вычитаем 48 потому, что функция read() возвращает // десятичное значение в ASCII, а 0 (первое десятичное число) начинается с 48 String closeCommand = «AT+CIPCLOSE=»; // создание команды закрытия подключения closeCommand += connectionId; // добавить id подключения closeCommand += «\r\n»; esp8266_Find(‘?’); // Этот символ определяет начало команды теле нашего сообщения String InStream; InStream = (char) esp8266_Read(); InStream += (char) esp8266_Read(); InStream += (char) esp8266_Read(); if (DEBUG == true) Serial.println(InStream); if (InStream.equals(GETSTATE)) { // отклик на команду Status=<состояние_выхода_1><состояние_выхода_2><состояние_выхода_3> String response = «Status=»; response += OUTPUTstate; response += OUTPUTstate; response += OUTPUTstate; sendHTTPResponse(connectionId, response); sendCommand(closeCommand, 1000, DEBUG); // закрыть подключение } else if (InStream.equals(SETON)) { int pinNumber = (esp8266_Read() — 48); // получить первую цифру, т.е., если вывод 13, то 1-ая цифра равна 1 int secondNumber = (esp8266_Read() — 48); if (secondNumber >= 0 && secondNumber <= 9) { pinNumber *= 10; pinNumber += secondNumber; // получить вторую цифру, т.е., если вывод 13, то 2-ая цифра равна 3, // и добавить ее к первой цифре } if (pinNumber == OUTPUT1) OUTPUTstate = 1; else if (pinNumber == OUTPUT2) OUTPUTstate = 1; else if (pinNumber == OUTPUT3) OUTPUTstate = 1; digitalWrite(pinNumber, 1); String response = «Confg=»; // Отклик на команду Confg=<номер_вывода> response += pinNumber; sendHTTPResponse(connectionId, response); sendCommand(closeCommand, 1000, DEBUG); // закрыть подключение } else if (InStream.equals(SETOFF)) { int pinNumber = (esp8266_Read() — 48); // получить первую цифру, т.е., если вывод 13, то 1-ая цифра равна 1 int secondNumber = (esp8266_Read() — 48); if (secondNumber >= 0 && secondNumber <= 9) { pinNumber *= 10; pinNumber += secondNumber; // получить вторую цифру, т.е., если вывод 13, то 2-ая цифра равна 3, // и добавить ее к первой цифре } if (pinNumber == OUTPUT1) OUTPUTstate = 0; else if (pinNumber == OUTPUT2) OUTPUTstate = 0; else if (pinNumber == OUTPUT3) OUTPUTstate = 0; digitalWrite(pinNumber, 0); // изменить состояние вывода String response = «Confg=»; // Отклик на команду Confg=<номер_вывода> response += pinNumber; sendHTTPResponse(connectionId, response); sendCommand(closeCommand, 1000, DEBUG); // закрыть подключение } else if (InStream.equals(TIMER)) { int pinNumber = (esp8266_Read() — 48); // получить первую цифру, т.е., если вывод 13, то 1-ая цифра равна 1 int secondNumber = (esp8266_Read() — 48); if (secondNumber >= 0 && secondNumber <= 9) { pinNumber *= 10; pinNumber += secondNumber; // получить вторую цифру, т.е., если вывод 13, то 2-ая цифра равна 3, // и добавить ее к первой цифре } if (esp8266_Read() == ‘n’) { if (DEBUG == true) Serial.println(«on»); if (pinNumber == OUTPUT1) OUTPUTTMRState = 1; else if (pinNumber == OUTPUT2) OUTPUTTMRState = 1; else if (pinNumber == OUTPUT3) OUTPUTTMRState = 1; } else { if (DEBUG == true) Serial.println(«off»); if (pinNumber == OUTPUT1) OUTPUTTMRState = 0; else if (pinNumber == OUTPUT2) OUTPUTTMRState = 0; else if (pinNumber == OUTPUT3) OUTPUTTMRState = 0; } int j = 0; byte Atime; // Таймер может настроен на максимальное значение в 1 сутки // поэтому программа может принять 5 цифр, так как 1 сутки равны 86400 секундам long Time; // Прочитать секунды, значение имеет переменное количество цифр, поэтому читать, пока не получим ‘s’, // что является символом завершения в теле моего сообщения от мобильного телефона while (1) { Time = esp8266_Read(); if (Time == ‘s’) break; Atime = Time — 48 ; j++; } switch (j) // секунды … { case 1: // одна цифра Time = Atime; break; case 2: // две цифры Time = Atime * 10 + Atime; break; case 3: // три цифры Time = Atime * 100 + Atime * 10 + Atime; break; case 4: // четыре цифры Time = Atime * 1000 + Atime * 100 + Atime * 10 + Atime; break; case 5: // пять цифр Time = Atime * 10000 + Atime * 1000 + Atime * 100 + Atime * 10 + Atime; break; } if (DEBUG == true) { Serial.println(«Timer:»); Serial.println(Time); } Time = Time * 1000 + millis(); if (DEBUG == true) { Serial.println(«Pin:»); Serial.println(pinNumber); } if (pinNumber == OUTPUT1) { OUTPUTTMRIsSet = 1; OUTPUTTimer = Time; } else if (pinNumber == OUTPUT2) { OUTPUTTMRIsSet = 1; OUTPUTTimer = Time; } else if (pinNumber == OUTPUT3) { OUTPUTTMRIsSet = 1; OUTPUTTimer = Time; } String response = «tConfg=»; // Отклик на команду tConfg=<номер_вывода> response += pinNumber; sendHTTPResponse(connectionId, response); sendCommand(closeCommand, 1000, DEBUG); // закрыть подключение } else // принята неподдерживаемая команда { String response = «ERROR»; sendHTTPResponse(connectionId, response); sendCommand(closeCommand, 1000, DEBUG); // закрыть подключение } } } /*****Проверить таймер для каждого выхода******/ if (OUTPUTTMRIsSet != 0 && (OUTPUTTimer < millis())) { digitalWrite(OUTPUT1, OUTPUTTMRState); OUTPUTstate = OUTPUTTMRState; OUTPUTTMRIsSet = 0; } if (OUTPUTTMRIsSet != 0 && (OUTPUTTimer < millis())) { digitalWrite(OUTPUT2, OUTPUTTMRState); OUTPUTstate = OUTPUTTMRState; OUTPUTTMRIsSet = 0; } if (OUTPUTTMRIsSet != 0 && (OUTPUTTimer < millis())) { digitalWrite(OUTPUT3, OUTPUTTMRState); OUTPUTstate = OUTPUTTMRState; OUTPUTTMRIsSet = 0; } /***************************************/ } /* Name: sendData Description: Функция, используемая для отправки данных на ESP8266. Params: command — данные/команда для отправки; timeout — время ожидания отклика; debug — печатать в консоль?(true = да, false = нет) Returns: Отклик от esp8266 (если есть отклик) */ String sendData(String command, const int timeout, boolean debug) { String response = «»; int dataSize = command.length(); char data; command.toCharArray(data, dataSize); esp8266_Write(data, dataSize); // передача символов на esp8266 if (debug) { Serial.println(«\r\n====== HTTP Response From Arduino ======»); Serial.write(data, dataSize); Serial.println(«\r\n========================================»); } long int time = millis(); while ( (time + timeout) > millis()) { while (esp8266_Available()) { // У esp есть данные, поэтому вывести их в консоль char c = esp8266_Read(); // прочитать следующий символ. response += c; } } if (debug) { Serial.print(response); } return response; } /* Name: sendHTTPResponse Description: Функция, которая посылает HTTP 200, HTML UTF-8 отклик */ void sendHTTPResponse(int connectionId, String content) { // создать HTTP отклик String httpResponse; String httpHeader; // HTTP заголовок httpHeader = «HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=UTF-8\r\n»; httpHeader += «Content-Length: «; httpHeader += content.length(); httpHeader += «\r\n»; httpHeader += «Connection: close\r\n\r\n»; httpResponse = httpHeader + content + » «; // Здесь в коде баг: последний символ в «content» не посылается, поэтому я добавил дополнительный пробел sendCIPData(connectionId, httpResponse); } /* Name: sendCIPDATA Description: посылает команду CIPSEND=<id_подключения>,<данные> */ void sendCIPData(int connectionId, String data) { String cipSend = «AT+CIPSEND=»; cipSend += connectionId; cipSend += «,»; cipSend += data.length(); cipSend += «\r\n»; sendCommand(cipSend, 1000, DEBUG); sendData(data, 1000, DEBUG); } /* Name: sendCommand Description: Функция, используемая для отправки данных на ESP8266. Params: command — данные/команда для отправки; timeout — время ожидания отклика; debug — печатать в консоль?(true = да, false = нет) Returns: Отклик от esp8266 (если есть отклик) */ String sendCommand(String command, const int timeout, boolean debug) { String response = «»; esp8266_Print(command); // передача символов на esp8266 long int time = millis(); while ( (time + timeout) > millis()) { while (esp8266_Available()) { // У esp есть данные, поэтому вывести их в консоль char c = esp8266_Read(); // прочитать следующий символ. response += c; } } if (debug) { Serial.print(response); } return response; }

Android приложение

Чтобы управлять всеми выше перечисленными аппаратными компонентами, мы будем использовать простое приложение для Android. Это приложение позволит нам включать или выключать выход напрямую или через определенный период времени.

Примечание: Приложение требует Android 4.0 (IceCreamSandwich) или выше.

  • Прежде всего, вы должны знать IP адрес своего модуля. Если вы использовали программный последовательный порт, IP адрес будет напечатан в консоли. Если вы использовали аппаратный последовательный порт, то вы должны использовать кабель для отслеживания данных на линиях RX и TX, чтобы увидеть IP адрес. Вам также нужно знать номер порта, который был указан в скетче для Arduino. После этого нажмите «connect», чтобы получить состояние всех трех выходов. Вам нужно убедиться, что ваш Wi-Fi роутер включен, и вы подключены к локальной сети.
  • Теперь нажмите на любой переключатель, который вы хотите включить/выключить. Всякий раз, когда захотите, вы можете нажать «refresh», чтобы обновить состояние всех выходов.
  • На вкладке «Timers» вы можете установить любой из этих трех выходов для включения/выключения через определенный промежуток времени (от 0 до 24 часов).
  • После любого действия вы получите сообщение с подтверждением о том, выполнилась ли команда успешно, или возникла какая-то ошибка.

Скриншоты Android приложения для управления контроллером на Arduino и ESP8266>Демонстрационное видео

Выключатель беспроводной сети на ноутбуке acer. Как включить Wi- Fi на ноутбуке

Я опишу все известные мне способы включения Wi-Fi сети на ноутбуке (ведь все, что можно выключить можно и включить?!) Начну со способов более простых и часто встречающихся, далее буду переходит к более сложным способам, которые понадобятся единицам.

Итак, если вы видите на панели задач значок выключенного Wi-Fi (или не видите вовсе значка), то это статья для Вас.

Включение Wi-Fi с помощью ползунка/ кнопки на корпусе ноутбука.

На многих моделях ноутбуков для включения Wi-Fi необходимо воспользоваться ползунком или отдельной кнопкой для включения Wi-Fi. Зачастую этот выключатель располагается на переднем торце ноутбука.

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

Для включения Wi-Fi просто передвигаете ползунок в положение Включено.

Как включить Wi-Fi с помощью сочетания клавиш.

Если на вашем ноутбуке нет ползунков или отдельных кнопок включения Wi-Fi присмотритесь внимательно на клавиатуру, на ней вы можете обнаружить значок Wi-Fi на одной из функциональных клавиш (F1- F12).

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

Для того что бы включить Wi-Fi необходимо нажать эту клавишу или воспользоваться сочетанием клавиш +.

Рассмотрим комбинации клавиш, которые наиболее часто используются в ноутбуках разных производителей:

  1. Acer . Зажимаем клавиши: +.
  2. Asus . Комбинация +.
  3. HP . Здесь нажимаем +.
  4. Lenovo . Нужные кнопки: +.
  5. Samsung . Либо +, либо +.
  6. Dell комбинация клавиш + или +

Как включить Wi-Fi в настройках Windows.

Если указанные процедуры не помогли и вы до сих пор задаетесь вопросом Как включить Wi-Fi на ноутбуке? необходимо проверить включено ли Беспроводное сетевое соединение в настройках Windows. Для этого необходимо попасть в Центр управления сетями и общим доступом. Один из способов- нажать правой кнопкой мыши на значок сети в правом нижнем углу экрана и выбрать «Центр управления сетями и общим доступом».

Другой способ воспользоваться горячими клавишами + ввести команду ncpa.cpl и нажать Enter.

Не важно каким из способов вы пользовались результат будет один — на мониторе появится окно Сетевых подключений. Далее необходимо найти беспроводное подключение нажать на нем правой кнопкой мыши и выбрать «Включить» (если опция Включить не доступна значит Wi-Fi сеть включена).

Включение Wi-Fi через диспетчер устройств Windows.

Если до сих пор ваш Wi-Fi адаптер не включен, необходимо проверить задействован ли он в диспетчере задач. Для этого нажмите кнопку «Пуск», щелкните правой кнопкой мыши «Компьютер» и выберите команду «Управление». В левом меню выберите Диспетчер устройств.

Или нажмите сочетание клавиш + в строке поиска введите команду mmc devmgmt.msc и нажмите Enter.

Если значок адаптера помечен стрелкой вниз значит он выключен, для того что бы его включить нажмите на нем правой кнопкой мыши и выберите «Задействовать».

Обновление драйверов для Wi-Fi.

Еще одной причиной не работоспособности Wi-Fi может быть — не подходящий драйвер или его отсутсвие. Для того что бы установить нужный драйвер, зайдите на сайт производителя ноутбука, найдите вашу модель (на некоторых сайтах это будет сделать сложно, можете написать в комментарии модель ноутбука, я постараюсь вам помочь) и скачайте драйвер для сетевой карты Wi-Fi для вашей операционной системы. После этого достаточно будет установить драйвера, после перезагрузки ноутбука Wi-Fi должен заработать.

Не важно каким способом вы включили беспроводную сеть, в итоге вы должны увидеть в панели задач значок Wi-Fi. При нажатии на него вы увидите доступные для подключения Wi-Fi сети.

Передача данных по сети Wi-Fi — одно из преимуществ всех портативных устройств. Данные передаются с высокой скоростью, не нужно никаких проводов и дополнительных устройств, подключение производится очень просто: достаточно только найти точку доступа, а компьютер все сделает сам. Однако даже совершенно новым устройствам может потребоваться настройка Wifi. На ноутбуке Lenovo это можно сделать силами пользователя, ведь, как правило, дело не в техническом сбое, а в настройках операционной системы.

Переключатель

Если кнопка включения Wifi на ноутбуке Lenovo находится c боковой стороны, она, скорее всего, будет в виде ползунка с возможностью переключения влево и вправо, если же она рядом с включением, то имеет вид обычной кнопки с зеленым значком компьютера. В таком случае рядом с ней будет так называемая NovoButton, отвечающая за вход в БИОС и сброс устройства на заводские настройки. Нет, ее нажатие не приведет к мгновенной перезагрузке и возврату компьютера в первоначальное состояние, так что ничего не случится, если пользователь нажмет на нее случайно.
Однако, например, на модели Lenovo G580 и на некоторых других такого переключателя нет, и у пользователей часто возникают вопросы по поводу включения беспроводных сетей, потому что нажатие горячих клавиш Fn+F5 тоже не работает: включается режим «В самолете». На некоторых ноутбуках этой фирмы может сработать сочетание Fn+F2, однако если переустанавливалась операционная система, комбинации могли поменяться. В таком случае проще всего посмотреть список горячих клавиш в панели управления.

Включение беспроводной передачи

Если инструкции соблюдены, но все равно не работает Wi-Fi на ноутбуке Lenovo, проверьте, не включен ли режим «В самолете». В случае его активации отключаются все соединения, и зачастую именно такая простая вещь может быть решением всей проблемы. Если же режим не включен, то необходимо убедиться, включен ли адаптер беспроводных сетей в самой операционной системе. Следует нажать меню «Пуск» и зайти в «Панель управления», набрав ее в поиске (в версиях Windows 8 и старше можно воспользоваться сочетанием клавиш Win+X), затем перейти в «Диспетчер устройств». В нем развернуть вкладку «Сетевые адаптеры». В зависимости от моделей название искомого устройства может разниться (для примера: Broadcom 802.11g Network Adapter, следует поискать похожее).
После того как нужное устройство будет найдено, пользователь должен убедиться, что оно задействовано: кликнуть правой кнопкой мыши и выбрать «Включить». Если же оно активно, можно выключить и включить вновь, иногда это тоже помогает решить проблему. После переустановки драйверов или включения/выключения адаптера устройство следует перезагрузить.

Если раньше Wi-Fi работал

Все предыдущие методы того, как включить Wifi на ноутбуке Lenovo, должны справиться с проблемой, если компьютер новый и до этого никогда не подключался по беспроводной сети. Однако если же еще недавно все было в порядке, и ноутбук обнаруживал сеть, а теперь в трее висит иконка сети с красным крестиком, и операционная система сообщает о том, что нет доступных подключений, ситуация может быть другой. Конечно, сначала нужно будет попробовать все предыдущие способы решения проблемы, и если они не помогут, читать инструкцию далее.
Такая проблема довольно распространена среди владельцев портативных компьютеров на Windows 7 и старше. Сначала пользователь должен убедиться, что роутер работает, и остальные устройства успешно подключаются к беспроводной сети. Если все работает, значит, операционная система данного ноутбука считает, что выключен адаптер Wi-Fi.
Первым шагом должна стать проверка активности беспроводного подключения в списке сетевых соединений (сначала нужно зайти в Центр управления сетями и общим доступом, перейти во вкладку «Сеть и Интернет», а из нее в меню «Сетевые подключения»).
В Windows 8 и старше в правой панели следует найти пункт «Параметры», далее — «Изменение параметров компьютера», и в появившемся окне выбрать меню «Сеть», а на 8 версии ОС — «Беспроводная связь». Там нужно убедиться в активном состоянии беспроводных модулей.

Как включить WiFi на ноутбуках Lenovo

После того как были установлены драйвера для подключения к беспроводной сети, необходимо перезагрузить ноутбук, чтобы новые настройки вступили в силу. Чаще всего после перезагрузки не возникает проблем с тем, как включить WiFi на ноутбуках Lenovo. Система сама активирует поиск доступных сетей.

Но в тех случаях, когда адаптер не включается автоматически, пользователю самому придется разобраться, как включить WiFi на ноутбуке Lenovo вручную. Активировать адаптер можно несколькими способами.

Первый и самый простой способ — это включение при помощи горячих клавиш. Сочетания клавиш могут варьироваться в зависимости от модели ноутбука, но в большинстве случаев можно использовать клавиши Fn+F5.

Вопрос о том, как включить WiFi на ноутбуке Lenovo, возникает и в тех случаях, когда пользователь не знает комбинации клавиш для активации адаптера. Для устранения проблемы потребуется внимательно ознакомиться со значками, изображенными на клавишах F1-12. Адаптер включит та кнопка, где будет изображена антенна.

Второй способ, который помогает решить проблему и отвечает на вопрос о том, как включить WiFi на ноутбуке и на других моделях, немного сложнее. Пользователю потребуется открыть вкладку «Параметры», перейти в «Устройства» и щелкнуть по строке «Диспетчер устройств».

Следующий шаг — поиск вайфай-адаптера, который находится в группе «Сетевые адаптеры». Когда устройство найдено, необходимо открыть настройки и выбрать пункт «Задействовать».

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

Как организовать раздачу WiFi с помощью ноутбука

Часто возникает ситуация, когда есть проводной интернет, который подключен к ноутбуку. А модем не рассчитан на передачу данных через wifi. В этой ситуации есть два выхода.

Первый — это приобретение роутера.

Второй — раздавать wifi прямо с собственного ноутбука Lenovo.

Подробно опишем второй вариант.

  • На ноутбуке настраиваем свойства соединения таким образом, чтобы оно не было открыто через общий доступ («Сетевые подключения» — » Изменить параметры общего доступа» — поставить галочки напротив «Отключить»).
  • Настроить свойства адаптера. Так же в закладке «Доступ» снимаем галочки для разрешения общего доступа».
  • Создаем новое подключение. «Сетевые подключения» — «Новое подключение к сети»- «Настройка беспроводной сети» — Выбираем имя соединения и обязательно ставим «нет проверки подлинности».
  • Если все действия произведены верно, то в списке доступных беспроводных сетей ноутбука появится только что созданное соединение. Заходим в его свойства и ставим ключ безопасности. Это и будет паролем безопасности на доступ.
  • Последний шаг позволит объединить две сети. В «Сетевое подключение» выделяем одновременно два соединения (Интернет и созданное нами) и нажимаем правую кнопку мыши. Затем в появившемся контекстном меню нажимаем «Настройка моста».

Если все сделано правильно, то после этого появится сообщение об удачной операции, а на устройстве отобразится новое доступное интернет-wifi соединение.

Из наиболее распространенных ошибок данного алгоритма можно назвать игнорирование пункта 1. Если не убрать общий доступ к соединениям, то не получится создать мост.

Способ настройки раздачи через командную строку: