Здравствуйте.
Вопрос такой.
Сейчас хочу сделать автоматизацию для своего дома, я делаю сайты и пишу на PHP,
Mysql - логику можно сделать там - но надо добавить контроллер.
Купил Arduino nano, STM32F103C8T6, M32F407VET6ST - эта плата наверное
будет оптимальная, датчики, моторчики. На ардуино писать проще, но мне
не нравится, что этот контроллер по одной цене с STM32, а параметры хуже
в разы.
Но на STM32 меньше готовых наработок, и код для меня заумный и работа
разовая, так учиться не охота, поэтому я хочу вынести всю работу PHP, а
STM32 будет пересылать данные с сервера на моторы и обратно.
Нужно сделать скетч для STM32, который бы перенаправлял данные с ножек
микроконтроллера на GET запросы к моему домашнему серверу, через модуль
W5500, или через трансивер PHY LAN8720, что удобнее, а я там уже
обрабатывал и посылал данные обратно с запросами.
Логика такая.
1. Параметры датчиков нормальные минимум/максимум и другие по
согласованию перед работой, настройки, флаги состояния оборудования -
вынесены в константы в начало скетча, что-бы можно было менять. Можно сделать настройки изменяемыми по запросам, можно нет, пока как проще.
1. По умолчанию при включении STM32 все выхода на 0 - всё отключено,
ничего не работает, ждём до получения запроса GET с сервера на
тестирование состояния системы.
2. Посылаем первый запрос, включаем силовое напряжение и смотрим
параметры с датчика напряжения и тока - что силовая часть работает,
если всё нормально, то продолжаем,
Везде если нет успешного завершения действий на запрос, высылаем ответ
GET с причиной отказа.
3. Тестируем всё что есть, другие датчики 3 аналоговые и 5 штук
цифровых примерно - там
параметры должны быть в заданных пределах, моторы и приводы гоняем до
точек останова, если норма, то продолжаем.
4. Протестировали, работаем - получаем запрос GET где указаны параметры
ножек что включить - устанавливается время начала действия, действие
продолжается до
срабатывания датчика завершения (концевой датчик, или любой другой
меняется сигнал с 5 вольт на 0), при этом контролируются на прерывании
датчики тока и напряжения,
а также аварийные датчики которые после нормально датчика на завершение
работы тоже на прерывании, если до завершения времени датчик конца
работы сработал то
всё нормально, шлём запрос GET -
/localhost/test_results/ с
идентификатором платы и параметрами которые были получены с добавлением
исполнено. Если нет, откат и тоже сообщение.
5. Если запрос пришёл не с сервера а с датчика, кнопки - то просто
пересылается запрос на сервер и оттуда приходит запрос на действие. На запрос должно прийти подтверждение о получении или команда в течении заданного времени, если нет, то повторная посылка.
6. Если пришёл запрос с аварийного датчика - например большой ток - то
отключается силовая часть и шлётся уведомление на сервер.
7. Получается команды идут похожие, но с небольшими вариантами - в зависимости от
типа привода или датчика.
8. Также нужно сделать вывод на маленький дисплей OLED IIC I2C - просто
передавать на дисплей данные которые поступят с таким параметром с GET
запроса, при этом желательно тестировать и давать ответ, что данные уже
на дисплее. Дисплей нужно вынести из платы за 1-2 метра. Будет
лучше если дисплеев будет 2 штуки, если по шине I2C, то там только
по моему адреса назначить ещё другие и всё. Но это не обязательно.
9. Команды от сервера и кнопок идут по одной, через прерывания, если нет
запросов в течении 10 минут, плата засыпает.
10. Работу надо организовать как по транзанкциям в базе данных, через
флаги видимо, что-бы если не сработало что-то, то был откат назад и
сообщение о ошибке и везде устанавливались флаги перед
действием, после действия.
11. В дежурном режиме STM32 в режиме ожидания, все входы от датчиков и запросы GET будят её через прерывания.
В будущем нужно будет объединить по несколько команд в транзанкцию, но
пока для начала лучше сделать по одной команде.
Если какой-то датчик или мотор не работает, надо ставить флаг -
disabled, что-бы не дёргалась эта ножка до ремонта, а остальное могло
работать.
Видимо лучше сделать массив с номерами ножек и названиями моторов,
кнопок, датчиков и флагами состояния всего этого.
Массив состояния можно передавать при запросе, как JSON на сервер, а я
там разберу что к чему.
--------------
Это в общем. Точнее надо будет согласовать перед началом работы, набор
моторов, датчиков, как лучше это подключать.
Но это не влияет особо, просто задействовать нужно все ножки STM32,
что-бы я мог ими управлять через PHP и получать информацию с кнопок и
датчиков, а также состояние общее.
Там масса настроек в STM32, можно сделать попроще и что-бы надёжно,
скорость тут особо не важна.
---------------------
Пока работу начинать не нужно, сообщите пожалуйста, сколько займёт
примерно время такая работа и сколько будет стоить.
Желательно не делать с ноля, хлопотно, займёт много времени и потребует
большой бюджет, если у Вас есть готовые шаблоны, наработки, то это было
бы как раз то что нужно.
----------------
Работу нужно будет разбить на части и по мере продвижения или усложнения
я буду оплачивать, возможен частичный аванс.
Код должен быть с комментариями, хотя-бы в тем местах где менять нужно,
а также нужно снять видео как работать с кодом, как настроить среду
разработки что-бы этот код можно было поправить в мелочах,
поменять константы.
Также в коде надо что-бы не было затычек с зависанием без ответа, везде
надо сделать осмысленный выход из кода из любой ситуации,
с посылкой сообщения на GET запрос с места кода, или если нет доступа к
серверу выводить на экран.
Что-бы не было такого, что STM32 не работает и всё. Если GET запрос
принят, всегда должен быть осмысленный ответ, что там за ситуация.
Стоимость договорная, зависит от согласованного тех. задания.
Пишите на почту nickmail1_@_bk_.ru уберите подчёркивания, а то там что-то не пропускает цензура.
----------
С уважением,
Николай