MySensors Sensebender Gateway — это компактная плата, совместимая с Arduino Zero, специально разработанная командой MySensors для использования в качестве полнофункционального высокопроизводительного шлюза MySensors.

Шлюз MySensors — это первое устройство, которое вам понадобится для вашей сети MySensors, и оно разработано с нуля для новичков и экспертов. Шлюз поддерживает радиомодули nRF24L01 + или RFM69 и может взаимодействовать с широким спектром контроллеров HA через USB или Ethernet.
Если вы хотите быстро поднять и пользоваться сетью MySensors с безотказным и гибким шлюзом, разработанным и поддерживаемым командой MySensors, то это шлюз для вас.
Особенности
Высокопроизводительные микроконтроллеры
В его основе шлюз оснащен высокопроизводительным микроконтроллером MCAM Atmel SAMD21, работающим на частоте 48 МГц, предлагающим множество возможностей для расширенных функций шлюза, по мере расширения экосистемы MySensor. Линейка продуктов SAMD21 MCU — это предложение ARM Cortex от Atmel, оснащённое 32 Кбайт оперативной памяти и 256 Кб для флэш-памяти, обеспечивающее достаточное рабочее и постоянное хранилище для текущих и будущих задач шлюза.
Поддержка широкого ассортимента контроллеров домашней автоматики
Шлюз совместим с более чем 20 наиболее распространенными контроллерами домашней автоматизации на рынке с использованием USB или Ethernet. Буквально все запрошенные контроллеры автоматизации в настоящее время поддерживаются, и список продолжает расширяться. Не нашли свой вариант адаптера, и мы здесь, чтобы помочь вам.
Безопасная радиосеть интернет вещей (IoT)
Шлюз включает в себя место утановки / колодки для двух очень распространенных радиомодулей, поддерживаемых MySensors; Радио Nordic nRF24L01 + или радио Hope RF RFM69HCW, предлагающее пользователям различные варианты их локализации / строительства дома и проектов IoT. Каждый шлюз включает в себя чип ATSHA204 CryptoAuthentication (криптоаутификацией), который может использоваться для подписи сообщений на аппаратной основе для безопасной радиосвязи после персонализации.
Расширяемость
Шлюз также включает в себя разъем MYSX 2.6, который имеет большое количество выводов IO для модулей DIY, которые могут использоваться для добавления датчиков и исполнительных устройств к шлюзу или для использования платы шлюза в качестве компактного высокопроизводительного узла для более сложных проектов IoT и приложений. Кроме того, шлюз включает устройство считывания карт micro-sd для приложений IoT, для дополнительного локального энергонезависимого хранения (например, файлы конфигурации, хранение показаний датчиков для последующего анализа и т. Д.).
Технические характеристики
- Размер платы 5х5см
- Atmel ATSAMD21 (ядро Arm cortex m0 + cpu) с
- 256 КБ энергонезависимой флеш памятью
- ОЗУ 32 КБ
- 48Mhz частота процессора
- Модуль RTC (реального времени
- Устройство чтения карт Micro SD
- Разъем для модуля nRF24L01 + (модуль не входит в комплект поставки)
- Пятоки для модуля RFM69 (модуль не входит в комплект поставки)
- Гнездо для Ethernet-модуля W5100 (модуль не входит в комплект поставки)
- Встроенный USB-порт
- ATSHA204A для криптоподписи
- Встроенный i2c-eeprom для обновления прошивки по воздуху
- 5 светодиодов (красный, зеленый, желтый, синий и оранжевый)
- MYSx 2.6 с
- UART
- SPI
- Выделенные прерывания
- Шина I2C (совместно с бортовым EEPROM)
Настройка и использование
Вам нужно установить свое радио, NRF24L01 +, либо RFM69 (H) W, которые вы можете найти в нашем магазине в разделе радио. Также, если вы хотите использовать его в качестве шлюза ethernet, вам необходимо приобрести W5100 ethernet Модулю, выбор для минимального старта.
Драйверы под Windows
Если для вашей версии Windows вам требуется установить драйвер, перед использованием нового USB-гаджета (все, что старше Windows 10), вы можете использовать этот файл mysensors-samd.inf. Он также поддерживает плату версии 1.0.4 (см. Другие конфигурации ниже для инструкций по установке)
Скетч по умолчанию
Заводской эскиз по умолчанию является шлюзом последовательного порта, использующим радио NRF24L01 и без подписи. Если вы хотите использовать его в этой конфигурации, то просто добавьте в заголове скетчу блок для модуля NRF24L01, подключите радиомодуль и USB кабель к вашему компьютеру. Скетч по умолчанию можно найти в коллекции примеров Mysensors, как «SensebenderGatewaySerial».
Другие конфигурации
Если вы хотите использовать любую другую конфигурацию, например RFM69 (H) W radio, ethernet или аппаратную подпись с ATSHA204, вам необходимо перепрограммировать плату с помощью собственной прошивки. Это легко сделать с помощью программного обеспечения Arduino, где вы можете добавить поддержку ваших плат, которые соответствуют плате шлюза. Для получения дополнительной информации о том, как добавить эти определения плат, вы должны пойти сюда, кроме того, вам необходимо установить файлы плат Arduino SAMD, имейте в виду, что файлы плат Mysensors 1.0.4 совместимы только с Arduino SAMD 1.6.11. После установки определений платы выберите шлюз Sensebender Gateway в качестве целевой платформы, иногда будет проблема с выбором платы в Arduino IDE.
Имейте в виду, что если вы хотите использовать Ethernet-модуль, то при пайке его нужно максимально приподнять над платой, так как разъем ethernet c Ethernet-модуля немного выше, чем контакты на плате.

Скетч GatewayW5100 под MySensors из примеров в IDE Arduino совместим с данным шлюзом и будут запущены без проблем.
Батарея резервного питания
Аппаратная часть шлюза поддерживает подключение батареи резервного питания, которая может быть подключена к двум клеймам рядом со слотом SD-карт. Максимальное напряжение батареи должно быть не более 3.6В, подача напряжения выше может повредить вашу плату! В настоящее время у нас нет примера скетча, чтобы показать вам, если вы хотите добавить батарею, но есть пара выводов, которые можно использовать для проверки наличия батареи и / или внешнего источника, MY_BATT_DETECT и MY_SUPPLY_DETECT, оба Являются аналоговыми входами и могут использоваться с функцией analogRead () в Arduino как
int battVolt = analogRead(MY_BAT_DETECT); int supplyVolt = analogRead(MY_SUPPLY_DETECT);
Это может использоваться, чтобы определить должно ли программное обеспечение переключать шлюз в специальные режимы пониженного энергопотребления если внешнее питание нет, и т. д.
Светодиоды
Светодиоды программируются с помощью набора определений, который мы добавили в пакет поддержки плат:
- LED_1 / LED_BLUE
- LED_2 / LED_RED
- LED_3 / LED_GREEN
- LED_4 / LED_YELLOW
- LED_5 / LED_ORANGE
Допускается оба определения, к примеру, как LED_1 так и LED_BLUE.
Пример:
pinMode(LED_BLUE, OUTPUT);
digitalWrite(LED_BLUE, HIGH);
Обратите внимание, что некоторые светодиоды используются в ядре mysensors.
Расширение
Вы можете использовать порт расширения MysX, чтобы добавить новые функциональные возможности вашего шлюза, такие как радиомодуль для дистанционного управления 433 МГц и т. д. разъём подробно описан здесь. Мы упростили использование коннектора MysX в ваших скетчах, добавив набор определений MYSX, вот перечень определений в arduino:
#define MYSX_D1_DFM (00ul) #define MYSX_D2_DTM (01ul) #define MYSX_D3_INT (02ul) #define MYSX_D4_INT (03ul) #define MYSX_D5_PWM (04ul) #define MYSX_D6_PWM (05ul) #define MYSX_D7_SCL (06ul) #define MYSX_D8_SDA (07ul) #define MYSX_D9_A3 (08ul) #define MYSX_D10_A4 (09ul) #define MYSX_D11_MOSI (10ul) #define MYSX_D12_MISO (11ul) #define MYSX_D13_SCK (12ul) #define MYSX_D14_CS (13ul) #define MYSX_A1 (14ul) #define MYSX_A2 (15ul) #define MYSX_SPI SPI2
Чтобы использовать последовательный порт в разъёме mysx, вы должны использовать Serial1 в своих скетчах, поскольку серийный порт по умолчанию подключен к последовательному USB-устройству:
Serial1.begin(9600);
Serial1.println("this is a test using serial port in MysX connector");
Serial.begin(9600); // Dummy baudrate, as it's not used by the usb driver
Serial.println("this is a test using the usb serial device");
Самодиагностика
Скетч по умолчанию включает в себя простую функцию самодиагностики, которая проверяет встроенные периферийные устройства, чтобы вызвать её, вам нужно замкнуть SWC1 (контакты на нижней стороне платы) при включении питания. Это запустит самодиагностику в автономном режиме, отображение тестирования будет сопровождаться мигающими светодиодами. Если у вас замкнут SWC2, плата будет ждать, пока программа последовательного терминала откроет соединение с USB-устройством, а затем распечатает отчет о самодиагностике на терминале.
Коробка
На форуме есть несколько моделей, которые можно распечатать на 3D-принтере, мы добавили их в список файлов ниже, выберите тот, который соответствует вашей конфигурации.
Пример скетча
Это скетч по умолчанию, поставляемый со шлюзом.
/**
* The MySensors Arduino library handles the wireless radio link and protocol
* between your home built sensors/actuators and HA controller of choice.
* The sensors forms a self healing radio network with optional repeaters. Each
* repeater and gateway builds a routing tables in EEPROM which keeps track of the
* network topology allowing messages to be routed to nodes.
*
* Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
* Copyright (C) 2013-2015 Sensnology AB
* Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
*
* Documentation: http://www.mysensors.org
* Support Forum: http://forum.mysensors.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
*
*******************************
*
* DESCRIPTION
* The ArduinoGateway prints data received from sensors on the serial link.
* The gateway accepts input on seral which will be sent out on radio network.
*
* This GW code is designed for Sensebender GateWay / (Arduino Zero variant)
*
* Wire connections (OPTIONAL):
* - Inclusion button should be connected to SW2
*
* LEDs on board (default assignments):
* - Orange: USB RX/TX - Blink when receiving / transmitting on USB CDC device
* - Yellow: RX - Blink fast on radio message recieved. In inclusion mode will blink fast only on presentation recieved
* - Green : TX - Blink fast on radio message transmitted. In inclusion mode will blink slowly
* - Red : ERR - Fast blink on error during transmission error or recieve crc error
* - Blue : free - (use with LED_BLUE macro)
*
*/
#define SKETCH_VERSION "0.2"
// Enable debug prints to serial monitor
#define MY_DEBUG
// Enable and select radio type attached
#define MY_RADIO_NRF24
//#define MY_RADIO_RFM69
// Set LOW transmit power level as default, if you have an amplified NRF-module and
// power your radio separately with a good regulator you can turn up PA level.
#define MY_RF24_PA_LEVEL RF24_PA_HIGH
// Enable serial gateway
#define MY_GATEWAY_SERIAL
// Define a lower baud rate for Arduino's running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender)
#if F_CPU == 8000000L
#define MY_BAUD_RATE 38400
#endif
// Enable inclusion mode
#define MY_INCLUSION_MODE_FEATURE
// Enable Inclusion mode button on gateway
#define MY_INCLUSION_BUTTON_FEATURE
// Inverses behavior of inclusion button (if using external pullup)
//#define MY_INCLUSION_BUTTON_EXTERNAL_PULLUP
// Set inclusion mode duration (in seconds)
#define MY_INCLUSION_MODE_DURATION 60
// Digital pin used for inclusion mode button
//#define MY_INCLUSION_MODE_BUTTON_PIN 3
// Set blinking period
#define MY_DEFAULT_LED_BLINK_PERIOD 300
// Inverses the behavior of leds
//#define MY_WITH_LEDS_BLINKING_INVERSE
// Flash leds on rx/tx/err
// Uncomment to override default HW configurations
//#define MY_DEFAULT_ERR_LED_PIN 4 // Error led pin
//#define MY_DEFAULT_RX_LED_PIN 6 // Receive led pin
//#define MY_DEFAULT_TX_LED_PIN 5 // the PCB, on board LED
#include <MySensors.h>
#include <SD.h>
#include <drivers/ATSHA204/ATSHA204.cpp>
Sd2Card card;
#define EEPROM_VERIFICATION_ADDRESS 0x01
static uint8_t num_of_leds = 5;
static uint8_t leds[] = {LED_BLUE, LED_RED, LED_GREEN, LED_YELLOW, LED_ORANGE};
void setup()
{
// Setup locally attached sensors
}
void presentation()
{
// Present locally attached sensors
}
void loop()
{
// Send locally attached sensor data here
}
void preHwInit()
{
pinMode(MY_SWC1, INPUT_PULLUP);
pinMode(MY_SWC2, INPUT_PULLUP);
if (digitalRead(MY_SWC1) && digitalRead(MY_SWC2)) {
return;
}
uint8_t tests = 0;
for (int i=0; i< num_of_leds; i++) {
pinMode(leds[i], OUTPUT);
}
uint8_t led_state = 0;
if (digitalRead(MY_SWC1)) {
while (!Serial) {
digitalWrite(LED_BLUE, led_state);
led_state ^= 0x01;
delay(500);
} // Wait for USB to be connected, before spewing out data.
}
digitalWrite(LED_BLUE, LOW);
if (Serial) {
Serial.println("Sensebender GateWay test routine");
Serial.print("Mysensors core version : ");
Serial.println(MYSENSORS_LIBRARY_VERSION);
Serial.print("GateWay sketch version : ");
Serial.println(SKETCH_VERSION);
Serial.println("----------------------------------");
Serial.println();
}
if (testSha204()) {
digitalWrite(LED_GREEN, HIGH);
tests++;
}
if (testSDCard()) {
digitalWrite(LED_YELLOW, HIGH);
tests++;
}
if (testEEProm()) {
digitalWrite(LED_ORANGE, HIGH);
tests++;
}
if (testAnalog()) {
digitalWrite(LED_BLUE, HIGH);
tests++;
}
if (tests == 4) {
while(1) {
for (int i=0; i<num_of_leds; i++) {
digitalWrite(leds[i], HIGH);
delay(200);
digitalWrite(leds[i], LOW);
}
}
} else {
while (1) {
digitalWrite(LED_RED, HIGH);
delay(200);
digitalWrite(LED_RED, LOW);
delay(200);
}
}
}
bool testSha204()
{
uint8_t rx_buffer[SHA204_RSP_SIZE_MAX];
uint8_t ret_code;
if (Serial) {
Serial.print("- > SHA204 ");
}
atsha204_init(MY_SIGNING_ATSHA204_PIN);
ret_code = atsha204_wakeup(rx_buffer);
if (ret_code == SHA204_SUCCESS) {
ret_code = atsha204_getSerialNumber(rx_buffer);
if (ret_code != SHA204_SUCCESS) {
if (Serial) {
Serial.println(F("Failed to obtain device serial number. Response: "));
}
Serial.println(ret_code, HEX);
} else {
if (Serial) {
Serial.print(F("Ok (serial : "));
for (int i=0; i<9; i++) {
if (rx_buffer[i] < 0x10) {
Serial.print('0'); // Because Serial.print does not 0-pad HEX
}
Serial.print(rx_buffer[i], HEX);
}
Serial.println(")");
}
return true;
}
} else {
if (Serial) {
Serial.println(F("Failed to wakeup SHA204"));
}
}
return false;
}
bool testSDCard()
{
if (Serial) {
Serial.print("- > SD CARD ");
}
if (!card.init(SPI_HALF_SPEED, MY_SDCARD_CS)) {
if (Serial) {
Serial.println("SD CARD did not initialize!");
}
} else {
if (Serial) {
Serial.print("SD Card initialized correct! - ");
Serial.print("type detected : ");
switch(card.type()) {
case SD_CARD_TYPE_SD1:
Serial.println("SD1");
break;
case SD_CARD_TYPE_SD2:
Serial.println("SD2");
break;
case SD_CARD_TYPE_SDHC:
Serial.println("SDHC");
break;
default:
Serial.println("Unknown");
}
}
return true;
}
return false;
}
bool testEEProm()
{
uint8_t eeprom_d1, eeprom_d2;
SerialUSB.print(" -> EEPROM ");
eeprom_d1 = hwReadConfig(EEPROM_VERIFICATION_ADDRESS);
delay(500);
eeprom_d1 = ~eeprom_d1; // invert the bits
hwWriteConfig(EEPROM_VERIFICATION_ADDRESS, eeprom_d1);
delay(500);
eeprom_d2 = hwReadConfig(EEPROM_VERIFICATION_ADDRESS);
if (eeprom_d1 == eeprom_d2) {
SerialUSB.println("PASSED");
hwWriteConfig(EEPROM_VERIFICATION_ADDRESS, ~eeprom_d1);
return true;
}
SerialUSB.println("FAILED!");
return false;
}
bool testAnalog()
{
int bat_detect = analogRead(MY_BAT_DETECT);
Serial.print("-> analog : ");
Serial.print(bat_detect);
if (bat_detect < 400 || bat_detect > 650) {
Serial.println(" Failed");
return false;
}
Serial.println(" Passed");
return true;
}
Изображения
- Шлюз для сети MySensors
Загрузки
Перевод lanket












