Помогите с концепцией bluetooth логгера метеоданных
- Войдите на сайт для отправки комментариев
Доброго времени суток!
Я прикладной программист, с микроконтроллерами и чистым Си дружу не особо.
Очень хочется услышать Ваши советы и конструктивную критику по выбору библиотек, архитектуре кода и реализации отдельных моментов.
Есть следующая задача: разработать максимально автономный логгер метеоданных с возможностью снятия показаний через bluetooth, клиентами будут Andorid-устройства.
Аппаратная часть:
- Arduino Uno;
- DHT11;
- Часы реального времени на чипе DS1307;
- Bluetooth HC-06;
- MicroSD card reader с SPI;
- Proto Shield.
Уже есть Arduino Uno и DHT11, остальное - жду. DHT11 думаю заменить на DHT22 или DS18B20.
Идея микропрограммы:
Снимаем данные с датчика влажности и температуры через определенные интервалы (минута и более), записываем данные во внешнюю память и уходим в спячку.
Если кто-то подключился через bluetooth, начинаем сеанс обмена. Набор команд придумал небольшой:
- получение состояния логгера, версии микропрограммы;
- получение текущих значений;
- получение данных из внешней памяти;
- установка даты/времени;
- установка параметров (интервал опроса и прочее).
На данный момент:
Научился снимать показания с DHT11, читать/писать в последовательный порт. Завис на прерываниях, таймерах и режимах работы микроконтроллера.
Хочу понять:
- какой оптимальны режим энергосбережения для моего случая;
- как менять режим по событию таймера и при подключении клиента;
- какие библиотеки для работы использовать;
- что я не учел при проектировании.
Буду рад любой помощи.
приличного энергосберегающего режима не получится, т.к. чтобы в любой момент кто-то мог подключиться по блютуз, этот самый блютуз должен постоянно быть активен. сам по себе опрос датчика влажности или температуры по сравнению с блютуз ничего не жрет. не совсем понятно что вы собираетесь измерять. днт11, 22 предназначены для влажности, 18б20 измеряет температуру.
с логгером в вашем случае проблем быть недолжно. иногда приключаются танцы с бубном если работа с сд-картой сочетается с передачей данных по езернет (езернет-шилд w5100 у которого на борту и сетевой контроллер и сд-слот ), у этого контроллера желательно не задействовать обе библиотеки одновременно, лучше поочередно.
Maverik, спасибо за ответ. Какое примерно соотношение энергопотребления у bluetooth в режиме ожидания и микроконтроллера, который висит в loop() и ждет подключение, переодически опрашивает DHT? (код прикрепил ниже)
Задача измерять температуру, влажность- вдовесок, раз DHT умеет его измерять.
На данные момент считаю millis() и жду получения символа в последовательный порт в loop(), а через заданные интервалы времени считываю значения с DHT.
Не понятны следующие моменты:
1. Как мне кажется, это все избыточно и чтение порта лучше вынести в обработку прирывания?
2. Как уводить микроконтроллер в спячку между опросами и будет ли от этого толк, учитывая что перед снятием значений с DHT идет какая-то его инициализация?
3. Можно ли питать bluetooth через ногу микроконтроллера, если используется режим сна?
Заранее спасибо за ответы.
Микропрограмма:
Блютуз напрямую питать от ножки нельзя, только если транзистором; у НС-05 есть вывод EN, при подаче на него низкого лог.уровня, модуль вырубается
Yarik.Yar, я, наверно, не так выразился. Я имел ввиду выводы Arduino Uno 5/3,3 В, скорее всего это нога стабилитрона, а не микрокотроллера - увы, в аппартной части разбираюсь еще хуже программной. Имелось ввиду, будет ли питания у модуля HC-05, если микрокотроллер будет в спячке, и смогут ли при этом подключаться клиенты?
Стабилизатор напряжения на плате от контроллера никак не зависит:)
Yarik.Yar, с этим мы уже разобрались выше=)
Сейчас вопрос в том, как повесить чтение команд из последовательного порта на соответствующее прерывание, чтоб не дергать его каждый вызов loop().
Во-первых, можно сделать внутреннее прерывание по поступившим данным, а можно соединить RX и 2 выход - это будет внешнее прерывание)
Yarik.Yar, спасибо за ответ. Что прерывание нужно использовать - факт, я вроде даже нашел как это сделать.
Переживаю по поводу длительных операций, типа чтения лога с SD-карты, чтоб опрос датчика не пропустить. Может опрос DHT11 вынести в прерывание с большим приоритетои, чем UART.
Самое печальное - нет всей переферии для тестов, а устройство хотят показать руководству через неделю=)
Есть DHT,адаптер для карты , модуль блютуза - могу протестировать;)
Yarik.Yar, ценю Вашу заботу, но с моим уровнем только разработка через отладку=) Нашел у себя в городе (Ростов-на-Дону) магазинчик, может за пару дней купят - будет чуть попроще.
=)