Оглавление:
- Шаг 1. Как мы собираемся это сделать
- Шаг 2: необходимое оборудование
- Шаг 3: Протокол Джура
- Шаг 4: разборка
- Шаг 5: аннулирование гарантии
- Шаг 6: Подключение логической стороны
- Шаг 7: Программирование модуля
- Шаг 8. Как заставить его работать…
- Шаг 9: Уточнения / Todo
Видео: Кофемашина с поддержкой Интернета вещей: 9 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:52
Это руководство участвует в конкурсе IoT. Если вам это нравится, пожалуйста, проголосуйте за него
ОБНОВЛЕНО: теперь поддерживает двустороннюю связь и обновления OTA
С некоторых пор у меня есть кофемашина Jura, и я всегда хотел как-то ее автоматизировать.
Я использовал базовую систему домашней автоматизации в течение нескольких лет, но кофемашину было непросто модифицировать (по крайней мере, я так думал). Кофемашины Jura обычно имеют «диагностический порт» и / или порт, используемый для добавления платежной системы к машине, однако я не смог найти никакой информации о том, как это можно использовать. Совсем недавно протокол был реконструирован некоторыми людьми и обнародован. Проблема заключалась в том, что большинство ссылок на доступные функции относились к гораздо более крупным машинам, чем моя (Ena 7).
Вдобавок ко всему, у моей машины нет постоянного резервного источника питания, как у более крупных машин, вместо этого у нее есть выключатель высокого напряжения, который заставляет источник питания «защелкиваться». Физическая кнопка на машине фактически активирует 2 переключателя - одно низкое напряжение (логическая сторона, выключение) и одно высокое напряжение (включение). Оба переключателя мгновенные.
Мне также нужно было убедиться, что машина по-прежнему работает на 100% независимо от какого-либо механизма управления, то есть машина по-прежнему работает как обычно, как если бы на ней не был включен IoT.
Для автоматизации машины требуются две вещи: 1) иметь возможность управлять питанием машины 2) иметь возможность связываться с машиной для активации функций приготовления кофе, полоскания и т. Д.
Шаг 1. Как мы собираемся это сделать
Мы будем использовать модуль ESP8266 ESP-01 для подключения к домашнему Wi-Fi и подписки на сервер / тему MQTT, прослушивающую команды. Я использовал «Front End» - это OpenHAB2, но нет причин, по которым вы не могли бы добавить в веб-интерфейс на устройстве и управлять напрямую, если хотите, или с помощью команд HTTP Get.
ESP8266 будет управлять двумя реле, связанными с кнопкой питания, а также обрабатывать последовательные команды к / от кофемашины.
ВНИМАНИЕ! В этой инструкции описывается процедура, которую я использовал для модификации кофемашины Jura Ena7 для управления с помощью домашней автоматизации. Он касается модификации устройства электроснабжения, которое может быть опасным при неправильном выполнении. Информация здесь может быть неполной, неточной и небезопасной. Действовать с осторожностью. Никакой ответственности.
Шаг 2: необходимое оборудование
Запчасти
- Модуль ESP-01 и способ его программирования (Arduino IDE и физический адаптер для программирования)
- 2-позиционный релейный модуль EBAY
- 5v -> 3.3v регулятор EBAY
- Маленькое зарядное устройство для телефона с питанием от сети 5 в
- Преобразователь логических уровней * Freetronics
- Разные провода, штыревые наконечники, термоусадочные и т. Д. Для подключения всего этого.
Инструменты
- Паяльник с тонким наконечником
- Припой
- Устройства для зачистки проводов удобны
- Драйвер Torx T15
- Овальный инструмент безопасности (или сделать его, займет всего несколько минут)
* Первоначально я использовал Arduino UNO при тестировании всех последовательных команд для машины, и он работал безупречно, однако модуль ESP отказывался работать. Я трижды проверил код и был уверен, что команды, выходящие из модуля ESP, были такими же, как и для Arduino, но это было недопустимо. Я объяснил это тем, что модуль ESP работает только с логикой 3,3 В, а не 5 В. Как только я вставил логический преобразователь, он заработал нормально. Это может потребоваться, а может и не потребоваться на других машинах.
В идеале у вас должна быть существующая система домашней автоматизации, поддерживающая протокол MQTT (например, openhab), поскольку именно на это и направлен проект. Если вы просто хотите управлять им с помощью кнопок на веб-странице без каких-либо вспомогательных систем, вам нужно будет внести некоторые изменения во встроенный код веб-страницы. Это не слишком сложно достичь (возможно, rev2..)
Шаг 3: Протокол Джура
Данные на / от машины - это просто последовательный @ 9600, но у Джуры тоже есть кое-какие хитрости в рукаве. Протокол использует это либо для дополнительного ECC, либо для сокрытия связи. Проще говоря, каждый байт данных (символ) разбивается на биты 2 и 5 из 4 стандартных последовательных байтов, за которыми следует пауза в 8 мс. Если вы хотите узнать, как это работает, по ссылкам можно найти много информации.
Информация протокола извлечена из:
Код arduino упрощает это, позволяя передавать стандартные, удобочитаемые команды, которые затем переносятся в протокол Jura.
Мой код представляет собой комбинацию кода из:
Команды, указанные на сайтах выше, не были точными для моей машины, но методом проб и ошибок я смог придумать следующее:
FA: 01 - Отключается (но, кажется, не смывает, даже если необходимо) FA: 02 - Отвечает «хорошо», но не уверен, что делает. FA: 03 - Сообщение о полоскании (выводит на экран сообщение «полоскание», нажимая на роторную машину для полоскания) FA: 04 - Действие полоскания - Полоскание, когда появляется сообщение «Нажмите поворотную кнопку», в противном случае ничего не делает FA: 05 - На экране сильно отображается (Предположительно, объедините это с приготовлением кофе для крепкого) FA: 06 - Крепкий на экране (предположительно объедините это с приготовлением кофе для крепкого) FA: 07 - «Особый» на экране, но на самом деле ничего не делает, не уверен, что это для: 08 - На пару FA: 09 - Маленький кофе FA: 0A - Большой кофе
Есть и другие команды, но для меня этого достаточно …
Соблюдайте осторожность при вводе неизвестных команд, например, очевидно, AN: 0A сотрет EEPROM машины.
Шаг 4: разборка
Открыть саму машину не так просто, так как вам понадобятся несколько специальных инструментов, но опытный человек найдет способ - вам понадобится бит Torx T15 и «овальный ключ» на 2 винта. Torx, который у меня уже был, овальный инструмент, который я сделал из 4-миллиметрового болта с головкой под торцевой ключ, который высверлил и немного приплюснул с помощью молотка.
Инструкции здесь довольно хорошо представлены -
Шаг 5: аннулирование гарантии
Попав в машину, вы увидите основные компоненты. Под входом основного питания есть удобное место для подключения зарядного устройства на 5 В.
Я добавил (рассчитанные на сеть) провода к клеммной колодке на входе в машину и припаял / усадил их к сетевым контактам зарядного устройства 5 В. Моя конкретная модель была не с USB-портом, а с постоянно подключенным проводом. Возможно, вам не хватит места для USB-порта первого типа, чтобы можно было использовать настоящий USB-кабель, но если вы откроете зарядное устройство, вы можете удалить USB-порт и заменить его стандартным проводом к точкам 5V и Gnd.
Если хотите, вы можете заменить его другим сетевым блоком питания с напряжением 5 В. 500ма должно хватить.
Рядом с кофемолкой достаточно места для модуля реле. Мы должны подключить два реле, чтобы они работали параллельно с главными выключателями питания. Я просто отрезал существующие провода, зачистил, залудил, добавил дополнительный провод и снова спаял их (не забывайте термоусадку). Провода проводов было достаточно для этого.
Модуль реле удерживается на месте с помощью двусторонней ленты хорошего качества. С подключенными проводами и с ограниченным пространством для движения, даже если лента потеряет сцепление, модуль не уйдет слишком далеко и не сможет соприкоснуться с какими-либо металлическими предметами.
Я также проверил диагностический порт на своей машине, чтобы определить расположение внутренних соединений, чтобы я мог добиться полностью скрытой интеграции. Используются только провода tx, rx и Gnd.
Если у вас есть более коммерческая машина, которая поддерживает резервное напряжение, и / или вы не хотите аннулировать гарантию на свою машину, вы можете вместо этого подключиться напрямую к диагностическому порту, но, возможно, не сможете включить машину с помощью этого устройства.
В моей машине используется 7-контактный разъем. Слева направо это:
NC Tx G Rx NC 5 В NC
Соответствующие контакты на материнской плате: Красный = Земля Оранжевый = Rx Черный = Tx
Более подробную информацию можно найти на распиновке здесь:
Шаг 6: Подключение логической стороны
Просмотрите схему - она выглядит слишком сложной, но на самом деле это не так.
Я прикрепил преобразователь уровня к задней части регулятора напряжения с помощью двустороннего скотча. Затем я использовал несколько компонентных ножек, чтобы припаять контакты питания и заземления с обеих сторон преобразователя уровня к соответствующим контактам модуля питания. Затем весь этот модуль работает как «сквозное соединение» для всей логики и источника питания ESP-01.
Я использовал два средних преобразователя для последовательных данных и два внешних для сигналов управления реле, но не имеет значения, какой именно вы используете.
На самом деле для этих релейных модулей нет необходимости запускать логику 5 В, поскольку они активны НИЗКИЙ, но он просто отлично работал, поэтому я все равно сделал это.
Я использовал гнездовой разъем 4x2 для подключения к модулю ESP. Это позволяет легко загрузить код или заменить модуль.
На схеме не показан вход 5 В - я подключил свой напрямую к модулю реле (см. Второй рисунок). Черный провод в нижнем левом углу изображения - это последовательные данные, ведущие к основной плате. Я использовал часть экранированного удлинительного кабеля для наушников 3,5 мм, чтобы уменьшить вероятность помех в линии передачи данных.
Код 12f использует SoftwareSerial вместо аппаратного последовательного порта - это позволяет модулю сообщать о состоянии для отладки через обычный последовательный порт. Вместо этого соединения осуществляются через контакты 4 и 5. Я адаптировал тот же заголовок, чтобы сделать ESP12F заменой для ESP-01, просто поменяв местами эти последовательные контакты
Шаг 7: Программирование модуля
Код был скомпилирован для Arduino 1.8.1 с надстройкой платы ESP8266 и PubSubClient 2.6.0 (это библиотека MQTT)
Измените код в соответствии с вашими требованиями, загрузите код в модуль ESP-01 и подключитесь к машине. Будьте осторожны с ориентацией штифтов!
Конфигурация
Опция 1)
Только в базовом коде в zip-архиве. Когда модуль ESP загружается в первый раз, он переходит в режим AP и устанавливает IP-адрес 192.168.4.1. Затем вы можете подключиться к модулю, изменить IP-адрес и подключиться к своей собственной точке доступа. Вам также необходимо будет установить IP-адрес для вашего компьютера в этом диапазоне, поскольку в модуле нет DHCP.
SSID точки доступа по умолчанию - ESPSwitch, пароль - 12345678.
По умолчанию он остается в режиме AP в течение 2 минут. Вы можете изменить этот параметр в global.h - он называется adminTimeout и указывается в миллисекундах. Я рекомендую изменить это значение на что-то низкое, если у вас есть действующая конфигурация в EEPROM, поскольку в противном случае это просто вызовет ненужные задержки при загрузке устройства.
Вариант 2)
Это режим по умолчанию для нового кода, который поддерживает двустороннюю связь, вариант 1 недоступен. Вы также можете изменить настройки SSID / пароля по умолчанию в основном ino-файле (ищите '// DEFAULT CONFIG'), чтобы он загрузился эти настройки в EEPROM при первой загрузке и изменить задержку режима администратора на что-то меньшее в global.h. Это позволяет избежать беспорядка при подключении к временной точке доступа.
Устройство автоматически установит свой идентификатор MQTT (и путь подписки) на последние 4 цифры серийного номера модуля. Путь по умолчанию - ha / mod // #, измените его по своему усмотрению, но прочтите комментарии в коде, чтобы убедиться, что соответствующий массив имеет правильную длину.
Я делаю это, потому что это означает, что мне не нужно создавать уникальный идентификатор для каждого модуля в моей сети.
Идентификатор устройства виден, и сервер MQTT можно настроить через страницу сервера MQTT на внутреннем веб-сервере
Шаг 8. Как заставить его работать…
Команды MQTT:
ha / mod / xxxx / 0 или 1 = Переключить мощность
Любая другая строка будет рассматриваться как команда и отправлена через последовательный порт. Статус отображается в / ha / coffee в HEX
С OpenHAB
coffeemachine.items
Number Coffee_Machine_Power "Power" {mqtt = "> [control: ha / mod / 8002 /: command: *: default]"} Строка Coffee_Machine_Status {mqtt = "<[control: ha / coffee: state: default]"}
Карта сайта
Group item = "Coffee Machine" {Switch item = Coffee_Machine_Power label = "Power" mappings = [1 = "Toggle"] Switch item = Coffee_Machine_Cmd label = "" mappings = ["FA: 09" = "Small"] Переключить элемент = Coffee_Machine_Cmd label = "" mappings = ["FA: 0A" = "Large"] Пункт переключения = Coffee_Machine_Cmd label = "" mappings = ["FA: 04" = "Rinse"] Текстовый элемент = Coffee_Status label = "Статус [% s] "}
voicecontrol.rules
import org.openhab.model.script.actions. * import org.openhab.core.library.types. * import java.util. *
правило «Правила голосовых команд»
когда элемент VoiceCommand получил команду, тогда var String command = VoiceCommand.state.toString.toLowerCase logInfo ("Voice. Rec", "VoiceCommand Received" + команда)
if (command.contains ("включить кофемашину") || command.contains ("выключить кофемашину")) {
sendCommand (Coffee_Machine_Power, 1)} if (command.contains ("сделай мне небольшой кофе")) {sendCommand (Coffee_Machine_Cmd, "FA: 09")} if (command.contains ("сделай мне большой кофе")) { sendCommand (Coffee_Machine_Cmd, "FA: 0A")} if (command.contains ("промыть кофемашину")) {sendCommand (Coffee_Machine_Cmd, "FA: 04")}} end
Правила (для интерпретации ответов HEX в «реальные» значения):
правило "Статус кофемашины", когда элемент Coffee_Machine_Status получил обновление, тогда var String response = Coffee_Machine_Status.state.toString () if (response.indexOf ("ic:")> -1) {var String hexString = response.substring (3, 5)
var int num = (Integer.parseInt (hexString, 16));
var String binaryString = String.format ("% 8s", Integer.toBinaryString (num)). replace ('', '0')
var int trayBit = binaryString.substring (0, 1)
var int tankBit = binaryString.substring (2, 3) var int heatBit = binaryString.substring (7, 8) var int rinseBit = binaryString.substring (6, 7)
if (trayBit == "0") {
postUpdate (Coffee_Status, "Tray Missing")} if (tankBit == "1") {postUpdate (Coffee_Status, "Fill Tank")} if (rinseBit == "1") {postUpdate (Coffee_Status, "Press Rotary")} if (trayBit == "1" && tankBit == "0" && rinseBit == "0") {postUpdate (Coffee_Status, "Ready")}
}
if (response == "Off") {postUpdate (Coffee_Status, "Off")} конец
Шаг 9: Уточнения / Todo
Упростите первоначальную настройку подключения к Wi-Fi - Готово. Отказался от идеи «режима администратора», так как это раздражало. Теперь просто введите SSID и пароль в код. Сохраняется в EEPROM при обновлении / изменении через веб-интерфейс.
Более новый код также поддерживает обновления OTA, но вам нужно будет обновить EEPROM в модуле ESP-01, чтобы это работало, или закомментировать соответствующие элементы OTA
Добавьте код для обработки ответов от машины и чтения статуса, такого как отсутствие лотка, пустая гуща и заполненный резервуар - Готово. Я добавил код, чтобы прочитать статус и опубликовать его в ha / coffee. Это всего лишь необработанные ответы, и я все еще работаю над их интерпретацией, но пока у меня отсутствует лоток и работает пустой бак. Когда он включен, он опрашивает машину каждые 9 секунд и публикует ответ на MQTT
Ответ в шестнадцатеричном формате, но отдельные биты указывают датчики
Добавьте код на веб-страницы для прямого управления с помощью команд HTTP GET.
Первое место в конкурсе Интернет вещей 2017
Рекомендуемые:
Барометр Интернета вещей: 5 шагов (с изображениями)
Барометр Интернета вещей: измеряйте и регистрируйте температуру и атмосферное давление с помощью этого барометра Интернета вещей. Я хочу представить барометр Интернета вещей. Он позволяет измерять и хранить данные о температуре и давлении на платформе Интернета вещей Adfruit. Я опубликовал аналогичный проект, который
Измеритель температуры и влажности Интернета вещей с OLED-экраном: 5 шагов (с изображениями)
Измеритель температуры и влажности IoT с экраном OLED: проверяйте температуру и влажность на экране OLED в любое время, и в то же время собирайте эти данные на платформе IoT. На прошлой неделе я опубликовал проект под названием Simplest IoT temperature and влажности meter. Это хороший проект, потому что вы можете
IoT APIS V2 - автономная автоматизированная система полива растений с поддержкой Интернета вещей: 17 шагов (с изображениями)
IoT APIS V2 - автономная автоматизированная система полива растений с поддержкой IoT: этот проект является развитием моей предыдущей инструкции: APIS - автоматизированная система полива растений Я использую APIS почти год и хотел улучшить предыдущую конструкцию: возможность контролировать завод удаленно. Вот как
Основы Интернета вещей: подключение Интернета вещей к облаку с помощью ОС Mongoose: 5 шагов
Основы IoT: подключение вашего IoT к облаку с помощью Mongoose OS: если вы человек, который занимается мастерингом и электроникой, чаще всего вы встретите термин Интернет вещей, обычно сокращенно IoT, и что он относится к набору устройств, которые могут подключаться к Интернету! Быть таким человеком
Центр сбора данных датчиков с поддержкой Интернета вещей с ESP8266 и PubNub: 9 шагов (с изображениями)
Центр сбора данных датчиков с поддержкой Интернета вещей с ESP8266 и PubNub: большинство руководств по ESP8266 либо на уровне новичков (удаленное мигание светодиода), либо слишком сложны для тех, кто ищет что-то, что можно улучшить и усовершенствовать свои навыки мигания светодиодами. инструктируемый направлен на то, чтобы восполнить этот пробел, чтобы создать