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 как
1 2 |
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.
Пример:
1 2 |
pinMode(LED_BLUE, OUTPUT); digitalWrite(LED_BLUE, HIGH); |
Обратите внимание, что некоторые светодиоды используются в ядре mysensors.
Расширение
Вы можете использовать порт расширения MysX, чтобы добавить новые функциональные возможности вашего шлюза, такие как радиомодуль для дистанционного управления 433 МГц и т. д. разъём подробно описан здесь. Мы упростили использование коннектора MysX в ваших скетчах, добавив набор определений MYSX, вот перечень определений в arduino:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#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-устройству:
1 2 3 4 5 |
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-принтере, мы добавили их в список файлов ниже, выберите тот, который соответствует вашей конфигурации.
Пример скетча
Это скетч по умолчанию, поставляемый со шлюзом.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 |
/** * 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; } |
Изображения
Загрузки
Перевод lanket