Беспроводной датчик температуры, влажности и атмосферного давления на nRF52832

Сегодняшняя статья будет о датчике температуры, влажности и атмосферного давления c длительным сроком работы от одной батарейки. Датчик работает на микроконтроллере nRF52832 (даташит). Для получения температуры, влажности и атмосферного давления использован сенсор BME280 — даташит. Датчик работает от батареек CR2430/CR2450/CR2477. Потребление в режиме передачи составляет 8мА, в режиме сна 5мкА. Итак, обо всем по порядку.

Это Arduino проект, программа написана в Arduino IDE, Для работы сенсора BME280 использована библиотека Adafruit Industries — гитхаб сенсоры | гитхаб BME280. Для работы с платами nRF52832 в Arduino IDE использован проект Sandeep Mistry — гитхаб. Передача данных на контролер Умного Дома осуществляется по протоколу Mysensors — гитхаб плат | протокол|библиотека (MySensors Wiki · GitHub структура протокола).

Плата датчика разрабатывалась в программе Диптрейс. Размеры платы 36.8мм Х 25мм.


Перечень используемых компонентов | стоимость
  • С1 — cap0603 100nF — 0.66р.
  • C2 — cap0603 100nF — 0.66р.

  • R1 — res0603 332 — 0.45р.
  • R2 — res0603 85b — 0.45р.
  • R3 — res0603 113 — 0.45р.
  • R4 — res0603 912 — 0.45р.
  • R5 — res0603 113 — 0.45р.
  • R6 — res0603 512 — 0.45р.
  • R7 — res0603 512 — 0.45р.
  • RGBL1 — led0805 rgb — 4.06р.
  • SWD — PPHF 2x3 6p 1.27mm — 7.89р.
  • U1 — YJ-16048 nRF52832 — 212.56р. (+доставка 101.63р.)
  • U2 — BME280 — 156.76р.
  • CONNECT — тактовая кнопка KLS7-TS5401 — 8.5р.
  • RESET — тактовая кнопка KLS7-TS5401 — 8.5р.
  • Держатель батареи KW-BS-2450-2-SMT — 55.14р.
  • Переключатель dsc0012 — 15.85р.
Стоимость компонентов: 575.36р.
Стоимость pcb: 86р. 1 штука (см.скриншот с сайта jlspcb расчет до МСК)

Итого: 661.33р. (or $10.25)


Плата заказывалась через сайт jlcpcb.com — 2$ за 5 штук в любом цвете.





Ссылка на архив с герберфайлами — drive.google.com/file/d/1xdNjZmjKsELLEp4_vSpQi_SpF_XfXHr2/view?usp=sharing

Датчик работает по протоколу Mysensors. Добавить любое устройство в сеть Mysensors достаточно просто. Давайте разберемся на примере этого датчика, пояснения по коду самого датчиком BME280 я опушу, там ничего не меняется при работе с сети Mysensors.


#define MY_DEBUG // Вывод дебага
#define MY_RADIO_NRF5_ESB // Выбор типа радиопередатчика(возможные варианты rfm69, rfm95, nrf24l01, nrf51-52)
#define MY_RF24_PA_LEVEL (NRF5_PA_MAX) // выбор уровня радиосигнала
#define MY_DISABLED_SERIAL // отключение сериала
#define MY_PASSIVE_NODE // режим работы ноды(устройство в сети mysensors), PASSIVE означает что отключены все процедуры контроля транспортного уровня, обновление по воздуху, шифрование, безопасность
#define MY_NODE_ID 1  // ручное назначение идентификатора ноды
#define MY_PARENT_NODE_ID 0 // ручное назначение идентификатора гейта или ретранслятора
//#define MY_PARENT_NODE_IS_STATIC // атрибут PARENT_NODE отвечающий за отключение функционала автоматического перестроения маршрута
//#define MY_TRANSPORT_UPLINK_CHECK_DISABLED // отключение контроля работоспособности транспортного уровня

#include <MySensors.h> // - библиотека MySensors

#define TEMP_CHILD_ID 0 // назначение идентификатора сенсора температуры
#define HUM_CHILD_ID 1 // назначение идентификатора сенсора влажности
#define BARO_CHILD_ID 2 // назначение идентификатора сенсора атмосферного давления
#define CHILD_ID_VOLT 254 // назначение идентификатора сенсора заряда батареи

MyMessage voltMsg(CHILD_ID_VOLT, V_VOLTAGE);  // инициализация сообщения для сенсора заряда батареи
MyMessage temperatureMsg(TEMP_CHILD_ID, V_TEMP);  // инициализация сообщения для сенсора температуры
MyMessage humidityMsg(HUM_CHILD_ID, V_HUM);  // инициализация сообщения для сенсора влажности
MyMessage pressureMsg(BARO_CHILD_ID, V_PRESSURE);  // инициализация сообщения для атмосферного давления


Презентация датчиков и сенсоров в контролер умного дома:

  sendSketchInfo("BME280 Sensor", "1.0");  // Название датчика, версия ПО
  present(CHILD_ID_VOLT, S_MULTIMETER, "Battery");  // Презентация сенсора заряда батареи, тип сенсора, описание
  present(TEMP_CHILD_ID, S_TEMP, "TEMPERATURE [C or F]");  // Презентация сенсора температуры, тип сенсора, описание
  present(HUM_CHILD_ID, S_HUM, "HUMIDITY [%]");  // Презентация сенсора влажности, тип сенсора, описание
  present(BARO_CHILD_ID, S_BARO, "PRESSURE [hPa or mmHg]");  // Презентация сенсора атмосферного давления, тип сенсора, описание


Передача данных на контролер умного дома:

send(voltMsg..set(batteryVoltage));  // отправка данных о заряде батарейки в mW
sendBatteryLevel(currentBatteryPercent);   // отправка данных о заряде батарейки в %
send(temperatureMsg.set(temperature, 1));  // отправка данных о температуре
send(humidityMsg.set(humidity, 0));  // отправка данных о влажности
send(pressureMsg.set(pressure, 0));  // отправка данных о давлении


Ардуино код программы

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
//#define MY_DEBUG
#define MY_RADIO_NRF5_ESB
#define MY_RF24_PA_LEVEL (NRF5_PA_MAX)
#define MY_DISABLED_SERIAL
#define MY_PASSIVE_NODE
#define MY_NODE_ID 1
#define MY_PARENT_NODE_ID 0
//#define MY_PARENT_NODE_IS_STATIC
//#define MY_TRANSPORT_UPLINK_CHECK_DISABLED

#include <MySensors.h>

bool sleep_flag;
bool metric = true;
bool last_sent_value;

uint16_t currentBatteryPercent;
uint16_t lastBatteryPercent = 1000;
uint16_t battery_vcc_min = 2150;
uint16_t battery_vcc_max = 2950;
uint16_t batteryVoltage;
uint16_t battery_alert_level = 25;

uint32_t default_sleep_time = 60000;
uint32_t SLEEP_TIME;
uint32_t newmillisforbatt;
uint32_t battsendinterval = 3600000;

float tempThreshold = 0.5;
float humThreshold = 5;
float presThreshold = 1;
float pres_mmThreshold = 1;
float temperature;
float pressure;
float pressure_mm;
float humidity;
float lastTemperature = -1;
float lastHumidity = -1;
float lastPressure = -1;
float lastPressure_mm = -1;

#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme;

#define TEMP_CHILD_ID 0
#define HUM_CHILD_ID 1
#define BARO_CHILD_ID 2
#define CHILD_ID_VOLT 254

MyMessage voltMsg(CHILD_ID_VOLT, V_VOLTAGE);
MyMessage temperatureMsg(TEMP_CHILD_ID, V_TEMP);
MyMessage humidityMsg(HUM_CHILD_ID, V_HUM);
MyMessage pressureMsg(BARO_CHILD_ID, V_PRESSURE);


void preHwInit() {
  pinMode(21, INPUT);
  pinMode(25, OUTPUT);
  digitalWrite(25, HIGH);
  pinMode(26, OUTPUT);
  digitalWrite(26, HIGH);
  pinMode(27, OUTPUT);
  digitalWrite(27, HIGH);
}


void before() {
  NRF_POWER->DCDCEN = 1;
  NRF_NFCT->TASKS_DISABLE = 1;
  NRF_NVMC->CONFIG = 1;
  NRF_UICR->NFCPINS = 0;
  NRF_NVMC->CONFIG = 0;
  if (NRF_SAADC->ENABLE) {
    NRF_SAADC->TASKS_STOP = 1;
    while (NRF_SAADC->EVENTS_STOPPED) {}
    NRF_SAADC->ENABLE = 0;
    while (NRF_SAADC->ENABLE) {}
  }
  pinMode(BLUE_LED, OUTPUT);
  pinMode(RED_LED, OUTPUT);
  digitalWrite(BLUE_LED, HIGH);
  digitalWrite(RED_LED, HIGH);
  digitalWrite(27, LOW);
}

void setup()
{
  digitalWrite(27, HIGH);
  bme_initAsleep();
  wait(100);
  sendBatteryStatus();
  wait(100);
}


void presentation()  {
  sendSketchInfo("EFEKTA BME280 Sensor", "1.2");
  present(CHILD_ID_VOLT, S_MULTIMETER, "Battery");
  present(TEMP_CHILD_ID, S_TEMP, "TEMPERATURE [C or F]");
  present(HUM_CHILD_ID, S_HUM, "HUMIDITY [%]");
  present(BARO_CHILD_ID, S_BARO, "PRESSURE [hPa or mmHg]");
}


void loop() {
  wait(10);
  bme.takeForcedMeasurement();
  wait(100);
  sendData();
  if (millis() - newmillisforbatt >= battsendinterval) {
    sleep_flag = 1;
    sendBatteryStatus();
  }
  if (sleep_flag == 0) {
    sleep(SLEEP_TIME);
    sleep_flag = 1;
  }
}


void blinky(uint8_t pulses, uint8_t repit, uint8_t ledColor) {
  for (int x = 0; x < repit; x++) {
    if (x > 0) {
      sleep(500);
    }
    for (int i = 0; i < pulses; i++) {
      if (i > 0) {
        sleep(100);
      }
      digitalWrite(ledColor, LOW);
      wait(20);
      digitalWrite(ledColor, HIGH);
    }
  }
}


void sendBatteryStatus() {
  wait(20);
  batteryVoltage = hwCPUVoltage();
  wait(2);

  if (batteryVoltage > battery_vcc_max) {
    currentBatteryPercent = 100;
  }
  else if (batteryVoltage < battery_vcc_min) {
    currentBatteryPercent = 0;
  }
  else {
    if (lastBatteryPercent == 1000) {
      currentBatteryPercent = (100 * (batteryVoltage - battery_vcc_min)) / (battery_vcc_max - battery_vcc_min) + 5;
    } else {
      currentBatteryPercent = (100 * (batteryVoltage - battery_vcc_min)) / (battery_vcc_max - battery_vcc_min) - 5;
    }
  }
  sendBatteryLevel(currentBatteryPercent);
  wait(100);
  if (lastBatteryPercent < battery_alert_level) {
  blinky(3, 1, RED_LED);
  }
  else {
    blinky((last_sent_value == true ? 2 : 1), 1, BLUE_LED);
  }
  sleep_flag = 0;
  newmillisforbatt = millis();
}


void sendData() {
  temperature = bme.readTemperature();
  wait(20);
  humidity = bme.readHumidity();
  wait(20);
  pressure = bme.readPressure() / 100.0F;
  if (!metric) {
    temperature = temperature * 9.0 / 5.0 + 32.0;
  } else {
    pressure = pressure * 0.75006375541921;
  }
  CORE_DEBUG(PSTR("MY_TEMPERATURE: %d\n"), (int)temperature);
  CORE_DEBUG(PSTR("MY_HUMIDITY: %d\n"), (int)humidity);
  CORE_DEBUG(PSTR("MY_PRESSURE: %d\n"), (int)pressure);
  
    if (abs(temperature - lastTemperature) >= tempThreshold) {
      send(temperatureMsg.set(temperature, 1));
      lastTemperature = temperature;
      sleep(1000);
    }

    if (abs(humidity - lastHumidity) >= humThreshold) {
      send(humidityMsg.set(humidity, 0));
      lastHumidity = humidity;
      sleep(1000);
    }

    if (abs(pressure - lastPressure) >= presThreshold) {
      send(pressureMsg.set(pressure, 0));
      lastPressure = pressure;
      sleep(1000);
    }
  sleep_flag = 0;
}


void bme_initAsleep() {
  if (! bme.begin(&Wire)) {
    while (1);
  }
  bme.setSampling(Adafruit_BME280::MODE_FORCED,
                  Adafruit_BME280::SAMPLING_X1, // temperature
                  Adafruit_BME280::SAMPLING_X1, // pressure
                  Adafruit_BME280::SAMPLING_X1, // humidity
                  Adafruit_BME280::FILTER_OFF   );
  wait(1000);
}



Корпус для датчика разрабатывался в 3Д редакторе:


Напечатан был на 3D принтере ANYCUBIC FOTON смолой белого цвета этого же производителя, толщина слоя была выбрана средняя — 50микрон. Время печати корпуса и крышки 3 часа.









Сеть MySensors в которой работает датчик обменивается данными с системой умного дома Мажордомо. Зарегистрированный датчик в модуле Майсенсорс Мажордомо выглядит так:




Видео с тестом



Для желающих сделать себе такой же в статье даны ссылки на всё необходимое.

Ссылки на Али:
Принтер Anycubic Foton

Модуль nRF52832
Конденсаторы 0603
Резисторы 0603
rgb led 0805
Разьем 6p (3x2, 1.27)
Кнопки smd
BME280
Держатель cr2450
Переключатель горизонтальный
или
Переключатель вертикальный

Место где всегда с радостью помогут всем кто хочется познакомиться с MYSENSORS (установка плат, работа с микроконтроллерами nRF5 в среде Arduino IDE, советы по работе с протоколом mysensors — @mysensors_rus
Добавить в избранное +65 +101
+
avatar
  • bm_s
  • 12 июня 2019, 20:35
+5
К чему этот гимор, када можно готовый датчик от хаоми взять? Ну, понятно, нужен шлюз, но это недорого.
+
avatar
+3
насколько «недорого»? тут я понимаю себестоимость баксов 10 максимум, и шлюз не нужен. соответственно, для подключения к ИМЕЮЩЕЙСЯ инфраструктуре и выбираем тот датчик который проще и дешевле интегрируется.
+
avatar
+8
тут я понимаю себестоимость баксов 10 максимум
Баксов 10-11 только платы выйдут. 2$ за пять штук — это если сами съездите в Китай и заберете их с завода, а если хотите, чтобы их отправили Вам, то готовьте еще баксов 8 :)
шлюз не нужен. соответственно, для подключения к ИМЕЮЩЕЙСЯ инфраструктуре
А имеющаяся инфраструктура не включает в себя шлюз? Кто тогда принимает данные с этого датчика?
+
avatar
-2
а если отправить на китайский адрес- то доставка всего 1.8 бакса. А из Китая- 9 баксов за кило, т.е. платы выйдут в бакс, по весу
+
avatar
+4
Даже если представить такой геморрой, то:
— платы — 4.8 бакса (2 сами платы и 2.8 доставка)
— nRF52832 — 8.8 бакса (5 сам модуль и 3.8 доставка, информация по ссылке из обзора)

Это уже 13.6 баксов :) А еще остальные детали, корпус, батарейка. Сильно выходит за пределы «баксов 10 максимум» :)
+
avatar
-3
не сильно, всего на 3,6 бакса, но если представить, что это 36%- то сильно.
Все зависит от точки зрения)))
+
avatar
+2
всего на 3,6 бакса
Это только платы и модуль nRF. А еще кнопки, резисторы, конденсаторы, датчики, держатель батарейки, сама батарейка, корпус. Если закупить деталей на сотню таких девайсов, то может и выйдет максимум 10 баксов за девайс, но если делать один, то баксов 20 точно выйдет :) И это при условии, что платы отправлять какому-нить китайцу, который потом за бакс отправит их сюда :)
+
avatar
  • uweroy
  • 14 июня 2019, 09:35
0
Почти все компоненты продаются по 10/100 шт. и если нужно 1 устройство, то оно обойдется дороже шлюза с кучей датчиков. Накидал все в корзину
Стоимость 2 362,22 руб.
Доставка 955,66 руб.
К оплате 3 317,88 руб.
+
avatar
  • sav13
  • 13 июня 2019, 05:19
+1
Но это ведь не за одну плату, а за 10 и более (если удачная компоновка в заказе)
То есть если делаем 10 модулей, то плата стоит менее $1
Ну и если заменить явно избыточный NRF52 на тот же NRF51 за пару баксов с небольшим — получаем уже вполне приемлемую стоимость

Но у автора видимо «дядя на гуталиновой фабрике» )))
+
avatar
+3
Но это ведь не за одну плату, а за 10 и более
А если заказать 1000 плат, то каждая вообще в считанные центы обойдется :)
+
avatar
  • sav13
  • 13 июня 2019, 09:34
0
Ну да. А одна плата дома делается условно бесплатно ))
+
avatar
+1
Не только лишь все умеют дома металлизировать переходные отверстия :)
+
avatar
  • sav13
  • 13 июня 2019, 09:52
0
Согласен. Голвняк с переходными отверстиями большой.
Хотя развести один сенсор и светодиод к контроллеру вполне можно и на односторонюю плату
+
avatar
  • bm_s
  • 13 июня 2019, 05:02
0
и шлюз не нужен.
правильно ли я вас понимаю? Данные с этого датчика на телефон могут напрямую на телефон хлестать?
+
avatar
  • sav13
  • 13 июня 2019, 05:13
+1
Теоретически могут, но не у автора
NRF52 поддерживает BLE, но в проекте вместо него используется проприоретарный протокол от Нордика, на котором живет Mysenosrs
+
avatar
+16
Xiaomi недорого. Свое бесценно!
+
avatar
  • bm_s
  • 13 июня 2019, 05:06
0
Глубокомысленно изрек Balzamalex и отхлебнул из кружки чаю…
комментарий скрыт

+
avatar
+3
Потому что от этой любительской поделки до потребительского устройства — как раком до луны.
Как и от любой поделки до устройства. Если даже допустить, что оно пригодно к производству и использованию(а это не так), то остаётся ещё вопросы корпуса, упаковки, логистики, документации для производства, оснастки для производства, самого производства, всяких коробочек-листовок, инструкций, документации, сертификации, людей, разработки процессов всего этого, позиционирования на рынке, продаж, сервиса и так далее.

Там на хабре автор плавает в том, как протокол работает, что уж говорить о какой-то более серьёзной разработке, чем «залить код с правками в контроллер».
+
avatar
  • berk
  • 12 июня 2019, 22:05
0
здравствуйте, в каком месте я плаваю на хабре? в статье освещается очень простой пример работы майсенсорс, более углубленно на форуме майсенсорс орг в теме про датчик.
+
avatar
+6
в каком месте я плаваю на хабре?
Да сразу после вопроса про описание протокола :)
+
avatar
  • berk
  • 12 июня 2019, 22:21
-6
+
avatar
+10
Нет, это именно так :) Вы так и не смогли дать ссылку где можно посмотреть описание протокола. Сами Вы его описать так же не смогли. Не смогли понять какие пакеты и зачем уникально нумеруют в пакетных протоколах связи. И зачем шифрование или подпись пакетов. И почему организация защищенной сессии в несколько этапов передачи-приема — это плохо для устройств с длительной автономной работой.
Да и в этом телеграмм-канале, "где всегда с радостью помогут всем ..., советы по работе с протоколом" тоже, судя по всему, не шибко знающие сидят :))
+
avatar
  • berk
  • 12 июня 2019, 23:09
-11
+
avatar
+10
Ну вот в этом же духе Вы и отвечали на Хабре на вопрос «Где взять описание протокола?» :)
комментарий скрыт

+
avatar
+2
Нет, нельзя. Потому что его там нет :)
+
avatar
-3
он есть в сорсах. Идеология проекта — консьюмерская, но все есть в сорсах.
Копайтесь, если вам это нужно

Я вот пользуюсь уже года три и мне ВООБЩЕ неинтересно, как это реализовано на железном уровне
+
avatar
+2
Ну вот именно это и отличает нормальные продукты от DIY поделок. Андройд например тоже опен-сорс, но по нему есть документация, а не просто «вот вам сорцы и ни в чем себе не отказывайте»
+
avatar
-3
АндроИд — это продукт гигантской корпорации, а не энтузиастов.
Вам зачем протокол? хотите коммитить? Спишитесь с ними и вам дадут все разъяснения.
Те, кто реально хочет коммитить (а такие люди есть) тут не ноют.
Если вы параноик и боитесь закладок, курите сорсы.
+
avatar
+7
При чём тут коммитить, при чем тут закладки. Речь идет о протоколе. Скажем если я решу собрать свой шлюз или же мне захочется сделать свой датчик совместимый с этой системой. Заставлять человека копаться в твоем коде чтобы понять как реализован протокол… ну такое себе.
+
avatar
-1
еше раз: захотели сделать датчик или шлюз — велкам. Расписано ВСЕ. Закодументирован протокол коммуникации (софтовый)
Берете библиотеку, пишите скетч, делаете. Если надо — читаете.
Я делал. Другие делали.
Если вам интересна ЖЕЛЕЗНАЯ реализация, тогда смотрите выше.
+
avatar
+2
Закодументирован протокол коммуникации (софтовый)
Это не протокол, а API.
Берете библиотеку, пишите скетч, делаете.
Ну то есть так и есть как объяснили в телеграме — «для ардуинщиков, которые просто взяли скетч и залили в девайс». Вот представьте, что сама Ардуино так документировало бы свой продукт — «все есть в коде, берите и разбирайтесь». Так бы и умерло все это в безвестности :) И этот майсенсорс так и останется уделом трех калек при таком подходе к своему развитию.
+
avatar
+1
Судя по тому, что диалог «ну вот же документация! но это же API! ну и что?» повторяется не в первый раз, мне кажется, оппоненты просто не видят разницы.
+
avatar
+2
А судя по ответам «Вот вам скетч и библиотека, их хватит всем, глубже лезть никому не нужно!» они не в курсе, что кроме ардуины бывает что-то еще :)
+
avatar
+6
Это замечательно. Только есть одно но. Это не писание протокола. Это описание библиотеки для работы с этим протоколом.
+
avatar
-4
и дальше что? зачем вам описание протокола? Ходим по кругу. Закладки?
Коммиты? Или (что самое вероятное) придраться, сказать «фи» и гордо уйти.
+
avatar
+2
зачем вам описание протокола?
Какая хорошая вариация русского форума: вам долго объясняют, что то, что вы запрашиваете, вам на самом деле не нужно.
+
avatar
+4
Какие закладки, какие коммиты? Ты вообще что обозначает слово «протокол» знаешь? Потому, что искать закладки следует именно в исходных кодах библиотеки, а не в описании протокола (потому, что какая же это уже тогда закладка если она в описании протокола есть). Да и коммиты тоже в первую очередь для библиотеки имеют смысл. Протокол как раз таки часто править не нужно (в идеале его вообще лучше не править, но это не всегда возможно).

И да, лично мне протокол действительно не нужен. Я вообще мимокрокодил. Однако когда на вполне логичный вопрос про описание протокола я вижу ответ «читайте исходные коды» то у меня сразу складывается определенное отношение к авторам этого проекта.
+
avatar
+6
Копайтесь, если вам это нужно
Отличный подход :)
+
avatar
+3
Я вот пользуюсь уже года три и мне ВООБЩЕ неинтересно, как это реализовано на железном уровне
А, ну тогда все нормально! Если вам неинтересно, значит, документация не нужна.
Интересно, если мне не интересны ваши комментарии, означает ли это, что они на этом сайте не нужны, и вас можно забанить, чтобы сэкономить место в бд? Если пользоваться той же логикой, то да.
+
avatar
0
зачем вам знать, как это реализовано? Если реально интресно, курите сорсы.
Людей, которым интресен железный уровень — минимум, при этом а) 90% из России б) 90% этих 90% никогда не будут ничего собирать.
Ради них писать доки?
+
avatar
+5
Да, ради них писать доки. Потому что это не консьюмерский проект, который выдает на-гора готовые устройства в коробочках, а DIY, который рассчитан на тех, кто работает с низким уровнем.
Ну, вот у меня некоторое время назад стоял вопрос о выборе протокола для подобной системы, и я смотрел на mysensors, и в итоге отказался.
Именно по этой причине — потому что по любому вопросу о чем-то менее тривиальном, чем «залить скетч в ардуино» мне предлагают обращаться в канал, авось там кто-то поможет.

Я с вами спорить не хочу, и переубеждать тоже смысла не вижу. Живите дальше, как жили, если вас устраивает, это замечательно. Но приходя к понимающим людям с «вот так спаять, вот так залить» не удивляйтесь, что вас минусуют за то, что вы не можете толком пояснить, что же вы там заливаете, и как оно работает. Просто потому, что это подход, как выразился не очень приятный мне, но умный человек, который называется, простите, «срали-мазали».
+
avatar
-1
в первом тезисе сразу ошибка. Это DIY-проект, рассчитанный на тех, кто работает с ВЕРХНИМ уровнем. И верхний уровень расписан прекрасно. Ссылка выше.
И я не очень понимаю, причем здесь телеграм канал этого замечательного человека. У Mysensors есть официальный.сайт с прекрасным форумом.
И ответьте: что ИМЕННО вы хотели узнать и не нашли?

Минусам я не удивляюсь, здесь вообще весьма токсичная аудитория
+
avatar
  • berk
  • 13 июня 2019, 14:57
0
поправочка, это совершено не мой телеграмм канал, а канал ру сообщества, я не являюсь владельцем данного канала. так же как и рускоязычный форум майсенсорс.ру
+
avatar
+5
Да, вы правы. Аудитория, которая ставит минусы за то, что человек продолжает упорствовать, кому-то что-то доказывая, хотя хватило бы «да, у проекта есть свои минусы, но мне удобно» — невероятно, ужасно токсична.

И ответьте: что ИМЕННО вы хотели узнать и не нашли?
Полагаю, будет абсолютно логично, если я вас отправлю искать ответ на этот ваш вопрос в комментарии к статье на хабре. Там где-то это определенно написано, а так как ответ на вопрос нужен вам, а не мне, вам его и искать. Такая практика прекрасно работает, судя по ответам сторонников mysensors, когда их спрашивают что-то о протоколе.
+
avatar
0
О, вижу классического «программера-спорщика».
Методика такая: ухватиться за небольшой изъян и глобализировать.
НИКТО мне не ответил на вопрос «зачем нужен протокол» и «что мешает его найти в сорсах, если он так нужен»
Вот человек, перенесший протокол (именно, протокол) на nrf5, он не вопил, он просто взял и сделал
+
avatar
+4
зачем нужен протокол
Какая разница? Может, я хочу понять, как он устроен, чтобы принять решение о использовании проекта, может, хочу в академических целях почитать, может, хочу свою реализацию написать.
Просто весь срач начался с того, что на простой тезис «у вас нет описания протокола» люди ответили не «да, нет, сообщество не считает нужным тратить ресурсы на доку для разработчиков» а «протокол есть, но только в сорцах, если надо, разберетесь, и вообще, он вам не нужен, потому что вы не можете четко ответить, зачем он нужен».

что мешает его найти в сорсах, если он так нужен
Тем, что сорцы — это реализация, а я хочу читать логику, абстрагируясь от тонкостей упаковки массивов в си и прочего такого же. Если очень надо, то, конечно, можно. Но вот повышенный порог входа при чтении исходников вместо описания протокола приводит к тому, что люди, пишущие статьи и применяющие железо в своих проектах, как, например @berk, совершенно теряются при вопросе про то, зачем нужен счетчиков пакетов в пакете и как это помогает безопасности.
+
avatar
+1
я уже выше ответил: таких «хотящих» можно пересчитать по пальцам, поэтому разрабы не заморачиваются. Не забывайте, что как любой опенсорс, mySensors пишется энтузиастами в свободное время.
Зачем им тратить время на 5 человек из РФ (а такие «любопытные», по опыту, только здесь), когда в это время можно всяких фич добавить или баги устранить?
+
avatar
+3
я уже выше ответил: таких «хотящих» можно пересчитать по пальцам, поэтому разрабы не заморачиваются.
Вот это правдивый ответ. И он звучит как «у нас нет описания протокола, не посчитали нужным его сделать, не было времени». Всё. Вопросов нет. На нет и суда нет. Как ни как это опен сорс проект поэтому никаких обязательств нет.

Однако вместо этого началась какая то чушь про закладки, коммиты, и вообще «он вам не нужен».
+
avatar
-4
Какой протокол нужен? Софтовый?
Он описан ДОСКОНАЛЬНО.

www.mysensors.org/download/serial_api_20#message-structure
+
avatar
+3
Если протокол нормальный, эти «любопытные» могут присоединиться и тоже что-то полезное написать или использовать и продвигать.
+
avatar
-4
Какой протокол нужен? Софтовый?
Он описан ДОСКОНАЛЬНО.

www.mysensors.org/download/serial_api_20#message-structure
+
avatar
  • Dimon_
  • 13 июня 2019, 15:07
+3
здесь вообще весьма токсичная аудитория
Вот это вывод! Браво. А в консерватории ничего менять не пробовали?
+
avatar
+3
90% никогда не будут ничего собирать
Причем 50% из этих 90% — вполне возможно, что не будут ничего писать как раз по причине вот такого подхода к документированию.
Например, я сейчас потихоньку разрабатываю управление летним душем — поддержание уровня воды в баке, подогрев, индикация и т.д. Не на ардуинах. Может быть я бы и поддержал этот протокол, почему нет? Мне все равно, а кому-то может быть польза. Но так как внятного описания этого протокола нет, то мне проще реализовать свой протокол, чем копаться в чужих исходниках, восстанавливая протокол по ним.
+
avatar
-3
Какой протокол нужен? Софтовый?
Он описан ДОСКОНАЛЬНО.

www.mysensors.org/download/serial_api_20#message-structure
+
avatar
+2
Я так понимаю, что Вы нашли на том сайте описание чего-то со словом «protocol» и поспешили сообщить об этом капсом? В следующий раз попробуйте сначала понять что Вы нашли и соответствует ли оно вопросу :)
+
avatar
0
Я с этим протоколом работаю уже года три.
А если вы для для каждой своей поделки изобретаете протокол на уровне железа, то дерзайте
+
avatar
+3
Я с этим протоколом работаю уже года три.
Это не меняет того факта, что это совсем не тот протокол, о котором был вопрос.
А если вы для для каждой своей поделки изобретаете протокол на уровне железа, то дерзайте
У Вас с логикой явно не все в порядке :) Нет, я не изобретаю протокол для каждой своей железки.
+
avatar
-2
Специфицируйте, какой протокол вы ждёте?
А то все это кошки-мышки напоминает
+
avatar
+1
Да, я понимаю… Когда в обзоре датчика спрашивают про протокол, по которому от этого датчика передаются данные, то разумеется, первым делом в голову приходит протокол, по которому шлюз общается с контроллером, это же очевидно :))))
Но нет, тут вопрос стоит о протоколе, по которому датчик передает данные :)
+
avatar
0
Я эту библиотеку знаю, как свои пять пальцев.
По этому же протоколу датчики обращаются к шлюзу.
Это единый протокол.
+
avatar
0
???? Я эту библиотеку знаю, как свои пять пальцев.
По этому же протоколу датчики обращаются к шлюзу.
Это единый протокол.

И вы продолжаете играть в кошки-мышки. Какой протокол вам нужен?
+
avatar
+3
Я эту библиотеку знаю, как свои пять пальцев
Значит Вы очень хреново знаете свои пальцы, как и эту библиотеку.
Это единый протокол.
Единый для чего? Там черному по белому написано: «Последовательный протокол, используемый между шлюзом и контроллером». И ни слова про «между шлюзом и нодами/датчиками».
+
avatar
0
И тем не менее, это протокол, который используется для общения датчиков и шлюза.
Говорю, тк писал свой шлюз.
Более того, если посмотреть логи датчиков, то это видно.
Почитайте внимательнее.
Я вам его предоставил.
Что дальше?
+
avatar
+2
А что за сообщения тогда упаковываются в бинарную структуру MyMessage в одноименном заголовочном файле и закидываются на отправку в буфер передатчиков?
Если бы сенсоры с автономным питанием еще и данные передавали обычным текстом, то это был бы вообще полный фэйл. Совершеннейший пример как не нужно делать автономные датчики.
+
avatar
0
Ну вы то конечно, лучше всех знаете, как делать автономные датчики.
Пишите свой протокол для вашей теплицы.

Ps у меня есть ответ, но общаться нет никакого желания.
+
avatar
0
Ps у меня есть ответ, но общаться нет никакого желания.
Ну, мне ответьте, если @AndyBig не хотите. Мне тоже интересно.
+
avatar
0
Вам всем очень протокол был интересен. Я его привёл. Читайте.
За остальными ответами идите на форум.
То, что я знаю, я там подчерпнул. И мой сенсор MYS работает от батарейки уже 2 года и ещё столько же проработает.
Но Вы и неуважаемый AndyBlog можете сделать свои, суперпрпвильные, которые проработают 50
+
avatar
+3
www.mysensors.org/download/serial_api_20#message-structure
Вы про этот протокол? Вас не смущает слово «API» в названии?
+
avatar
0
Нет, не смущает, тк я практик, и знаю, что это именно протокол. Почитайте.
Не готов с Вами тут больше общаться, сорри.
+
avatar
+3
Не готов с Вами тут больше общаться, сорри.
А, ну ок. Как говорилось во времена моей молодости, слив засчитан.
+
avatar
-2
Слив — это просить протокол, а когда его предоставили, придираться к тому, что в ЗАГОЛОВКЕ он называется api.
Изгалялись тут надо мной, минусовали, теперь сказать нечего. До свидания.
+
avatar
+3
Нет, слив — это показать API, когда просили протокол, а в ответ оскорбиться и заявить «вы все токсичные».
Мы, может, и токсичные, но не стоит оскорблять тех, кто писал документацию, подозрениями о том, что они неправильно назвали страницу: там все правильно, если написано API, значит на страничке API.
+
avatar
+1
Он и в описании в самой первой строчке описывается как «протокол между гейтом и контроллером». Но я уже понял — Вас и это тоже не смущает, для Вас главное, что там есть слово protocol :))
+
avatar
+1
О, знакомая история. На конкретный вопрос отвечать в духе «Сам дурак» :)))
Ответа, я так понимаю, не будет?
+
avatar
  • berk
  • 16 июня 2019, 22:17
+1
ну видимо у Вас все таки было время ознакомится, месяц прошел. Давайте может уже оставим в покое эту темы. будет статья о протоколе, будите там рубится все, если Вам это так нравится. Хотя зря это я :)))))))
+
avatar
+3
Ну так и где же взять такую табличку с пояснениями по всем полям? Зачем мне ссылка на исходники?
+
avatar
0
А вы ждёте, что я вам отвечу что-то другое, нежели @andybig?
+
avatar
  • Bald
  • 13 июня 2019, 05:54
+1
Надеюсь на серийных устройствах не а Ардуино пишут код
+
avatar
  • Xylene
  • 13 июня 2019, 09:11
+1
там еще хуже, на Phyton :D
+
avatar
+1
Надо было бы подвести итог по стоимости!
А так прикольно!
Купил бы готовый такой))
+
avatar
  • berk
  • 12 июня 2019, 22:06
-1
лучше сделайте, это очень очень простой датчик.
+
avatar
+2
Вот реально нет времени.
Купил себе участок и постройка дома отбирает все силы.
Коробка закончена, пару комнат уже жилых но это всего 20 кв.м. из 120.
+ участок.
Столько всего, что сидеть не вариант.
Паяльник сын чаще меня достает уже почти год.
Я все обзор на приемники хочу опубликовать но… каждую неделю, что напишу… А времени увы((
А так дома пару дуринок есть)))
+
avatar
0
Купил бы готовый такой))
У Вас уже есть куда его подключить? :)
+
avatar
+8
Соноф Базик + BME280 =





+
avatar
0
Интересно. А можно еще чуть подробнее — какая прошивка и что за софт?
+
avatar
+2
Ответы Вы найдёте здесь
+
avatar
  • vovand
  • 13 июня 2019, 04:19
0
А для простого человека, не программиста, ничего не понятно.
Вижу у
DrBOBAH
на телефоне картинку с параметрами. Очень понравилось и хочу себе такое.
Можно ли это реализовать без плясок с бубном с программированием, просто купив какую ни будь плату или блок на Али и по блютузу или вайфаю подключить к смартфону?
Соноф Базик + BME280 = это что?
+
avatar
0
Найдите друга с минимальными навыками паяния. Вы думаете я программист.
или обратитесь на 4ПДА к москвичам чтобы продали вам комплект. я бы продал но я из Питера.
+
avatar
0
купите Sonoff TH10 + датчик к нему
+
avatar
  • sav13
  • 13 июня 2019, 12:47
0
И будет работать на батарейке?
+
avatar
+1
а где в вопросе слово «батарейка»?
+
avatar
  • sav13
  • 13 июня 2019, 20:36
+1
Человек как альтернативу рассматриваемому батарейному сенсору температуры предлагает сонофф.
Вот я и спрашиваю, полноценная замена?
+
avatar
  • sav13
  • 13 июня 2019, 05:21
0
А попробуйте его от батарейки запитать, сколько проживет?
И габариты у сонофф не те слегка
+
avatar
0
У меня самодельный уличный датчик на ESP-12f + BME280 + TP5000 + 1850lifepo, время работы ~4 месяца (и цена смешная). Потом пару часов зарядил и по новой. Габариты — 20 см пп трубка.
Из плюсов — через домотикз и хоумбридж интегрирован в эппл хоумкит и отлично работает. Данный девайс можно в хоумкит?
+
avatar
  • sav13
  • 13 июня 2019, 09:06
0
Через шлюз Mysensors можно в домотикз, опенхаб, майсенсорс и прочие, а оттуда точно так же в хомекит
+
avatar
0
да, у меня так MySensors заведены в Homekit
+
avatar
  • sav13
  • 13 июня 2019, 05:24
+4
Пока все таки для Mysensors NRF24 + Atmega88/168/328 — самый дешевый вариант
NRF52 на базе STM32 явно избыточен для такого простого девайса.

p.s. Кстати, почему автор уже в третьем проекте так усиленно избегает публикацию схем?
Это что, жуткое ноухау?
Все китайцы на свои коммерческие продукты их давно публикуют
+
avatar
0
Боится, что утащат его разработку. Но как бы не очень то оно и нужно я думаю.
+
avatar
  • sav13
  • 13 июня 2019, 09:13
+3
Китайцы уже поняли, что это тупиковый путь
Sparkfun, Wemos, Sonoff (Itead) — все схемы публикуют в свободном доступе на свои устройства.
Те кто по схеме способен повторить такое устройство по схеме, никогда не купят у автора задорого, зато по косячкам подскажут много
+
avatar
0
nrf52 стоит 250 руб за «все в одном», а 328+nrf24 стоят порядка 200

Разница копеечная, а удобство налицо
+
avatar
  • sav13
  • 13 июня 2019, 12:51
0
Atmega328PB + NRF24L01 = 130-140 руб
Если взять Atmega168 (для данной задачи вполне достаточно), то еще дешевле
Ну и все неудобство это распаять TQFP32 корпус на плату
+
avatar
0
Я вот тоже не понял, чем nRF24 не устроил, который стоит доллар за килограмм модулей… Там не бог весть какие объемы передаются, вполне поместится.
+
avatar
0
Это когда меги стали самым дешевым вариантом. N76E003 0.35$, 18Кб :)).
Тут что-то вроде мало потребляющего stm8l051 за 0.5$ нужно. Даже на 16МГц в активном режиме 1.9мА.
+
avatar
  • sav13
  • 11 июля 2019, 20:16
0
Какя разница МК 1мА или 2 потребляет, если радиомодуль в режиме передачи, да еще с максимальной мощностью — 15-20мА
А в режиме сна они все на уровне саморазряда батареи кушают
+
avatar
0
Когда речь о батарейном питании длиной в месяцы или годы питание 10мА или 2мА имеет значение. Как бы там и потребление в режиме ожидания тоже может отличаться, нет?
Еще я там и цену привел, ведь речь в вашем сообщении была вроде как о:
самый дешевый вариант
? И даже еще один вариант МК привел, еще дешевле.
Но судя по вашему ответу и все что вы из моего ответа смогли вынести, не обращайте внимание, пользуйтесь «самым дешевым вариантом», сразу видно разбирающегося человека в характеристиках и ассортименте МК :)).
+
avatar
0
Какой шлюз для этого сенсора нужен?
+
avatar
+3
Свой, mysensor-ский :)
+
avatar
  • berk
  • 13 июня 2019, 09:49
0
+
avatar
0
Как уже писали, есть готовые аналоги, по практически такой же цене, а может даже немного дешевле. Автор молодец, что разбирается в этой теме, я бы посоветовал разработать датчика/сенсоры, которых нет на рынке. Или совмещать несколько датчиков в одном устройстве, например датчик движения и датчик температуры (влажности, давления), тогда бы устройство было бы более конкурентным и интересным по цене 15 долл аналоги на рынке в виде двух датчиков стоят 20-25 долл…
+
avatar
  • berk
  • 13 июня 2019, 10:26
+1


движение+sht20
+
avatar
0
это уже более интересное решение, можете дать ссылку на проект?
+
avatar
  • berk
  • 13 июня 2019, 10:46
+1
пока третий месяц на тестах, но он будет в доступе.
+
avatar
0
ок, буду ждать
+
avatar
0
Допустим я хочу вот этот mysensors.ru/build/esp8266_gateway/
но он же не примет с этого сенсора данные еще нужно как то прикрутить nRF52832
но как все это связать не написано может кто подскажет
+
avatar
  • berk
  • 13 июня 2019, 10:23
0
mysensors.ru/build/connect_radio/

сенсоры на нрф5, репитеры, гейт совместимы с сенсорами репитерами гейтом на нрф24l01
+
avatar
0
Какой у вас шлюз, как связать его с Мажордомо?
+
avatar
  • berk
  • 13 июня 2019, 12:11
0
ставьте модуль майсенсорс из маркета мажорика, собирайте гейт, самое простое это на есп8266+нрф24l01(лучше с PA)
+
avatar
0
лучше с PA что такое «РА»
+
avatar
  • berk
  • 13 июня 2019, 12:37
0
модуль nrf24l01 с усилителем, забейте в али nrf24l01 PA
+
avatar
0
Спасибо
+
avatar
0
есть одна интересная штука с датчиками температуры.
их надо ставить на плату таким образом, чтобы минимизировать влияние температуры платы

както примерно так:
g1tech.org/wp-content/uploads/2019/01/bme1.jpg
P.S. гдето помоему у silabs был application note на эту тему, но сходу не нашел
Еще есть фотка с измерителя температуры/влажности правлиьного
sales.wspanialysklep.org/storage/thumbnails/4/55160_Bezprzewodowy-termometr-cyfrowy-miernik-wilgotno%C5%9Bci-higrometr-termometr-ms6508.jpg
+
avatar
  • berk
  • 13 июня 2019, 14:20
0
всё верно так и надо делать если подразумевается постоянная работа на плате с сетевым питанием, где и мк и бп дают температурный шум, либо в приборах в которых важна точность. в батарейном комнатном деайсе который постоянно спит это не важно.