Ви не увійшли.
Платка arduino nano rf.
Є схема тієї платки? Як на ній організоване живлення NRF24 чіпа?
При під'єднанні через type-c дуже гріється кристал.
Який саме кристал? Атмега чи NRF24? Чи гріється, коли атмега в ресеті?
Яка версія датчика? Який режим роботи сконфігуровано на платі? Для версії 2.0 описано 3 режими, а для
версії 3.0 цілих пʼять.
Крім того, в режимі UART передається 4 байти: 0xFF, high data, low data і контрольна сума, а ви читаєте тільки два.
Взагалі можна і пасивний без додаткових елементів підключити, але щоб не спалити вихід прийдеться генерувати високочастотні імпульси. З активним набагато простіше з програмної точки зору.
Для ардуіно на atmega підійде і той, і той. Атмега може видавати струм до 40 мА на пін, бузер споживає до 30 мА.
Варіант на платі з транзистором необхідний для контроллерів зі слаботочними виходами.
Для визначення положення панелі потрібно обрати потанціометр
Як потенціометр буде механічно зʼєднаний з віссю панелі? Напряму чи через якийсь редуктор або мультиплікатор?
Відштовхуватись потрібно від максимального кута що вимірюється. В наших широтах максимальний кут між азимутом сходу та заходу складає приблизно 260°. Враховуючи граничні умови, звичайного з механічним кутом 300° і ефективним кутом 256° має вистачити. Звісно, якщо не збираєтесь експлуатувати панель десь за полярним колом
Очевидно, потрібен лінійний потенціометр, тобто з індексом B. Далі дивіться на допуски, в залежності від потрібної вам точність.
Якщо буде механічний редуктор чи мультиплікатор, то кут множте на коефіцієнт редукції/мультиплікації. Точність зміниться відповідно.
Номінал в розумних межах суттєвий тільки в плані споживання струму. Через 1 кОм при 5 вольтах проходить 5 мА. Навряд чи це суттєво у вашому випадку. Якщо суттєво, то можна або збільшити номінал, або подавати напругу на потенціометр тільки при вимірюванні, наприклад раз на декілька хвилин. Але якщо візьмете занадто великий опір порядка мегаом, то можуть бути проблеми з шумами.
При використанні "попередній перегляд" один бекслеш зникає в вікні вводу тексту, тому доводиться ще раз розставляти дублі.
Дійcно, так працює. Виправив попередній пост. Дякую.
void SendString(String dev, String data) { ... dev = ""; data = ""; }
Який сенс присвоєння у локальні змінні, коли вони далі у функції вже не використовуються?
for (int i = 0; i < 3; i++) { Serial2.print(0xff); }
Serial::print() перевантажена для різних типів аргументів. Тут ви передаєте int, що призводить до виводу символів десяткового представлення числа, тобто "255", а не символа з кодом 255 (0xFF).
Також нема особливого сенсу виводити символи в циклі по одному, це не дає тут ніякої переваги.
Спробуйте
Serial2.print("\xff\xff\xff");
А ще краще
Serial2.print(F("\xff\xff\xff"));
щоб не копіювати строку в ОЗУ, а читати прямо з флеші.
Також приклади є в документації.
Може бути апаратний баг в самій esp8266, що мастер шини чутливий до таймінгів address ACK, а ssd1306 в ці таймінги не вкладається. Або ssd1306 порушує таймінги, але інші контроллери до цього більш толерантні.
Може бути програмний баг в реалізації Wire або самого сканера.
У мене теж оцей сканер на esp8266 не детектить ssd1306, пише "Unknow error at address ..." і "No I2C devices found". Хотів спробувати пару інших сканерів, але вони для esp8266 навіть не компіляться. Ви яким сканером користувались?
А i2cdetect на компі нормально бачить цей ssd1306 через адаптер ch341.
При цьому адафрутівська GFX на esp8266 із цим же ssd1306 працює без нарікань:
Доречі, всі ssd1306 128x64, які мені попадались, ідуть з адресою 0x3C, а не 0x3D, як пишуть у прикладах.
Як уже вказали вище, у вас щось наплутано з пінами. Або маркування пінів не відповідає дійсності, або скетч компілюється не для тієї плати.
Найперше, що потрібно перевіряти - чи є потрібний сигнал на тому піні, на якому його очікуєте. Якщо нема осцилографа чи хоча б тестера, то можна перевірити за допомогою світлодіода з резистором.
avrdude: ser_open(): can't set com-state for ".COM4"
https://support.arduino.cc/hc/en-us/art … e-for-COMn
TL;DR: Ця помилка може виникати з новими версіями драйвера для CH341. Там рекомендують встановити версію 3.7.2022.01 і вимкнути автооновлення драйвера.
подключил монитор к L298N все работает но мотор не работает не крутиться
Що у вас куди підключено? Судячи по фото, живлення береться з шілда, 5V чи скільки там, і подається на вхід Vcc модуля, де стоїть ще один 5-вольтовий регулятор.
Якою програмою керується?
Можливо десь треба явно указати що в мене w5500?
Якщо по DHCP адреса отримується, то з ethernet і з модулем все нормально.
Хіба що я б замінив mac_addr на щось випадково сгенероване, бо якщо в мережі буде ще один пристрій таким же MAC'ом, буде конфлікт.
Що мені не подобається, це оцей кастинг в C-стилі:
MySQL_Connection conn((Client *)&client);
Бачу, що так само у прикладах MySQL Connector'а. Що ж, це говорить про "якість" бібліотеки. В даному випадку це ніяк не має впливати. А взагалі, він там не потрібен, достатньо
MySQL_Connection conn(&client);
З вашим кодом, коли MySQL-сервер взагалі недоступний, conn.connect() завершується після трьох спроб зʼєднатись:
Initialize Ethernet with DHCP:
DHCP assigned IP 192.168.1.176
...trying...
...got: 0 retrying...
...trying...
...got: 0 retrying...
...trying...
...got: 0 retrying...
Connection failed.
Коли клієнту (arduino) з його IP-адресою немає дозволу для віддаленого доступу до MySQL:
Initialize Ethernet with DHCP:
DHCP assigned IP 192.168.1.176
...trying...
ERROR: Timeout waiting for client.
Error: -1 = Connection failed.
Коли логін або пароль невірні:
Initialize Ethernet with DHCP:
DHCP assigned IP 192.168.1.176
...trying...
Error: 79 = Access denied for user 'baduser'@'192.168.1.176' (using password: YES).
Connection failed.
Ethernet 2.0.2
MySQL Connector Arduino 1.2.0
Дивіться логи MySQL-сервера. Впевніться, що в конфігурації MySQL-сервера вашому юзеру дозволений віддалений доступ з адреси, яку отримує ардуіна, або з будь-якої адреси в цій мережі.
Запустість сніфер на стороні сервера. Подивіться, що відбувається під час комунікації.
Схоже, що проблема в налаштуваннях аутентифікації на самому сервері, а не в ардуіно. Взагалі, вдається зʼєднатись із цими самими логіном/паролем з якого-небудь іншого пристроя? В конфігурації MySQL сервера конкретна адреса пристроя або вся мережа має бути дозволена для конкретного логіна .
У періодичних пакетах (1 пакет на 0,8сек) на вході Rx (швидкість 9600) після певного прийнятого символу (конкретно цифра 5) необхідно порахувати довжину першого імпульсу (не важливо до якого символу він відноситься, важлива довжина саме першого імпульсу після прийнятої 5ки).
Яка максимальна довжина імпульсу? Яка необхідна точність? Якщо достатньо розрізняти імпульси довжиною від 100 мкс до 950 мкс із точністю приблизно 100 мкс, то можна просто прийняти наступний байт і подивитись скільки у нього нульових бітів у кінці, як це робиться при роботі з 1-Wire через USART.
Якщо ж умови по довжині та точності інші, то після прийому '5' працювати з RX як зі звичайним GPIO піном. На atmega328p в термінах ардуіни це пін з номером 0, в термінах AVR це PD0 (PIND & 0x1). Бажано при цьому вимкнути ресивер USARTа, щоб він не сприймав імпульс як передачу наступного символа, а по закінченню імпульса увімкнути знов. Як вимірювати - можна використати ардуінівську pulseIn() або свою аналогічну імплементацію з циклічним опитуванням. Якщо вимірювання має відбуватись паралельно з виконанням іншого коду, можна зареєструвати обробник Pin Change Interrupt на цей пін і читати micros(), або запускати/зупиняти один із решти таймерів атмеги. Як обробляти ситуацію, якщо імпульс так і не надійшов, або якщо надійшов довший ніж очікувалось - то вже залежить від специфіки вашої задачі.
if (conn.connect(server_addr,****, user, password)) { delay (4000);// тут висне } else Serial.println("Connection failed.");
delay() не висне, а затримує виконання на 4 секунди. Який в цьому сенс, навіщо воно тут потрібне?
Оскільки "...trying..." виводиться тільки один раз, а "Connection failed." не виводиться, то можна припустити що або зʼєднання успішно встановлено, або виконання затрималось у conn.connect(), а саме на
connected = client->connect(server, port);
або на
read_packet();
parse_handshake_packet();
send_authentication_packet(user, password, db);
read_packet();
Додайте який-небудь Serial.println("Connected.") замість того delay().
Непогано би на стороні сервера запустити сніффер, наприклад wireshark, і подивитись чи встановлюється зʼєднання, чи приходить хоча б TCP SYN з ардуіни на відповідний порт. Якщо приходить, то на якому етапі комунікація зупиняється.
UPD: при успішному виконанні conn.connect() в консоль має вивестить версія SQL-сервера.
а чи є в нас якісь курси де б мені як чайнику розтлумачили все "на пальцях" починаючи з самого простого ?
Тут, вибачте, навряд чи щось підкажу. Думаю, в кожного свій індивідуальний шлях пізнання.
dimich - ви би взялись за моє навчання? :-)
Нажаль, не маю для цього ні достатньо вільного часу, ні педагогічного таланту.
от стало цікаво, а хоч сам сигнал від мікрофону я зможу передати на комп'ютер? чи також будуть люті тормоза?
Зможете, якщо підключити зовнішній АЦП з інтерфейсом I2S. Наприклад, щось типу WM8782.
Вбудований в ESP8266 АЦП, наскільки мені відомо, можна читати тільки циклічним опитуванням, і при увімкненому WiFi максимально досяжна частота - щось біля 1 кГц, що явно недостатньо для звуку.
просто хотілося на цьому прикладі зрозуміти для себе як взагалі передати щось через esp8266 на комп'ютер
Що означає "передати щось на компʼютер"? Коли ESP8266 зареєструвалася в мережі і отримала адресу, і ви її пінгаєте з компʼютера, вона вже передає на компʼютер пакети ICMP echo response.
А в цілому, на рівні мережі, чим передача з ESP8266 має відрізнятись від передачі з будь-якого іншого пристроя? Для передачі потоку з гарантією доставки - TCP сокет, для передачі датаграм - UDP сокет. Якщо передача передбачає запит/відповідь, то зручно використовувати HTTP поверх TCP. Тоді клієнтом на компі може бути браузер. В ESP IDF в examples/protocols є приклади.
Не розумію як тоді працюють сучасні вай фай камери :-(
Сучасні камери працюють на високих частотах по інтерфейсу з диференційними парами, наприклад, MIPI D-PHY. Контролер, який приймає дані з камери, має апаратну підтримку такого інтерфейсу. Також використовується апаратне стиснення відеопотоку.
а що це мені дасть?
Ну якщо там дійсно цей інтерфейс і вдастся визначити розпіновку, то спочатку дивитись, чи є щось у фреймворку ESP для роботи з ним. Якщо нема, то портувати код з якоїсь іншої платформи або писати з нуля. Благо інтерфейс OV7670 непогано документований і є бібліотеки/приклади для всяких ардуіно. Коли (якщо) запрацює код роботи з камерою, тоді додати, наприклад, RTSP-сервер, який буде відправляти відеопоток клієнту. Для ESP32-CAM щось уже має бути готове в цьому плані. Якщо сама камера вміє віддавати готовий відеопоток, наприклад m-jpeg, то буде простіше; якщо ні, то потрібен буде ще код якого-небудь енкодера, щоб приймальна сторона могла розпізнати і відображати відеопоток.
Ви ж самі поставили собі задачу "як зробити X, тільки обовʼязково використовуючи Y", причому інформації про цей Y обмаль. Звісно, це буде набагато складніше і довше ніж спочатку обирати компоненти, які найкраще підходять для вирішення тієї чи іншої задачі.
О, це вже щось. Цілком можливо, що з камери йде інтерфейс як на OV7670.
Для початку спробуйте пошукати по маркуванню чіпа. Якщо повезе і документація на нього є у відкритому доступі, то як мінімум буде від чого відштовхуватись.
Також подивіться, з якими USB VID:PID камера детектиться компом. По них теж можливо вдастся щось знайти.
якщо я наприклад відпаяю просто саму камеру та мікрофон, невже не можна передати відео з самої камери? чи потрібен обовязково сам чіп який декодує відео з камери?
Може й можна. Але потрібно знати, який саме протокол використовує та камера. Там же можливі різні варіанти. Сама по собі "камера" - це просто світлочутлива матриця. У неї на борту може бути контролер, який зчитує сигнал з матриці, кодує відеопоток у якомусь форматі і передає назовні по якомусь протоколу. Може бути так, що він заодно реалізує і функцію USB-пристрою, видає відеопоток відразу в USB. Може бути що USB-пристрій реалізовано на іншому чіпі, а чіп з камери передає йому відеопоток по одному з безлічі можливих протоколів. Не маючи схеми та документації на те залізо, що використане в камері, можна тільки здогадуватись про можливі варіанти реалізації. Може бути навіть так, що видається аналоговий сигнал і цифрується вже тим окремим контроллером (хоча це навряд чи).
а ESP32 підійде краще для цього?
Без поняття. На ESP32 я тільки "Hello World" в UART писав. Очевидно, залежить від формату відеопотоку, який камера вміє видавати, розподільчої здатності та фреймрейту.
Майте на увазі, що USB OTG присутня тільки на деяких ESP32 чіпах. І фірмварь повинна вміти працювати з відповідним USB Device Class / Device SubClass / Device Protocol. Тобто підтримка взаємодії з камерою як з USB-пристроєм має бути або в самому IDF фреймворку, або сторонніми лібами, або доведеться реалізувати самостійно.
Якщо знайдете яку-небудь імплементацію USB over network для ESP32 (якщо такі взагалі існують), то може виявитись простіше: ESP32 просто прокидає весь USB-протокол у мережу, а на компі підіймається віртуальний USB-пристрій, з яким софт працює як з локально підключеною USB-камерою. Чи вистачить ESP32 для такого сценарія - х.з., треба пробувати.
Якщо у камери як у пристроя вцілому USB інтерфейс, а у ESP8266 немає USB, то як їх зʼєднати? Емулювати USB на ESP8266 програмно?
Якщо чіп камери окрім USB вміє, наприклад, SPI і дозволяє переконфігурацію ззовні, або відомий апаратний інтерфейс між самою камерою і чіпом, то чисто теоретично щось можливо придумати. Але потрібна документація на чіп камери, також знадобиться апаратна модифікація. І не факт, що швидкодії ESP8266 вистачить для передачі відеопотоку. Подумайте, чи варте воно того.
Щоб не викидати (у мене б теж рука не піднялась), можна зробити, наприклад, примітивний настільний USB-мікроскоп що підключається до компа по USB. Спробуйте просто перевернути обʼєктив зворотнім боком.
Задача стоїть з'ясувати що це за друга плата та знайти її для закупівлі так як треба реанімувати камеру та передати на фронт.
Навряд чи така плата буде десь у продажу. Таке малюється за півгодини в якому-небудь кікаді і замовляється у китайців. Там же один транзистор, два резистори і перемикач (якщо на зворотньому боці ще чогось нема). Якщо потрібен один єдиний екземпляр, то можна видряпати на текстоліті, або взагалі зібрати на шматку макетки, якщо допускається невелике збільшення габаритів у товщину. Тільки потрібно визначити, які зʼєднання на зворотній стороні. Бажано відʼєднати її від ардуіни і подивитись. Або хоча б продзвонити, але припаяну правильно продзвонювати не так просто.
Хоча не дуже розумію, навіщо її замінювати, бо ламатись на ній практично нічому. Якщо той єдиний транзистор згорів, то тільки його і замінити, навіть не відпаюючи саму платку.
Схоже на інвертуючий буфер з відкритим колектором, тобто інвертуючий перетворювач логічних рівнів.
Зверху вниз по другому фото:
Жовтий і синій провода - живлення ардуіни.
Червоний нижче них через резистор іде в базу транзистора.
Червоно-чорний - загальний (земля).
Нижні чорний і червоний, схоже, просто напряму підключені до PD2 і PD3.
Колектор транзистора через перемикач підключений до RX ардуіни. Тобто на піні RX інвертований сигнал із входу "S" (червоний провід).
Але плата двостороння, на іншій стороні теж мають бути доріжки. R2 іншим кінцем, скоріш за все, підключений до піна 5V ардуіни. TX (останній праворуч в нижньому ряду) теж мабуть кудись підключений.