Да, вкратце так.BogAD, 31 Авг. 21, 19:46
Ну что ж, давайте продолжим обсуждение нашего лисапеда ;))) Можем себе позволить?
Чуток обобщим задачу. Мы рассматриваем устройства, которые можно использовать как автономно (с ручным управлением), так и в рамках автоматики. Многие лабораторные приборы имеют интерфейс для подключения к контроллеру. Часто это RS232, его клоны и потомки ;))) Наличие интерфейса часто бывает очень полезны. Но, кроме дороговизны, мне сильно не нравятся две вещи в таких приборах.
1. Мы имеем устройство (например, тот же насос), у которого для выполнения одних и тех же задач есть два совершенно разных интерфейса. Один для человека. Это кнопочки, энкодеры, дисплейчик (простой или сенсорный) и т.д. А другой интерфейс - для контроллера (управляющего компьютера). Мне не нравится что эти интерфейсы разные, независимые и часто односторонние. Что будет если насос подключен к автоматике, успешно чавкает, а человек подошел и крутанул ручку энкодера? Или наоборот, человек видит что трубка насоса вот-вот порвется, пытается выключить насос, а автоматика тупо "поддает жару", как этого требует алгоритм. Я понимаю, что примеры искусственные, обходятся приоритетами и другими средствами, которые можно позаимствовать из мира параллельного программирования. Но они возможны. И простейшим решением могла бы быть организация обмена через броккера. У броккера два издателя (акторы: человек и автоматика) и три подписчика (акторы и исполнительное устройство - насос). Кстати, давным-давно кто-то в этой ветке уже предлагал такой подход. Правда по другому поводу.
2. Второе, что мне не нравится - избыточность. Она чувствуется. Особенно, если такого рода устройств несколько. Насосы, весы, плитки (индукционные и простые) и т.п. Кстати, в первой версии "ненавязчивой автоматики" каждое исполнительное устройство имело два указанных выше интерфейса. Для человека и для контроллера (малинки). Потом я от этого отказался, т.к. просто не смог решить эту дилемму. Тем не менее, самым простым решением было бы оставить в устройстве один единственный интерфейс. Это может быть Wi-Fi, I2C, USB, 1-Wire и т.п. Но какой-то один. А для того, чтобы человек мог подключаться к этому интерфейсу, дать ему в руки пульт. Универсальный. Один для всех устройств. Пультом может быть смартфон с соответствующим адаптером (через USB), либо специализированная "коробочка". Для автономной работы, человек подключает пульт к устройству и управляет. Для автоматической работы через этот же разъем устройство подключается к автоматике. Это бы сильно упростило разработку таких устройств.
Конечно, эти рассуждения выглядят достаточно абстрактно, но мы можем обсудить их позже. Когда будет конкретика. А для начала давайте определимся с физическим интерфейсом для такого рода устройств. Вы предлагаете 1-Wire. Но 1-Wire хаб первоначально планировался для датчиков и класс-обертка написан исходя именно из этих соображений. Это связано с популярность датчиков DS18B20 для наших целей. Для их параллельной работы и одновременного чтения данных с них. А насос - исполнительное устройство. И просто так в хаб его воткнуть нельзя. Конечно там предусмотрена возможность работать с одним каналом (за счет маскирования) и возможность расширения списка команд (для исполнительных устройств). Но это в полной мере не реализовано и изменения кода будут существенными. Класс-обертка хаба в свое время много крови у меня попил. Очень не хотелось бы сильно в него залезать. Самое простое (с точки зрения программирования) для подключения исполнительных устройств это I2C. Они и сидят все на этой шине. Если не изменяет память, то длина шины I2C для скоростей до 100 кбод/сек может доходить до 1м. Это для витой пары. Хватит ли такой длины для подключения насоса к автоматике? Если нет, то можно уменьшить скорость, но не желательно. Или вообще что-нибудь типа USB. В малинке USB-порты есть, да и Arduino Nano имеет аппаратный USB...