• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

BLE модуль JDY-10 на чипе TLSR8266

К вашей Arduino это отношения не имеет - там вопросов об экономии питания и прочих не стоит и не обрабатывается.
ок фиксед.

По этому и другим причинам на сегодня для BLE/MESH/ZigBee лучше доплатить 30 руб и взять TB-03F/04 модуль c TLSR8251.
Доплатил с месяц тому назад, чипа до сих пор нет. На весь алиэкспресс нашел только одного продавца. JDY-10 же там как грязи.
 

Alexander

Member
Тут сложно сказать, в принципе-то да, через USB-COM и у меня подключено. Это надо смотреть вашу схему - почему виснет.
Скорее всего у него RTS к RST подключен. Как только он запускает терминал, reset глухо садится на землю и модуль перестаёт работать.
Нужно оставить 3 проводка: GND, RX, TX.
 
Скорее всего у него RTS к RST подключен.
Совершенно верно, но как я понял использование rts можно отключить в терминалке, поэтому у меня сейчас и работает
1619246137244.png
TLSR8253 (нет выводов USB)
Ага о ней и речь. всего два продавца в наличии. У одного из них я и заказал полтора месяца тому назад. пока жду. Заказал и у другого с стандартной доставкой.
термометров 4 штуки подкупил, хорошая штука, уже дома лежат. наличие корпуса и дисплея вяляется одновременно и плюсом и минусом в зависимости от задач.
 
Что за термометры?
Вот эти.

А вот по ним ветка

 

pvvx

Активный участник сообщества
Там слишком завышенный ценник - у того-же продавана есть и дешевле...
термометров 4 штуки подкупил, хорошая штука, уже дома лежат. наличие корпуса и дисплея вяляется одновременно и плюсом и минусом в зависимости от задач.
Зато их проще купить. Они уже и в местных магазинах есть по ценам не превышающих алишные. И это интересно, т.к. цена при покупке одного датчика ниже чем на али. Но малым оптом с али пока всё равно дешевле - от 4-х вроде 240 руб и далее меньше, если поискать...
 
OTA c UBIA.
Надо сменить в SDK в "tl_check_fw.sh" на "tl_check_fw2.exe".
Записать "jdy_10_ota_72000.bin" в чип.
Не выходит что-то у меня каменный цветок.
Использую TlsrComProg.py и готовый файл 8266_jdy_10.bin из папки bin
Код:
D:\Project.Arduino\jdy-10\Ubia\bin>C:\Users\German\AppData\Local\Programs\Python\Python39\python.exe TlsrComProg.py -p COM14 -t 5000 we 0 8266_jdy_10.bin
================================================
TLSR826x Floader version 01.03.20
------------------------------------------------
Open COM14, 230400 baud...
Reset module (RTS low)...
Activate (5000 ms)...
Connection...
Load <floader.bin> to 0x8000...
Bin bytes writen: 1880
CPU go Start...
------------------------------------------------
ChipID: 0x5325 (TLSR8266), Floader ver: 0.2
Flash JEDEC ID: 514013, Size: 512 kbytes
------------------------------------------------
Inputfile: 8266_jdy_10.bin
Write Flash data 0x00000000 to 0x0000ab04...
------------------------------------------------
Done!

D:\Project.Arduino\jdy-10\Ubia\bin>C:\Users\German\AppData\Local\Programs\Python\Python39\python.exe TlsrComProg.py -p COM14 -t 5000 we 0x72000 jdy_10_ota_72000.bin
================================================
TLSR826x Floader version 01.03.20
------------------------------------------------
Open COM14, 230400 baud...
Reset module (RTS low)...
Activate (5000 ms)...
Connection...
Load <floader.bin> to 0x8000...
Bin bytes writen: 1880
CPU go Start...
------------------------------------------------
ChipID: 0x5325 (TLSR8266), Floader ver: 0.2
Flash JEDEC ID: 514013, Size: 512 kbytes
------------------------------------------------
Inputfile: jdy_10_ota_72000.bin
Write Flash data 0x00072000 to 0x00072494...
------------------------------------------------
Done!

теперь запускаю telinkOta.html и пытаюсь прошить тот же готовый бинарник 8266_jdy_10.bin еще раз:

Код:
13:16:37: Searching for devices
13:16:41: Connecting to: tBLETST
13:16:45: Connected.
13:16:52: Disconnected.
13:16:53: File was selected, size: 43780 bytes
13:16:53: Count: 2737
13:16:56: Start DFU
13:16:57: Update error: some error while sending char data
 
Попробовал зашить по описанному выше алгоритму свой мини-проект. Ничего не получилось.

13:04:21: Connecting to: tBLETST
13:04:23: NotFoundError: No Services matching UUID 00010203-0405-0607-0809-0a0b0c0d1912 found in Device.

Как я понимаю надо в код еще чего то добавить?
 
Покурил исходники UBIA

1) Дописал в ble_init вызовы

bls_ota_clearNewFwDataArea();
bls_ota_registerStartCmdCb(entry_ota_mode);
bls_ota_registerResultIndicateCb(show_ota_result);

2) entry_ota_mode и show_ota_result сделал с пустым телом, как я понял вы там как раз тайминги настраиваете и отключаете sleep, чего в моей "ардуине" не нужно (с)
3) В перечисление ATT HANDLER define в ble.h добавил

OTA_PS_H, //UUID: 2800, VALUE: telink ota service uuid
OTA_CMD_OUT_CD_H, //UUID: 2803, VALUE: Prop: read | write_without_rsp
OTA_CMD_OUT_DP_H, //UUID: telink ota uuid, VALUE: otaData
OTA_CMD_OUT_DESC_H, //UUID: 2901, VALUE: otaName

Все компилируется без ошибок но по прежнему не работает. :(

No Services matching UUID 00010203-0405-0607-0809-0a0b0c0d1912 found in Device.
 

pvvx

Активный участник сообщества
2) entry_ota_mode и show_ota_result сделал с пустым телом, как я понял вы там как раз тайминги настраиваете и отключаете sleep, чего в моей "ардуине" не нужно (с)
В entry_ota_mode() yстанавливается таймер OTA, добавить pre_otaWrite(), атрибуты, ...
C:
#if (OTA_SERVICE_ENABLE)
#undef TELINK_OTA_UUID_SERVICE
#define TELINK_OTA_UUID_SERVICE               0x12,0x19,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00
// OTA attribute values
static const u8 my_OtaCharVal[19] = {
    CHAR_PROP_READ | CHAR_PROP_WRITE_WITHOUT_RSP,
    U16_LO(OTA_CMD_OUT_DP_H), U16_HI(OTA_CMD_OUT_DP_H),
    TELINK_SPP_DATA_OTA
};
const u8 my_OtaServiceUUID[16]    = {TELINK_OTA_UUID_SERVICE};
const u8 my_OtaUUID[16]            = {TELINK_SPP_DATA_OTA};
const u8 my_OtaName[] = {'O', 'T', 'A'};
u8    my_OtaData         = 0x00;

extern u32 blt_ota_start_tick;
int pre_otaWrite(void * p) {
    blt_ota_start_tick = clock_time() | 1;
    return otaWrite(p);
}
void  __attribute__((weak)) show_ota_result(int result) {
}
void  __attribute__((weak)) entry_ota_mode(void) {
    bls_ota_setTimeout(100 * 1000000); // set OTA timeout  100 S
}
#endif // #if (OTA_SERVICE_ENABLE)
#if    (BATT_SERVICE_ENABLE)
//////////////////////// Battery /////////////////////////////////////////////////
//// Battery attribute values
static const u8 my_batCharVal[5] = {
    CHAR_PROP_READ | CHAR_PROP_NOTIFY,
    U16_LO(BATT_LEVEL_INPUT_DP_H), U16_HI(BATT_LEVEL_INPUT_DP_H),
    U16_LO(CHARACTERISTIC_UUID_BATTERY_LEVEL), U16_HI(CHARACTERISTIC_UUID_BATTERY_LEVEL)
};
const u16 my_batServiceUUID        = SERVICE_UUID_BATTERY;
const u16 my_batCharUUID           = CHARACTERISTIC_UUID_BATTERY_LEVEL;
//static
u16 batteryValueInCCC;
u8 my_batVal; //                         = {99};
#endif // #if    (BATT_SERVICE_ENABLE)

const attribute_t my_Attributes[] = {
    {ATT_END_H - 1, 0,0,0,0,0},    // total num of attribute
    ...
#if    (BATT_SERVICE_ENABLE)
    ////////////////////////////////////// Battery Service /////////////////////////////////////////////////////
    {4,ATT_PERMISSIONS_READ,2,2,(u8*)(&my_primaryServiceUUID),     (u8*)(&my_batServiceUUID), 0},
    {0,ATT_PERMISSIONS_READ,2,sizeof(my_batCharVal),(u8*)(&my_characterUUID), (u8*)(my_batCharVal), 0},                //prop
    {0,ATT_PERMISSIONS_READ,2,sizeof(my_batVal),(u8*)(&my_batCharUUID), (u8*)(&my_batVal), 0},    //value
    {0,ATT_PERMISSIONS_RDWR,2,sizeof(batteryValueInCCC),(u8*)(&clientCharacterCfgUUID), (u8*)(&batteryValueInCCC), 0},    //value
#endif
#if (OTA_SERVICE_ENABLE)
    ////////////////////////////////////// OTA Service /////////////////////////////////////////////////////
    {4,ATT_PERMISSIONS_READ, 2,16,(u8*)(&my_primaryServiceUUID), (u8*)(&my_OtaServiceUUID), 0},
    {0,ATT_PERMISSIONS_READ, 2,sizeof(my_OtaCharVal),(u8*)(&my_characterUUID), (u8*)(my_OtaCharVal), 0},                //prop
    {0,ATT_PERMISSIONS_RDWR,16,sizeof(my_OtaData),(u8*)(&my_OtaUUID),    (&my_OtaData), &pre_otaWrite, &otaRead},            //value
    {0,ATT_PERMISSIONS_READ, 2,sizeof(my_OtaName),(u8*)(&userdesc_UUID), (u8*)(my_OtaName), 0},
#endif
};

void ble_init(void) {
    ...
#if (OTA_SERVICE_ENABLE)
    // OTA init
    bls_ota_clearNewFwDataArea(); //must
    bls_ota_registerStartCmdCb(entry_ota_mode);
    bls_ota_registerResultIndicateCb(show_ota_result);
#endif
    ...
}
В *.h
C:
typedef enum
{
    ATT_H_START = 0,
   ...
#if    (BATT_SERVICE_ENABLE)
    //// battery service ////
    /**********************************************************************************************/
    BATT_PS_H,                                 //UUID: 2800,     VALUE: uuid 180f
    BATT_LEVEL_INPUT_CD_H,                    //UUID: 2803,     VALUE:              Prop: Read | Notify
    BATT_LEVEL_INPUT_DP_H,                    //UUID: 2A19     VALUE: batVal
    BATT_LEVEL_INPUT_CCB_H,                    //UUID: 2902,     VALUE: batValCCC
#endif
#if (OTA_SERVICE_ENABLE)
    //// Ota ////
    /**********************************************************************************************/
    OTA_PS_H,                                 //UUID: 2800,     VALUE: telink ota service uuid
    OTA_CMD_OUT_CD_H,                        //UUID: 2803,     VALUE:              Prop: read | write_without_rsp
    OTA_CMD_OUT_DP_H,                        //UUID: telink ota uuid,  VALUE: otaData
    OTA_CMD_OUT_DESC_H,                        //UUID: 2901,     VALUE: otaName
#endif

    ATT_END_H,
}ATT_HANDLE;
 

pvvx

Активный участник сообщества
UBIA теперь имеет дополнительные floaders.
OTA и USB или UART.
 

pvvx

Активный участник сообщества
Можно включить в любой проект загрузку доп. usb/uart floaders если "SWS" на GND при старте, путем вставки "lfloader.c", "lfloader.h" и в main():
C:
int main (void) {
#if USE_EXT_32K_CRYSTAL
    blc_pm_select_external_32k_crystal();
#else
    blc_pm_select_internal_32k_crystal();
#endif
    cpu_wakeup_init(CRYSTAL_TYPE);

    clock_init();

    gpio_init();

#if    (USE_FLOADER)
    // Срабатывает при старте, если уровень на SWS "0". Для работы необходимо записать usbfloader.bin в 0x71000 или uartfloader.bin в 0x72800
    load_floader();
#endif
   ...
}
 
Сверху Снизу