• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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
   ...
}
 
Сверху Снизу