Радіомодулі Synapse: теорія і практика
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті
В даний час існує дуже багато різновидів радіомодулів. Кожний з них відрізняється своїми характеристиками , кожний тип модулів має свої переваги та недоліки. Типовий радіомодуль складається із схеми керування і комунікації та трансивера:
Hозглянемо радіомодулі фірми Synapse, їхні різновиди та будову.
Назва Synapse походить від латинської назви «synapsis», це біологічна структура призначена для передачі сигналів (нервових імпульсів) між нейронами або іншими клітинами організму.
Основні переваги та недоліки Synapse радіомодулів:
Переваги:
• Великий радіус дії;
• Можливість обслуговування без демонтажу пристроїв;
• Засоби розробки для Windows, Linux та MAC;
• Простий в програмуванні;
• Можливість використання шифрування AES-128.
Недоліки:
• Відсутній прямий доступ до периферії (робота тільки через API функції);
• Закритий вихідний код;
• Відносно висока ціна.
Характеристики
Як видно з таблиці модулі можуть використовуватись як мікроконтроллери, що дозволяє спростити проектовану систему і відмовитись від використання зовнішнього мікроконтроллера. Програмне забезпечення дозволя працювати з ADC, SPI, I2C, GPIO, PWM, UART.
Для демонстрації можливостей Synapse системи компанія пропонує evaluation kit EK2100:
Оновлення програмного забезпечення відбувається бездротово. Для цього до комп’ютера підключається один із модулів (через USB aбо RS-232)
Процес оновлення програмного забезпечення модуля:
Архітектура мережі Synapse
Кожний радіомодуль може працювати як ретранслятор, збільшуючи покриття мережі. В прикладі інформація передається з модуля 0 в модуль 2, модуль 1 виконує роль ретранслятора:
Broadcast
Multicust
Приклади застосування:
Керування виконавчими механізмами на віддаленому об’єкті
Як складова частина «Smart House»
Програмні рівні Synapse радіомодуля
User Applications — на вершині ієрархії виконується користувацький скріпт.
Snappy Virtual Machine — цей створює абстракцію між переферією та користувацьким скріптом;
Hardware Abstraction Layer (HAL) — рівень абстрації між переферією та програмою.
Програми пишуться на високорівневій мові Python. Віртуальна машина модуля перетворює текст скріпта в «байт код» який може бути автоматично завантажений в один або інший модуль (нод). Це дозволяє робити скріпти переносимими. Вітруальна машина забезпечує рівень абстракції програми від пристристрою, тобто програма буде виконуватись на різних мікропроцесорах без модифікації.
Середовище розробки
Для розробки використовується середовище Synapse Portal, яке дозволяє:
Конфіругувати модулі;
Завантажувати скріпти в модулі дистанційно;
Моніторити мережу.
Як працювати з Synapse Portal можна також подивитись в цьому відео :
Практична частина
Структура програми
#Оголошення глобальних змінних define SwLeft = 11 #GPIO_11 global LedCounter #Ініціалізація потрібної периферії модуля @setHook(HOOK_STARTUP) def Init (): setPinDir(1, True) #pin GPIO1 is output pins LED, for indication of work #Реалазіція функцій @setHook(HOOK_10MS) def ScanButtons(): global ButtonStateL if(readPin(SwLeft) == 0): ButtonStateL = 1 else: ButtonStateL = 0
@setHook() — функція яка викликається з певною періодичністю, в нашому випадку кожних 10mS(HOOK_10MS)
Програмування цих модулів дуже просте. На малюнку приклад де є 2 модулі, кнопка і світлодіод. Кнопка підключена до одного модуля, керує світлодіодом на іншому модулі. Скріпт на «Модулі 1» моніторить стан кнопки і якщо вона натиснута викликає віддалену функцію включення світлодіодна на іншому модулі.
Демонстраційний приклад
Для роботи використовуються дві плати з модулями. Живляться модулі від батарейок. Мигання світлодіодів означає що пристрої включені. До одного із них підключений п’єзодинамік. При натисканні кнопки , на іншому модулі генерується звук.
Для того щоб реалізувати такий функціонал достатньо наступних текстів програм.
LED1 = 1 LED2 = 2 SwBuzzer = 5 #GPIO_12 ModuleAdress = '\x04\x09\xEE' global LedCounter @setHook(HOOK_STARTUP) def Init (): setPinDir(LED1, True) #pin GPIO1 is output pins LED, for indication of work setPinDir(LED2, True) #pin GPIO1 is output pins LED, for indication of work setPinDir(SwBuzzer, False) # set Pin 5 as Input @setHook(HOOK_100MS) def StartBlink(): if (readPin(SwBuzzer) == 0): rpc(ModuleAdress, 'BuzzerOn', 0) writePin(LED1,True) else: rpc(ModuleAdress, 'BuzzerOff', 0) writePin(LED1,False) @setHook(HOOK_1S) def BlinkAll(): pulsePin(LED2,200,True)
LED1 = 1 LED2 = 2 Buzzer = 11 @setHook(HOOK_STARTUP) def Init (): setPinDir(LED1, True) #pin GPIO1 is output pins LED, for indication of work setPinDir(LED2, True) #pin GPIO1 is output pins LED, for indication of work setPinDir(Buzzer, True) #pin GPI11 is output pins LED @setHook(HOOK_1S) def blink(): pulsePin(LED2,400,True) def BuzzerOn(): writePin(Buzzer,True) writePin(LED1,True) def BuzzerOff(): writePin(Buzzer,False) writePin(LED1,False)
демонстрація роботи (відео):
Ціни на модулі на Digi-Key($):
RF100 — 40.15
RF200 — 42.11
RF300 — 33.84
SM200 — 24.72
SM300 — 38.96
SNAP Primer : forums.synapse-wireless.com/upload/SNAP Primer.pdf
SNAP Reference Manual : www.synapse-wireless.com/...nual-snap-os-45352fdc.pdf
38 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів