
Комментарии 12
Чего с ним знакомиться, он уже старый. И давно можно сделать на nRF52840, например, со своими функциями.
Было бы интересно почитать про это.

Плат BLE много, но не только мне одному нравятся nRF52840 или nRF52832.
Они, кстати, могут быть вообще малюсенькими.
Вам понадобится Nordic SDK
В нем содержатся примеры на все случаи жизни, вместе с SRC, LD, Make файлами
ну, и прошивками радиомодуля в бинарном виде (они проприетарные и работают
на одном из двух ядер). Как для Central mode, так и для Peripheral.
Также скачиваете их утилиту nRF Connect для Android.
Там - хорошая диагностика всего-всего.
Потом можете свою программу для Android сделать.
Кроме того, есть проекты от AdaFruit для Arduino.
Для мигания светодиодом на плате nRF52840 из Андроид приложения
у меня вот такие основные файлы для Android Studio (это не ссылки, а названия)
BlinkyActivity.java, BlinkyApplication.java, ScannerActivity.java
Приложение можно получить размером аж 20 килобайт (APK модуль).
Нужно будет разбираться еще с кучей UIID для кучи разных устройств на все случаи жизни.
Так как в модуле ARM SoC, мне удобнее всего работать с привычной IDE (и для ARM, и для RISC-V).
Простейший пример компиляции и загрузки в RAM для мигания светодиодом - на видео:
https://youtu.be/xZlBHfQy6e4?si=p8XVCApLBFJnK2gY
Исходный код для случая запуска в памяти, для записи во flash нужно еще файл на ассемблере.
Текст:
#define PIN_0_07 7
//#define PIN_0_13 13
// Defined in "GPIO" for the nrf52 p.151
#define PBASE0 0x50000000
// 011 0000 00 10
#define PIN_CONFIG 0b01100000011 // DDD 7654 CC BA
// ++-------------------[1]: 1=disconnect input buffer, [0]: 1=output
// ++----------------- [3][2] pull up 00=no pull
// +++---------- [6][5][4] drive strength 011=H0H1
#define OUTSET ((volatile unsigned int) (PBASE0 + 0x508))
#define OUTCLR ((volatile unsigned int) (PBASE0 + 0x50C))
#define DIRSET ((volatile unsigned int) (PBASE0 + 0x518))
#define PIN_CNF_PTR ((volatile unsigned int)(PBASE0 + 0x700 + PIN_0_07 4)) // PIN_CNF[7] 0x71C P0_07
//#define PIN_CNF_PTR (((volatile unsigned int)(PBASE0 + 0x700 + PIN_0_13 4))) // PIN_CNF[13] 0x734 P0_13
//====================================================================
void delay ( unsigned int cycles );
//====================================================================
//asm(".word 0x20001000");
//asm(".word main");
int main()
{
DIRSET = (1 << PIN_0_07);
PIN_CNF_PTR = PIN_CONFIG; //configure as an OUTPUT; // p.155
while(1)
{
OUTSET = (1 << PIN_0_07);
delay(1000000);
OUTCLR = (1 << PIN_0_07);
delay(1000000);
}
}
//
void delay ( unsigned int cycles )
{
unsigned int c=cycles;
while ( c )
{
c--; asm( "nop" );
}
}
Двоичный код (правда, маленький?)
0000000000: 4F F0 A0 42 80 21 40 F2 │ 03 33 C2 F8 18 15 C2 F8 Oð B€!@ò♥3Âø↑§Âø
0000000010: 1C 37 06 4B C2 F8 08 15 │ 00 BF 01 3B FC D1 03 4B ∟7♠KÂø◘§ ¿☺;üÑ♥K
0000000020: C2 F8 0C 15 00 BF 01 3B │ FC D1 F2 E7 40 42 0F 00 Âø♀§ ¿☺;üÑòç@B☼
0000000030: 18 B1 01 38 00 BF 00 28 │ FB D1 70 47 ↑±☺8 ¿ (ûÑpG
И так далее...
Nordic SDK уже в прошлом. Зефир нынче.
Ну или Ардуино для 52840 вполне неплохо работает.
Плат немало, работал также с Intel Curio Core, Nano и других вариантах. У Intel всё чёткн работает, ну и Zephyr тогда ещё был. И нейроны в чипе встроенные. А у Nordic 52832 плата была, японский вариант размером что-то около 10х7х3 мм, вот на ней надо было проект делать. И вроде, они задают стандарты.
Ардуино я люблю, но непрофессиональным считается...
Ну, NRF Connect SDK, на базе Zephyr - это все же продолжение развития NRF5 SDK.
Но если вопрос как в статье, arduino + отдельный BLE контроллер, то всяко лучше взять NRF52840 и ардуинить на нем. Ну или же esp32 (C6/H2 - если нужно низкое потребление).
А CC254x - в 2026 году есть смысл применять, если на складе заваялось несколько десятков тысяч.
Плюс, сейчас уже полно всякого разного рода китайцев, например теже TSLR - которые уделывают нордик по потреблению.
от этого маленького кода до ble еще много килобайт. для начала задержки на таймере, спящий режим...
Крайне устаревшая информация. И использование как "модуля для ардуины" - также мало полезно, как использовать есп8266 и управлять АТ-командами.
Для cc254x можно использовать их SDK и писать софт прямо на нем. Но там очень печально со структурой, так что ваш проект будет тесно переплетен с кодом из SDK.
И поскольку там одно ядро 8051, приходится строго соблюдать тайминги для своего кода, чтоб BLE соединение не разрывалось.
И хоть там есть какое-то подобие задач, это все равно не RTOS.
Ну и самое главное, проброс uart через BLE - это костыль, который противоречит смыслу технологии, хотя и довольно часто используется.
ну тогда уж про esp32 вспомнить надо. пусть даже с arduino/platformio (с той же arduino под капотом). мелкие платки и технологии на котором сделано немало реальных рабочих и популярных продуктов
Пока не получается вспоминать. Esp32-h2 при всех оптимизациях на зигби не может сравниться с конкурентами.
С BLE та же беда - как apple watch vs Amazfit bip
Кто там минусы расставляет?
Лично пробовал esp32-h2, в качестве ZigBee sleepy device. Потребление в режиме сна порядка 100мка без какой либо полезной нагрузки. Думаю, если сделать BLE peripheral из него - выйдет +- также.
На nrf52 подобное обойдется в ~10-15мка.
Указанный в статье cc2541 имеет похожие цифры (без лишней обвязки в виде ЛДО)
TSLR в виде готового устройства, может потреблять в среднем 15мка с полезной нагрузкой в виде датчика SHT3 и LCD экрана:

Расскажете, как такого добиться при помощи есп32?
Знакомство с BLE. Модуль HM-10