Открытая платформа для создания заботливой квартиры

Чипы с поддержкой Bluetooth LE (BLE) являются мощными микроконтроллерами (например, CC2541 или TLSR8266), однако их программирование требует специальных знаний, навыков и ПО. Для упрощения задачи прототипирования мы будем использовать более простые и удобные микроконтроллеры, использующие BLE-модули для приема/передачи данных через UART-интерфейс.

Для программирования микроконтроллеров вам потребуется бесплатная среда разработки Ardunio IDE.

Для продолжительной работы конечных устройств необходимо снизить энергопотребление микроконтроллера, путем перевода его в режим с пониженным энергопотреблением (режим сна). Чаще всего используются два режима сна:

  • Сон с пробуждением по таймеру. В этом случае микроконтроллер просыпается с заданным интервалом (от 100 мс до 8 сек), выполняет нужную работу и засыпает опять. Такой режим очень удобен для снятия и передачи показаний датчиков.
  • Сон с пробуждением по изменению логического уровня на пине. В этом случае микроконтроллер просыпается только тогда, когда на заданном пине низкий уровень меняется на высокий (raising) или высокий на низкий (falling). Такой режим удобен, когда отслеживается внешнее событие.

Arduino Pro Mini

Распиновка

Плюсы Минусы Напряжение Режим сна Цена, руб.
Компактный размер, при наличии достаточно большого числа пинов ADC, IO, PWM, I2C. Хорошо подходит для работы с несколькими датчикам или со сложными датчиками. Приличный объем памяти. Программируется из Arduino IDE. Отсутствует USB-разъем для подключения к ПК, нужен UBS-RS232 конвертер. 2В - 5В ~100 мкА 130

Вы можете купить плату на 5В или плату на 3В. Если для питания модулей вы планируете использовать таблетку CR2032 или две батарейки AA или AAA, то лучше использовать плату на 3В. В этом случае используется более низкочастотный осцилятор, который позволит снизить требования по питанию до 1.8В.

Режим сна

Используйте библиотеку Low-Power для удобного перевода в режим с пониженным энергопотреблением. Скачайте ее с GitHub как zip-архив, затем в Arduino IDE выберите пункт Sketch - Install library и импортируйте скачанный zip-архив. Теперь погружение контроллера в сон выполняется одной командой:

#include <LowPower.h>

void loop() 
{
  // используем режим Watchdog Timer с пробуждением каждые 8 сек., выключаем ADC и BOD
  LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);

  // здесь выполняем работу после пробуждения
  ...
}

Чтобы добиться действительно хороших показателей по энергопотреблению в режиме сна, потребуется удалить с платы несколько элементов:

  • Power LED, который светится при наличии напряжения на плате
  • Стабилизатор напряжения, расположенный рядом с пинами RX/TX

Подробнее об этом описано в этой статье. Также лучше не использовать пин 13, поскольку на нем висит светодиод.

Программирование

Для подключения микроконтроллера к ПК используйте готовый кабель USB-RS232 (TTL) или его эмуляцию на плате Arduino, собранную по следующей схеме:

В этом варианте пин RST подключен к "земле", чтобы изолировать чип материнской платы. Таким образом, для программирования Pro Mini нужно дважды нажать на кнопку Reset на платке Pro Mini сразу после старта загрузки программы в микроконтроллер.

DigiSpark ATTiny85

Распиновка

Плюсы Минусы Напряжение Режим сна Цена, руб.
Очень маленькая и дешевая платка. Доступно 2 PWM и 3 ADC пина, причем 1 PWM и 1 ADC пин обычно заняты BLE-модулем. Хорошо подходит для работы с простым датчиком или исполнительным устройством. Программируется из Arduino IDE через USB. Небольшого объема памяти может не хватить для сложной программы. Требуется установка дополнительных драйверов. Нет поддержки некоторых стандартных библиотек Arduino. 2.7В - 5В ~300 мкА 80

Режим сна

Для погружения контроллера в сон используйте этот пример:

#include <avr/sleep.h>      
#include <avr/power.h>    
#include <avr/wdt.h>         
#include <avr/io.h>
#include <avr/interrupt.h>

#define adc_disable() (ADCSRA &= ~_BV(ADEN))
#define adc_enable()  (ADCSRA |=  _BV(ADEN))

void setup() 
{
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  initializeWatchdogTimer(WDTO_8S);
  ...
}

void loop() 
{
  // используем режим Watchdog Timer с пробуждением каждые 8 сек., выключаем ADC
  adc_disable();
  power_all_disable();
  sleep_mode();

  // здесь выполняем работу после пробуждения
  power_all_enable();
  adc_enable();
  ...
}

Чтобы добиться действительно хороших показателей по энергопотреблению, удалите с платы несколько элементов:

  • Power LED, который светится при наличии напряжения на плате
  • Стабилизатор напряжения

Подробнее об этом описано в этой статье.

Программирование

Для подключения микроконтроллера к ПК используйте обычный USB-кабель. Предварительно установите драйверы и переключите Ardunio IDE в режим программирования DigiSpark (Default...) с использованием программатора Micronucleus.

Arduino Nano

Распиновка

Плюсы Минусы Напряжение Режим сна Цена, руб.
Наличие большого числа пинов ADC, IO, PWM, I2C. Хорошо подходит для работы с несколькими датчикам или со сложными датчиками. Приличный объем памяти. Программируется из Arduino IDE. Достаточно крупная плата. Требует значительной переделки для использования в режиме низкого энергопотребления. 2В - 5В ? 180

Режим сна

Некоторые датчики или исполнительные устройства потребляют слишком много, чтобы использовать батарейки для их питания. Для простоты сборки и отладки устройства в этом случае, можно использовать Arduino Nano и не заморачиваться с режимом низкого энергопотребления.

Программирование

Для подключения микроконтроллера к ПК используйте стандартный USB-кабель.