Есть ардуино, которая в последовательный порт пишет данные (ov7670+nano+известные коды с отправкой данных со скоростью 1000000 бод). Другое устройство - nodeMCU, читает порт, преобразует полученные данные и отправляет по wifi. Для отладки, я подключил и то и другое через usb к компьютеру, а там написал программу, которая читает из ардуино, рисует полученную картинку (для контроля, что все работает), и транслирует данные на nodeMCU через посл. порт. При таком подключении, когда компьютер является передаточным звеном, все работает как надо. Далее я подключил tx-rx, rx-tx, через преобразователь уровня от ардуины к nodeMCU, а в обратную сторону напрямую. И ожидал, что все это заработает. Но не хочет. Пробовал по разному подключать питание, через usb, напрямую 5В. Снижал скорость передачи (при этом проверял, что при передаче данных через компьютер, все работает как надо). Ничего не помогает. Что может быть? Куда смотреть?
Если Вы не забыли соединить земли, то смотреть надо схему платы NodeMCU, которые сейчас кто только не выпускает, и пытаться понять что к чему. Не исключено что и ардуино у вас не совсем ардуино - там тоже может быть засада. Обычно, соединение "голых", ног через преобразователь уровней работает всегда без проблем. Если эти же ноги участвуют и в работе с компьютером - нужен анализ схем. Чтобы проверить /упростить задачу, попробуйте воспользоваться софтверным сериалом на ардуино и задействовать другие ноги у NodeMCU, если ваша среда это допускает. Другой вариант - после отладки заменить NodeMCU на что-то попроще: ESP-8266 esp-201, например.
Скетч для ov7670+arduino взят отсюда: (Youtube, Arduino Uno и камера ov7670 — передача изображений на компьютер Евгений Морковин). NodeMCU программируется через Arduino IDE. Коды и схемы в прикрепленных файлах. BasicWin.txt - программа на компьютере для передачи данных от ардуино на nodeMCU в первом, работающем варианте
Это либо электрическая проблема, либо программная, так? Убедитесь лично, что скорости портов выставлены одинаково. То что там написано для ESP-8266 - вещь сомнительная, хотя до конца не подписываюсь. Скорость какая-то нестандартная. ESP-8266 (так думаю) не воспринимает эту команду и работает по-умолчанию. То что написано для ардуино - установка скорости порта через запись в регистры. Проверяйте сами что это значит, ковыряете даташиты. Как, собственно, и ESP-8266 - может она с такой скоростью работать по даташиту или нет.
@msd, на форуме попадалась информация, что в китайских клонах бывают не установлены "развязывающие" резисторы 1кОм между Atmega328 и USB-TTL. Если есть Pro Mini, у которой нет USB-TTL цепей, проверьте скетч на ней.
Тоже 1Мб. 9600 это часть комментария, в котором приводятся разные значения для разных скоростей. И потом я же писал, что при передаче через посредника (компьютер с программой перетрансляции, в приложении basicWin.txt), все замечательно работает.
Да, возможно придется на про мини проверить, но сразу перепаивать не хотелось. Но на этот счет я проверял по другому, каждое из устройств, ардуино и nodeMCU подключал к компьютеру через tx, rx с помощью дополнительного переходника usb-ttl, чтобы убедиться, что встроенные usb-ttl не мешают. И никаких проблем в этом случае не наблюдалось. Хотя это, возможно и не показатель.
Меня тоже удивила такая скорость, но скетч на ардуино написан не мной, и что есть, то есть. По любому все компоненты по отдельности работают, так что причина не здесь. К тому же, чтобы убедиться, что резисторный преобразователь на такой скорости не вносит искажений, я уменьшал скорости до 115200, но это не повлияло на результат
ESP-8266 может подстраиваться под стандартную скорость. С компьютером, с его буферами, это работает, с МК - вряд ли. Причина или та что сказал ZAZ-965 или несовпадение скоростей. Других просто быть в этом случае не может. Не стоит уповать на автора скетчей - при публикации (по себе знаю) часто файлы улетают ошибочные.
Там в 4 местах установлена одна и та же скорость, и нет там никакой другой стандартной скорости. Есть там один момент, который непонятен, может в нем дело? Если с компьютера отправлять поток данных, а nodemcu его ловит, то если в этот момент нажать кнопку сброса на nodemcu, он после этого перестает принимать данные. Надо, сначала остановить передачу, потом можно сброс жать, и только потом снова начинать передачу. Т.е. в момент сброса, данные не должны передаваться. Может что то подобное в моем случае?
Ура! Все получилось! Вместо nodeMCU поставил esp8266-01 (вчера, как раз приехали), и все ок. Получается, что схема встроенного переходника usb-ttl мешала как-то. Остается вопрос, это из-за кривого экземпляра, или закономерность, которую можно обойти правильным решением?