Ви не увійшли.
перетворювач живлення B0505S
Тобто є якийсь 5-вольтовий БЖ. З нього 5 вольт ідуть на плату ESP32 на LDO регулятор. З регулятора 3.3 В ідуть на UART VCC плати з оптопарами.
З цього ж БЖ 5 вольт ідуть на DCDC VCC плати з оптопарами і живлять B0505S, так?
У B0505S за даташитом пульсації до 100 мВ, а частота перетворення всього 100 кГц. Невідомо, наскільки добре воно фільтрується.
Для чистоти експерименту я б заживив ізольовану сторону від окремого БЖ з лінійним регулятором.
Взагалі для діагностики в таких експериментах осцилограф дуже знадобився б.
Чорний ящик
Плата розміром з ноутбук, щедро заляпана компаундом.
Можна порівняти напругу в ненавантаженому стані та в навантаженому на кілоомний резистор. А також, про всяк випадок, на цей же резистор, тільки підтягнутий до 5В. Це якщо там раптом відкитий колектор, але транзистор PNP з підтяжкою до землі.
в esp32c3 їх немає
Хм, як же так? Про що думали розробники?
Тоді треба поставити. На компараторі, або мікросхему логіки з ТШ на вході, або з двох транзисторів зліпити. Ну і glitch filter той на GPIO увімкнути.
Можна і програмно-апаратний гістерезис реалізувати: підʼєднати до входу інший GPIO вихід через резистор на кілька десятків кілоом, подати на нього нуль. Як тільки задетектили на вході високий рівень - видати на цей GPIO одиницю. Як задетектили низький - видати знову нуль, і т.д.. Але цей метод працюватиме лише в комплексі з маскуванням переривання на період обробки.
Він сам по собі вийшов
Далі по коду малі інтервали ігноряться, а закладеної похибки в +-5мс вистачає щоб вивезти
Ну, одна справа - ловити переривання і викликати обробник, але нічого в ньому не робити, а інша - вимикати це переривання взагалі.
На перший погляд різниці ніякої, але в деяких специфічних випадках краще вимикати.
Відпаяв конденсатор - в принципі так теж працює.
Якщо там на вході нема ТШ, то й мілівольтних пульсацій в живленні може бути достатньо, щоб на "чистому" сигналі ловити хибні фронти. Конденсатор в такому випадку навпаки робить гірше.
Але як переривання може спрацювати сильно до спаду імпульса? 45 мкс - дофіга.
Ну, дивлячись що аналізатор сприймає за спад. Якщо ESP32 сприймає низький рівень вже при половині живлення (1.6 В), а аналізатор, наприклад, лише при 0.8 В, то воно так і буде відображатись.
Тут схема AOC812, VCC = 3.3V від ESP32
Ааа, це готова плата з оптопарами та DS2480B. Тепер зрозумів.
на вході Tx стояв 1,5к.
Ну, в теорії 1.5к там має бути достатньо. На фотографії погано видно, зі сторони DS2480B підтяжка 4.7к?
Може у самих оптопар CTR аномально низький. Якщо, наприклад, 50%, то низький рівень на вході DS2480B вже буде десь 1.7 В, а DS2480B за даташитом хоче не більше 0.8. Тоді так, або зменшувати резистор світлодіода, або збільшувати підтяжку 4.7к на виході оптопари.
З другою оптопарою те ж саме може бути. Там до світлодіода 2.4к?
А 5-вольтове живлення звідки берете? Воно добре стабілізоване?
після завантаження файла та відкриття посилання в окремому вікні отримую 404
Угу, в мене теж. Щось мабуть знову поламалось ![]()
https://forum.arduino.ua/img/members/3983/schema.png
Верхній кінець R23 до джерела імпульсів підключений? У джерела пушпульний вихід чи відкритий колектор з підтяжкою?
// Обробник переривання GPIO (викликається при кожному наростаючому фронті) static void IRAM_ATTR ective_isr_handler(void *arg)
Не шарю в фреймворку ESP32, тому питання: цей обробник в контексті переривання виконується чи в контексті задачі?
Якщо в контексті переривання, то так:
esp_rom_delay_us(10);
робити не варто.
Крім того, всі інші функції, які викликаються з обробника, також має бути дозволено викликати в контексті переривання.
Підозрюю що сигнал на вході брудний
Можна програмний debouncing реалізувати. Як задетектували очікувану подію, вимкніть це переривання. Потім по таймеру знову вмикайте. Тільки якщо там не level-triggered переривання, а лише edge-triggered, то звісно, перед вмиканням потрібно атомарно перевірити, чи вже не сталась очікувана подія, щоб її не пропустити.
Питання: які є осцилографи, що вміли зберігати waveform, щоб не по ціні Боїнга?
В якості кишенькового користуюсь FNIRSI 1C15. Інтерфейс не дуже зручний, але в решті більш-менш норм.
В принципі можна спробувати замість обмежувача на стабілітроні трігер Шмідта впаяти..
Ну, по входу GPIO він уже вбудований має бути. Також у ESP32C3 наче ж є hardware glitch filter.
На самому мастері по входу Tx якраз і стоїть послідовний 1,5к, який я замінив на 220 Ом, бо інших не знайшов.
Послідовно зі входом? А підтяжка скільки?
Замінив 1,5к на 220 Ом (3 к на 5В стороні не чіпав).
???
Або я щось неправильно розумію, або оптопари у вас принципово неправильно підключені.
Покажіть схему, як у вас підключені оптопари між ESP32 та DS2480B.
офтоп - а як прикріпити фотку?
Якщо фотка вже лежить десь на загальнодоступному ресурсі, то за допомогою тега img.
Якщо фотка на компі, то при редагуванні тиснете внизу "Завантаження". Відкривається діалог, завантажуєте фотку і копіюєте її URL. Далі вставляєте в повідомлення так само за допомогою тега img.
Оффтоп. Це:
if (txByte == 0xE3) { Serial1.write(0xE3); Serial1.write(0xE3); } else { Serial1.write(txByte); }
можна спростити до
if (txByte == 0xE3) {
Serial1.write(txByte);
}
Serial1.write(txByte);для того, щоб фронти на виході PC817 не завалювались на ії LED треба дати десь 10 mA.
10 mA - це в районі максимума CTR. І то, максимум може бути від 5 до 15 мА, в залежності від виробника та версії.
Ось PC817S, 0x55 на 9600 бод,
TX: CP2102 3.3 В, резистор 2.2 кОм,
RX: CH341A 5 В, резистор в колекторі 2.2 кОм:
Два трансивера взяв навмисне, щоб були різні тайм референс. Все на макетці зі жмутом проводів.
Може у вас від ESP32 TX через якийсь послідовний резистор, або десь велика паразитна ємність.
Тест від Honey пройшов зразу же, а з 1,5 к були помилки
Ну, запрацювало, то й добре. Лише майте на увазі, якщо у вас працює лише на максимумі, при постійній інтенсивній передачі через кілька років кристал деградує, і може перестати працювати.
Зробив ехо тести на 9600 від ESP32 3,3V через PС817 до DS2480B
Тобто з модулем розширення портів це ніяк не повʼязано. Мабуть, варто було би створити окрему тему в "Апаратних питаннях".
Як саме ви проводили цей тест? Покажіть схему підключення.
В даташиті DS2480B на сторінці 27 є приклади підключення до UART з опторозвʼязкою. Тільки там з HCPL-2300.
Вхідний резистор 1,5к для Tx оптопари великий. Розрахунки показують, що він повинен бути 220-330 Ом, щоб впевнено працював світлодіод оптопари.
Покажіть ваші розрахунки.
1.5 кОм при 3.3 В дасть струм порядка 1 - 1.5 мА. Навіть при коефіцієнті передачі струму 50% цього має бути достатньо.
Який у вас резистор в колекторі вихода оптопари?
Думаю знайшлося вузьке місце в ланцюжку, із за цього і не зміг налаштувати розширювач портів в кінці 1wire лінії.
При сумнівах дивіться осцилографом, що там на виході з оптопари.
Як змусити працювати розширювач портів через гальваничну розв'язку ?
Між чим і чим ви хочете гальванічну розвʼязку?
Вважаючи, що
ШІ каже, що або PC817 повільні для 9600
то поки складається враження, що між ESP32 та DS2480B. Тоді до чого тут розширювач портів?
9600 бод через PC817 у мене пролазили без жодних проблем.
Проблема була в тому, що Grok неправильно написав 100раз скетч
LLM не пише скетч. Пише той, хто задає йому запит. LLM лише генерує вихідний текст по вхідному запиту.
може бути там код кожного блока?ччи як це працюе
В цьому ж і полягає суть реверс-інженерингу: зрозуміти, як це працює.
Тепер колір по воздуху передаеться на всі 5 блоків.А я хочу наприклад на 1-2 блоки красний ,а на три інших блоків зелений .Так імей микросхем різний?
Це ж блютуз? Там нема IMEI, там MAC адреси для ідентифікації девайсів. Але вони релевантні на канальному рівні блютуз-стека, а в керуючому протоколі, який ви колупаєте, вони не передаються. Скоріш за все передаються якісь свої внутрішні ідентифікатори або бітові маски.
Додаток в телефоні вміє вмикати "на 1-2 блоки красний, а на три інших блоків зелений"? Якщо вміє, то увімкніть і дивіться, що там передається при такій конфігурації. А якщо в протоколі не закладена можливість такого окремого керування, то тут нічого й не зробите.
USB-UART з логікою 3.3 В в мене есть.але як пеедать хрен зна
Ну ось вам пайтон скрипт, що передає дві послідовності позмінно кожні півсекунди:
#!/usr/bin/env python
import sys
import serial
import serial.tools.list_ports
import time
if len(sys.argv) > 1:
port = sys.argv[1]
else:
port = next((
port.device for port in serial.tools.list_ports.comports()
), None)
if not port:
print('No ports found', file = sys.stderr)
sys.exit(1)
print(f"Using {port}")
ser = serial.Serial(port, 115200)
delay = 0.5
try:
while True:
ser.write(bytes.fromhex('AE 01 FF FF 00 00 02 03 3C FF FF 0A FF EF'))
time.sleep(delay)
ser.write(bytes.fromhex('AE 01 FF 00 00 FF 02 03 3C FF FF 0A FF EF'))
time.sleep(delay)
except KeyboardInterrupt:
sys.exit(0)
finally:
ser.close()Порт можна вказати аргументом командного рядка, а якщо запущено без параметрів, то пише у перший знайдений порт.
Я незнаю що робить
Поки що відкладіть STM32 чи ардуіну. Напишіть програмку, яка виконується у вас на компі і пише в COM-порт (USB-UART) послідовність байтів. Така програмка буде найпростішою. Наприклад, скрипт на пайтоні буде в декілька рядків. Або що вам зручніше та зрозуміліше. LLM з такою задачею також успішно справляються.
Або візьміть будь-яку готову програму-термінал під вашу ОС, яка вміє писати в COM-порт довільні бінарні дані.
Підключіть TX USB-UART адаптера до RX мікроконтролера. Землю, звісно, теж підключіть. А вихід TX від іншого мікроконтролера відключіть. Тільки дивіться, якщо у адаптера 5-вольтовий вихід, а живлення на платі 3.3V, то потрібно дільник 5:3.3 поставити.
Спробуйте для початку відіслати такі самі послідовністі як оригінальний контролер. Чи буде виконуючий контролер реагувати на них?
Непоняв ззначить це неможливо
зробить?
Щоб LLM телепатично вгадала, що ви від неї хочете? Навряд чи в найближчі десятиліття
Машина має працювати, людина — думати.
Деякі протоколи передають колір в HSV форматі, або RGB і HSV одночасно. Також можуть передаватись бітові поля вимкнено/увімкнено, номери еффектів і т.д..
Ось загуглив по такому запиту: "Tuya or similar LED control subprotocol, payload 12 or 14 bytes, RGB HSC and effects bit fields. Command values: 0xAE, 0x7E. Subcommand values for 0xAE: 0x01, 0xA4, 0xA1".
ШІ видало, поміж іншого:
1. Command 0xAE: State Configurations & Dynamic Scene Mapping
The 0xAE command controls complex static modes or multi-byte configurations. The subcommands segment how the 12- or 14-byte payload area is evaluated:Subcommand 0x01 (Static Solid Color Control):
Payload Layout (12 Bytes typical): Segregated directly into dedicated slots for HSV (Hue, Saturation, Value) or RGB, often trailing with a structural zone bitmask.
Format: [Subcmd: 0x01] [H_High] [H_Low] [S_Byte] [V_Byte] [R_Byte] [G_Byte] [B_Byte] [White_Byte] [Zone_Bitfield] ...
Execution: Instructs the MCU to bypass internal pattern engines and lock the addressable LED pixels to a single calculated color point.
Subcommand 0xA1 (Dynamic Effect/Scene Execution):
Payload Layout (14 Bytes typical): Used to trigger built-in micro-animations (e.g., fade, rainbow wave, flash, breathing) or music-reactive tracking.
Format: [Subcmd: 0xA1] [Effect_ID] [Speed_Byte] [Sensitivity_Byte] [Direction/Style_Bitfield] [Color_Palette_Bitmask: 6-8 Bytes] ...
Bitfields: The style/direction bitfield establishes transitions (e.g., Bit 0 = Forward/Reverse direction, Bits 1-2 = Transition curve like linear vs. jump, Bits 3-7 = Length of effect window).
Subcommand 0xA4 (Custom Segment Mapping & Bitfield Layouts):
Payload Layout (12 or 14 Bytes): This maps physical address blocks of LEDs into independent logic segments or custom DIY patterns.
Format: [Subcmd: 0xA4] [Segment_Count] [Active_Segments_Bitfield_1] [Active_Segments_Bitfield_2] [Color/Style_Index] ...
Execution: Allows the control application to selectively enable or toggle specific zones along an IC-driven addressable LED strip without modifying underlying global scene tables.2. Command 0x7E: Real-time Streaming & Reactive Sync
The 0x7E command bypasses state memory buffers on the target chip. It is used for high-frequency updates, such as camera color tracking, screen mirroring sync, or real-time microphone processing.Payload Mechanism: Rather than using discrete subcommands like 0xAE, 0x7E packets usually feature a strict structure:
[Command: 0x7E] [Frame_Sequence_ID] [HSC/RGB Bitfields and Array Data] [Checksum]
Data Aggregation: The 12 or 14 bytes tightly wrap combined HSC (Hue, Saturation, Color Intensity) data alongside Effects bit fields.
Hue is typically defined as a 16-bit integer (0-360 range mapped across two bytes) or compressed down to an 8-bit scale (0-255), leaving remaining bytes open for active runtime modifiers (like sound-reactive decay time or audio peak indicators).
Але випитати у нього, з якого документа чи кода взята ця інформація, мені не вдалося. Посилань ніяких не дає.
Цей опис наче частково співпадає з тим, що спостерігається у вас, але не повністью. Розробники могли взяти його за основу, але повикидати якісь одні поля і додати інші.
До того ж, такі фрейми з опису передаються як payload в Tuya Serial MCU Protocol, із заголовком який містить поле довжини. Тобто MCU знає розмір фрейма. У вас же фрейми без цих заголовків, так що мабуть, їх довжина фіксована для кожної підкоманди.
Шанси знайти адекватну інформацію зростуть, якщо шукати по назві виробника і конкретній моделі LED-контролера. Контролера як цільного виробу, а не чіпа MCU який в ньому використовується.
Взагалі навіщо міняти один контроллер на інший? Якби китайці хотіли б цю штуку зробити на stm32- зробили б.
Автор хоче керувати за допомогою енкодера замість телефона. Цілком зрозуміле бажання. Тільки я б у такому разі шукав LED-контролер з нормальним документованим інтерфейсом.
Яне розумію а що в архіві не видно?
Так це ж треба звідти експортувати ті байти, порівнювати, тобто проводити повноцінну дослідницьку роботу.
Виможете улаленно зайти глянути?
Вибачте, але ні.
0–10 сек — вимкнено
Тут ідуть по два пакети "AE A4" та "AE 01".
А чи передається в цей час щось у зворотній бік, на іншій парі TX/RX?
EF, скоріш за все - маркер кінця пакета.
10–20 сек — червоний 50%
Тут уже тільки "AE 01 ..."
Зауважте, при перемиканнях видно пакети з іншим початком та довжиною:
7E FF 04 01 FF FF FF FF EF // 10
7E FF 05 03 00 FF 00 FF EF // 20
7E FF 05 03 00 00 FF FF EF // 30
7E FF 05 03 FF FF FF FF EF // 40
7E FF 01 31 00 FF FF FF EF // 50
7E FF 01 2A 00 FF FF FF EF // 50
// потім при увімкненні білого, декілька поспіль кожні чверть секунди:
7E FF 01 04 00 FF FF FF EF
7E FF 01 13 00 FF FF FF EF
7E FF 01 3A 00 FF FF FF EF
7E FF 01 5E 00 FF FF FF EFза якими також зʼявляється "AE A1 ..."
AE A1 0A FF FF FF FF FF FF FF FF FF FF EFТакож зустрічається
0x6F 0xF6 0xFE 0x7E 0xF6 0xFE 0x6E 0x7F 0x76 0xB7 0x76 0xB7 0x36 0x36 0x36 0x36 0xFEале не дуже зрозуміло, чи це теж якісь команди, чи глюки синхронізації.
Якийсь пропрієтарний протокол, тисячі їх. Можете скормити ці данні якій-небудь LLMці, може знайде, що хтось уже розколупав саме такий і виклав у відкритий доступ. Успіхів у декодуванні.
Чим вам допомогти ще? щоб ви розібрались?
Мені допомогти? Навіщо воно мені? Здається, це вам потрібно.
Я не знаю, що в даному контексті значить "зона" і які там контроли в телефонному додатку.
Для початку реалізуйте щось типу blink. Щоб раз на секунду перемикало між двома кольорами.
Знайдіть, який байт в пакеті відповідає за який колір/канал.
Як запрацює, тоді додавайте керування енкодером.
А, побачив архів з осцилограмою. Так, там serial 115200 бод.
Передається по дві посилки по 14 байт. Імовірно, що:
AE - заголовок
A4/01 - якийсь ідентифікатор. Можливо, адреса призначення.
12 байт - 3 канала RGBW або 4 канала RGB, або якийсь інший формат. Потрібно дивитись, як ці значення корелюють із тим, що виставляєте з телефону.
Схоже на проприєтарний Tuya LED subprotocol, що йде як payload в "Tuya Cloud Universal Serial Port Access Protocol". Тільки там аргументи для підкоманди 01 інші.
Контакти під UART на платі
Знайдіть мінімальну тривалість імпульсу, що зустрічається в осцилограмі. Обернене значення з великою ймовірністью відповідатиме бодрейту.
Виставте з телефона певну конфігурацію, запишіть посилку.
Змініть один параметр в конфігурації, наприклад, яскравість на одному каналі. Запишіть посилку.
Порівняйте, що в посилках змінилось.
Змініть інший параметр, запишіть, порівняйте, і т.д.
Таким чином визначите структуру протоколу, хоча би приблизно.
Ще як варіант, можете спробувати зчитати прошивку з ST17H66B, якщо там не залочено, і дизасемблити. Сучасні LLMки непогано розгрібають дизасембльований код і відновлюють загальну структуру програми, якщо що.
перша зона — це динамічне підсвічування (лінії DATA плюс та мінус)
Мабуть же DMX512 (напис на платі натякає). Але це не точно.
а друга зона — звичайне RGB-підсвічування.
Що таке "звичайне RGB-підсвічування"? 3-канальна ШІМ?
1- щоб STM32 видавав такі самі байти.
2-Чи видно по байтах, чи можна керувати кольором кожного з 4-х блоків окремо (чи є там адресація)?
Наскільки можу зрозуміти з картинки, ті "байти" - це те, що аналізатор спробував декодувати як звичайний asynchronous serial. А там зовсім не факт що саме serial. Потрібно дивитись осцилограму і розпізнати, що там за протокол. Може й serial, але на іншому бодрейті, може якийсь інший стандартний, а може й проприєтарний. Це реверс інженеринг.
У цього блока є назва? Є якийсь опис чи user manual? Пошукайте по назві, може хтось уже розколупав його.
3- замість телефона використовувати ESP32-C3, щоб вона сама по повітрю керувала головним master?Slave напряму?»
Те ж саме: потрібно сніфити bluethooth трафік і розпізнати, що там за протокол керування. Або шукати в інтернеті, може ця інформація вже є у відкритому доступі.
На старому екрані є якесь маркування, за яким його можна ідентифікувати? (Фото екрана не відкривається, 404).
Якщо нема, то шукати по назві самого пристрою відеоспостереження, може десь є ця інформація.
Наскільки розумію, у АМТ630А прошивка лежить на зовнішній флешці. Якщо підключати дисплей з параметрами, відмінними від оригінального, то потрібно буде колупати ту прошивку.
Поки щось не дуже зрозуміло, що ви хочете. У вас є якийсь безпровідний DMX контролер. Ви хочете замінити один із його MCU на зовсім інший, і щоб LLM написав для нього прошивку, яка би повторювала функції оригінального контролера і реалізовувала додаткові? Та ще й з використанням arduino фреймворка? Так воно навряд чи буде.
Для початку потрібно розуміти, які саме функції виконує цей девайс в оригінальному вигляді. Що там на вході "5-го контакту другої ST17H66B", DMX512?
як примусити клавіатуру FK13P працювати з Pico 2 через GP16.GP17
Щоб через довільні GPIO піни, то можете взяти https://github.com/sekigon-gonnoc/Pico-PIO-USB.
Дивно, залишаю повідомлення але чомусь їх не бачу
Тому що в них присутні посилання на сторонні сторінки, форум таке чомусь іноді не пропускає.
Якщо на попередньому повідомлені натиснути "Цитувати", то деякий час їх можна побачити внизу.
Опція "--version" була видалена в esptool 5.0.0. Мабуть, thonny чи якийсь плагін для нього розраховує на esptool старішої версії.
Якби мені було потрібно розібратись в точній причині тієї помилки, під лінуксом я би відслідкував, хто там кого з якими параметрами запускає. Але як то у віндовс зробити, нажаль, не знаю.
Ну запустилось, то й добре ![]()
Це тому що якимсь дивом бінарник під arduino framework вийшов менший - от і виникла підозра, що там всередині щось хитро скомпільоване.
Ардуіно фреймворк лінкує з уже скомпільованими freertos.a та іншими бібліотеками. Здається, ось тут можна знайти, що саме і з якими опціями компілюється: https://github.com/espressif/esp32-arduino-lib-builder. Тільки відкопати, з якої гілки чи тега воно збиралось. І якщо не змінювали опції локально.
Насправді там є що вимкнути
Ну питання було - чи можна скомпілювати різні частини з різними опціями, а не як зменшити розмір бінарика ![]()
От і питання - може є спосіб збирати свій код з клочом -Og, а бібліотечний - з -Os ?
Там же cmake? Теоретично можна, щось типу
set_source_files_properties(main.c PROPERTIES COMPILE_OPTIONS "-Og")Але боюсь, що разом з кастомним "-Og" esp-idf все одно додаватиме "-Os" із sdkconfig, і який із них виявиться останнім, тобто актуальним - х.з.
А щоб прибрати дефолтні опціі, мабуть, доведеться правити CMakeLists.txt щоб "свій" код компілювався як окрема бібліотека зі своїм target_compile_options().
От тому й не люблю всякі фреймворки та обгортки: як автори собі придумали, так щось і працює, а як треба крок ліворуч чи праворуч - або ламається, або ігнорується.