Оглавление:

Недорогая автоматизация с ESP01: 19 шагов
Недорогая автоматизация с ESP01: 19 шагов

Видео: Недорогая автоматизация с ESP01: 19 шагов

Видео: Недорогая автоматизация с ESP01: 19 шагов
Видео: Модуль ESP-01 (ESP8266) 1Mb прошивка, пример использования 2024, Ноябрь
Anonim
Image
Image
MCP23016
MCP23016

Сегодня мы обсудим автоматизацию с использованием ESP01 с 16 реле. Это супер дешевая модель дизайна, в которой вы можете умножить модули и получить до 128 реле, так как в этот микроконтроллер можно установить до восьми расширителей портов.

В нашей схеме у вас будет приложение на смартфоне, которое взаимодействует с ESP01. Он будет иметь расширитель с 16 портами, каждый из которых подключен к реле. У нас также есть регулируемый источник 3 на 3. Поэтому мы будем управлять 16-канальным релейным модулем с помощью ESP01 через приложение для Android, которое я вам предоставлю.

Шаг 1. Совет, который следует запомнить

Друзья мои, важно отметить, что я использовал этот чип в схеме под названием MCP23016. Также важно посмотреть видео EXPANSOR OF IOS FOR ESP32, ESP8266 И ARDUINO, в котором я тестирую устройство и показываю, что оно работает с этими тремя типами плат.

Шаг 2: MCP23016

Здесь у нас есть образ MCP23016, который представляет собой микросхему с 28 контактами. Важно отметить, что существует также модель MCP23017, которая является более распространенной и не требует резистора и конденсатора, поскольку имеет внутренние часы. Это упрощает процесс, но его закрепление отличается от того, что мы показываем в этом видео.

Шаг 3: адрес

Адрес
Адрес

Чтобы определить адрес MCP23016, мы используем контакты A0, A1 и A2. Вы можете просто оставить их на HIGH или LOW для смены адреса.

Адрес будет сформирован следующим образом:

MCP_Address = 20 + (A2 A1 A0)

Если A2 A1 A0 может принимать значения HIGH / LOW, формируется двоичное число от 0 до 7.

Например:

A2> GND, A1> GND, A0> GND (означает 000, затем 20 + 0 = 20)

Или иным образом, A2> HIGH, A1> GND, A0> HIGH (означает 101, затем 20 + 5 = 25)

Шаг 4: Команды

Команды
Команды

Вот таблица с командами для связи:

Шаг 5: Категории

GP0 / GP1 - Регистры порта данных

Есть два регистра, которые обеспечивают доступ к двум портам GPIO.

Чтение регистра обеспечивает состояние контактов этого порта.

Бит = 1> ВЫСОКИЙ Бит = 0> НИЗКИЙ

IODIR0 / IODIR1

Есть два регистра, которые управляют режимом вывода. (Вход или выход)

Бит = 1> ВХОД Бит = 0> ВЫХОД

Шаг 6: структура для общения

Структура для общения
Структура для общения

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

Шаг 7: программа

Программа
Программа

Мы сделаем программу, которая состоит из связи ESP01 с MCP23016, чтобы иметь больше GPIO для использования. Эти 16 новых GPIO, которые у нас будут, будут управлять 16-канальным релейным модулем.

Команды будут отправлены на ESP01 через приложение Android.

Шаг 8: MCP23016

MCP23016
MCP23016

Шаг 9: ESP-01

ESP-01
ESP-01
ESP-01
ESP-01

Это плата на 16 реле.

Шаг 10: Установка ESP01

Крепление ESP01
Крепление ESP01

Шаг 11: библиотеки и переменные

Мы включим библиотеки, отвечающие за связь i2c, а также за создание точки доступа и веб-сервера. Определяем адрес микросхемы и портов. Наконец, мы определяем переменные для хранения значений выводов MCP.

#include // Response pela comunicação i2c. # include // Response для точки доступа eo webserver WiFiServer server (80); // веб-сервер для доступа к приложению // endereço I2C do MCP23016 #define MCPAddress 0ÇTRISADOS # ENDERIS define GP0 0x00 // РЕГИСТР ПОРТА ДАННЫХ 0 #define GP1 0x01 // РЕГИСТР ПОРТА ДАННЫХ 1 #define IODIR0 0x06 // РЕГИСТР НАПРАВЛЕНИЯ В / В 0 #define IODIR1 0x07 // РЕГИСТР НАПРАВЛЕНИЯ В / В 1 // guarda os valores dos pinos сделать MCP uint8_t currentValueGP0 = 0; uint8_t currentValueGP1 = 0;

Шаг 12: настройка

Мы инициализируем ESP01 и настраиваем порты. Также мы настраиваем точку доступа и инициализируем сервер.

void setup () {Serial.begin (9600); задержка (1000); Wire.begin (0, 2); // ESP01 Wire.setClock (200000); configurePort (IODIR0, ВЫХОД); configurePort (IODIR1, ВЫХОД); writeBlockData (GP0, 0x00); writeBlockData (GP1, 0x00); setupWiFi (); // настройка точки доступа server.begin (); // инициализация сервера}

Шаг 13: цикл

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

void loop () {Клиент WiFiClient = server.available (); // Подтверждение наличия клиента для соединения if (! Client) {return; } String req = client.readStringUntil ('\ r'); // Faz a leitura da primeira linha da Requisição / * / MR - префикс заголовка для saber se a Requisição e esperada para os relés * / if (req.indexOf ("/ MR")! = -1) {parserData (req); // требуется дополнительная информация для обработки данных} else {Serial.println ("недопустимый запрос"); возвращение; } client.flush (); Строка s = "HTTP / 1.1 200 ОК / r / n"; // адрес электронной почты для ответа client.print (s); // envia a resposta para o cliente delay (1); } // конец цикла

Шаг 14: ParserData

ParserData
ParserData

Из запроса ищем данные, относящиеся к реле. Затем мы отправляем данные на MCP23016.

// обязательная часть данных, ссылающаяся на релевантный parserData (строковые данные) {uint8_t relay = -1; uint8_t gp = -1; uint8_t значение = -1; int index = data.indexOf ("/ MR"); // индекс do prefixo MR if (data [index + 5] == '/') // / MR01 / 1, onde 0 = GP; 1 = ОТПУСТИТЬ; 1 = ESTADO (вкл. / Выкл.) {Gp = data [index + 3] - '0'; реле = данные [индекс + 4] - '0'; значение = данные [индекс + 6] - '0'; // envia os dados para o MCP23016 // [relay-1] porque o MCP vai de 0-7 os pinos writePinData (relay-1, value, gp); }}

Шаг 15: ConfigurePort

Устанавливаем режим вывода GPIO (GP0 или GP1).

// configura o modo dos pinos GPIO (GP0 ou GP1) // como parameter passamos: // port: GP0 ou GP1 // INPUT para todos as portas do GP trabalharem como entrada // OUTPUT para todos as portas do GP trabalharem como saida // настраиваемое значение 0-255 показателей или режима портов (1 = ВВОД, 0 = ВЫВОД) // например: 0x01 или B00000001 или 1: параметры, которые используются для GPX.0, могут быть использованы, или восстановлены без использования конфигурации порта (порт uint8_t, пользовательский uint8_t) {if (custom == INPUT) {writeBlockData (порт, 0xFF); } else if (custom == OUTPUT) {writeBlockData (порт, 0x00); } else {writeBlockData (порт, настраиваемый); }}

Шаг 16: WritePinData

В этой части кода мы изменяем состояние желаемого вывода и отправляем данные на MCP.

// Muda o estado de um pino desejado, passando como parameter: // pin = pino desejado; значение = 0/1 (вкл / выкл); gp = 0/1 (ПОРТ на MCP) void writePinData (int pin, int value, uint8_t gp) {uint8_t statusGP = 0; если (gp == GP0) statusGP = currentValueGP0; иначе statusGP = currentValueGP1; если (значение == 0) {statusGP & = ~ (B00000001 << (контакт)); // muda o pino para LOW} else if (value == 1) {statusGP | = (B00000001 << (контакт)); // муда или пино для ВЫСОКОГО} if (gp == GP0) currentValueGP0 = statusGP; иначе currentValueGP1 = statusGP; // envia os dados для MCP writeBlockData (gp, statusGP); задержка (10); }

Шаг 17: WriteBlockData и настройка Wi-Fi

Здесь мы отправляем данные на MCP23016 через шину i2c. Затем мы настраиваем свойства, чтобы включить точку доступа. Наконец, мы настроили WiFi для режима точки доступа и создали AP с SSID и ПАРОЛЕМ.

// envia dados para o MCP23016 através do barramento i2c // reg: REGISTRADOR // data: dados (0-255) void writeBlockData (uint8_t port, uint8_t data) {Wire.beginTransmission (MCPAddress); Wire.write (порт); Wire.write (данные); Wire.endTransmission (); задержка (10); }

// настроить как параметры для доступа к ТОЧКЕ ДОСТУПА Избегайте setupWiFi () {WiFi.mode (WIFI_AP); WiFi.softAP («ESP01_RELAY», «12345678»); }

Шаг 18: приложение

Приложение
Приложение
Приложение
Приложение
Приложение
Приложение
Приложение
Приложение

Для создания приложения мы используем MIT App Inventor 2, доступ к которому можно получить по ссылке:

ai2.appinventor.mit.edu/

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

Ниже приведены некоторые из используемых программных блоков:

ВАЖНО: IP-адрес ESP по умолчанию, так как точка доступа - 192.168.4.1

1. Когда экран инициализируется, мы сохраняем IP в памяти и вызываем процедуру восстановления состояния кнопок (ВКЛ / ВЫКЛ).

2. Вызов другого экрана

1. При нажатии на кнопку ВКЛ одного из реле мы внесем визуальные изменения в кнопку (зеленые блоки). WebViewer1. GoToUrl делает запрос для нашего ESP01, связывая данные MR01 / 1 в URL-адресе.

2. При нажатии кнопки ВЫКЛ одного из реле мы внесем визуальные изменения в кнопку (зеленые блоки). WebViewer1. GoToUrl делает запрос к нашему ESP01, связывая данные MR01 / 0 в URL-адресе.

Эта процедура используется для восстановления состояния кнопок (реле), потому что при смене экрана он возвращается к шаблону создания.

Желтый блок повторяется для каждой пары кнопок.

Шаг 19: Скачать

Вот файлы проекта для скачивания:

Файл проекта MIT App Inventor 2 - скачать

Приложение APK для установки на android - скачать

Загрузите остальные файлы:

PDF

Я НЕТ

Рекомендуемые: