Шлюз

MySensors Sensebender Gateway — это компактная плата, совместимая с Arduino Zero, специально разработанная командой MySensors для использования в качестве полнофункционального высокопроизводительного шлюза 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&nbsp; - Blink fast on radio message recieved. In inclusion mode will blink fast only on presentation recieved
* - Green : TX&nbsp; - Blink fast on radio message transmitted. In inclusion mode will blink slowly
* - Red&nbsp;&nbsp; : ERR - Fast blink on error during transmission error or recieve crc error
* - Blue&nbsp; : 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&nbsp; 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&nbsp; // Error led pin
//#define MY_DEFAULT_RX_LED_PIN&nbsp; 6&nbsp; // Receive led pin
//#define MY_DEFAULT_TX_LED_PIN&nbsp; 5&nbsp; // 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()
{
&nbsp;&nbsp;&nbsp; // Setup locally attached sensors
}

void presentation()
{
&nbsp;&nbsp;&nbsp; // Present locally attached sensors
}

void loop()
{
&nbsp;&nbsp;&nbsp; // Send locally attached sensor data here
}


void preHwInit()
{

&nbsp;&nbsp;&nbsp; pinMode(MY_SWC1, INPUT_PULLUP);
&nbsp;&nbsp;&nbsp; pinMode(MY_SWC2, INPUT_PULLUP);
&nbsp;&nbsp;&nbsp; if (digitalRead(MY_SWC1) && digitalRead(MY_SWC2)) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;
&nbsp;&nbsp;&nbsp; }

&nbsp;&nbsp;&nbsp; uint8_t tests = 0;

&nbsp;&nbsp;&nbsp; for (int i=0; i< num_of_leds; i++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pinMode(leds[i], OUTPUT);
&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; uint8_t led_state = 0;
&nbsp;&nbsp;&nbsp; if (digitalRead(MY_SWC1)) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (!Serial) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(LED_BLUE, led_state);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; led_state ^= 0x01;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delay(500);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } // Wait for USB to be connected, before spewing out data.
&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; digitalWrite(LED_BLUE, LOW);
&nbsp;&nbsp;&nbsp; if (Serial) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println("Sensebender GateWay test routine");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print("Mysensors core version : ");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println(MYSENSORS_LIBRARY_VERSION);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print("GateWay sketch version : ");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println(SKETCH_VERSION);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println("----------------------------------");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println();
&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; if (testSha204()) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(LED_GREEN, HIGH);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tests++;
&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; if (testSDCard()) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(LED_YELLOW, HIGH);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tests++;
&nbsp;&nbsp;&nbsp; }

&nbsp;&nbsp;&nbsp; if (testEEProm()) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(LED_ORANGE, HIGH);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tests++;
&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; if (testAnalog()) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(LED_BLUE, HIGH);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tests++;
&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; if (tests == 4) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(1) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i=0; i<num_of_leds; i++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(leds[i], HIGH);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delay(200);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(leds[i], LOW);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; } else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (1) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(LED_RED, HIGH);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delay(200);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(LED_RED, LOW);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delay(200);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; }

}

bool testSha204()
{
&nbsp;&nbsp;&nbsp; uint8_t rx_buffer[SHA204_RSP_SIZE_MAX];
&nbsp;&nbsp;&nbsp; uint8_t ret_code;
&nbsp;&nbsp;&nbsp; if (Serial) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print("- > SHA204 ");
&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; atsha204_init(MY_SIGNING_ATSHA204_PIN);
&nbsp;&nbsp;&nbsp; ret_code = atsha204_wakeup(rx_buffer);

&nbsp;&nbsp;&nbsp; if (ret_code == SHA204_SUCCESS) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret_code = atsha204_getSerialNumber(rx_buffer);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ret_code != SHA204_SUCCESS) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Serial) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println(F("Failed to obtain device serial number. Response: "));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println(ret_code, HEX);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Serial) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print(F("Ok (serial : "));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i=0; i<9; i++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (rx_buffer[i] < 0x10) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print('0'); // Because Serial.print does not 0-pad HEX
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print(rx_buffer[i], HEX);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println(")");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; } else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Serial) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println(F("Failed to wakeup SHA204"));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; return false;
}

bool testSDCard()
{
&nbsp;&nbsp;&nbsp; if (Serial) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print("- > SD CARD ");
&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; if (!card.init(SPI_HALF_SPEED, MY_SDCARD_CS)) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Serial) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println("SD CARD did not initialize!");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; } else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Serial) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print("SD Card initialized correct! - ");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print("type detected : ");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch(card.type()) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case SD_CARD_TYPE_SD1:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println("SD1");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case SD_CARD_TYPE_SD2:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println("SD2");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case SD_CARD_TYPE_SDHC:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println("SDHC");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println("Unknown");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;
&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; return false;
}

bool testEEProm()
{
&nbsp;&nbsp;&nbsp; uint8_t eeprom_d1, eeprom_d2;
&nbsp;&nbsp;&nbsp; SerialUSB.print(" -> EEPROM ");
&nbsp;&nbsp;&nbsp; eeprom_d1 = hwReadConfig(EEPROM_VERIFICATION_ADDRESS);
&nbsp;&nbsp;&nbsp; delay(500);
&nbsp;&nbsp;&nbsp; eeprom_d1 = ~eeprom_d1; // invert the bits
&nbsp;&nbsp;&nbsp; hwWriteConfig(EEPROM_VERIFICATION_ADDRESS, eeprom_d1);
&nbsp;&nbsp;&nbsp; delay(500);
&nbsp;&nbsp;&nbsp; eeprom_d2 = hwReadConfig(EEPROM_VERIFICATION_ADDRESS);
&nbsp;&nbsp;&nbsp; if (eeprom_d1 == eeprom_d2) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SerialUSB.println("PASSED");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hwWriteConfig(EEPROM_VERIFICATION_ADDRESS, ~eeprom_d1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;
&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; SerialUSB.println("FAILED!");
&nbsp;&nbsp;&nbsp; return false;
}

bool testAnalog()
{
&nbsp;&nbsp;&nbsp; int bat_detect = analogRead(MY_BAT_DETECT);
&nbsp;&nbsp;&nbsp; Serial.print("-> analog : ");
&nbsp;&nbsp;&nbsp; Serial.print(bat_detect);
&nbsp;&nbsp;&nbsp; if (bat_detect < 400 || bat_detect > 650) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println(" Failed");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;
&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; Serial.println(" Passed");
&nbsp;&nbsp;&nbsp; return true;
}

Изображения

Загрузки

MysensorsGW.pdf
MysensorsGW.kicad_pcb
MysensorsGW.net
MysensorsGW.sch
CHANGES.txt
COPYRIGHT.txt
PRODUCT.txt
MysensorsGW-B.Cu.gbr
MysensorsGW-B.Mask.gbr
MysensorsGW-B.SilkS.gbr
MysensorsGW-Edge.Cuts.gbr
MysensorsGW-F.Cu.gbr
MysensorsGW.cmp
MysensorsGW-F.Mask.gbr
MysensorsGW-F.Paste.gbr
MysensorsGW.drl
MysensorsGW-F.SilkS.gbr
cern_ohl_v_1_2_howto.pdf
SBD_GW_BOTTOM_NRF24_nonPA.STL
SBD_GW_BOTTOM_RFM69_only.STL
SBD_GW_LID_NRF24_NonPA_no_leds_slot.STL
SBD_GW_LID_NRF24_NonPA_with_leds_slot.STL
SBD_GW_LID_RFM69_only_no_leds_slot.STL
SBD_GW_LID_RFM69_only_with_leds_slot.STL
Mini_logo_plate.STL
SBD_GW_BOTTOM_PA.STL
SBD_GW_BOTTOM_PA_NO_ETH.STL
SBD_GW_LID_PA.STL

Перевод lanket