• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Прошивка TCP2UART переходника с настройкой по Web

Evgeniy932

New member
И не справится. Для нормальной работы только TCP сокета вам потребуется от пол мегабайта статических буферов и ещё сколько-то для буферизации потока.
Хм, с вебсокетами не теряются пакеты даже по 64 кб. Странно это. Видимо за счет передачи чанками по 1024 байт - это работает нормально в условиях ESP32.
WebSockets считается неликвидным по безопасности.
Есть WSS.
Like HTTPS, WSS (WebSockets over SSL/TLS) is encrypted, thus protecting against man-in-the-middle attacks. A variety of attacks against WebSockets become impossible if the transport is secured.
 

Evgeniy932

New member
Кто вам мешает? Встройте в него скоростную DRAM, не тормозную SPI RAM, и всё в статике, без heap и будет вам счастье и безотказность, если остальные части чипа позволят :)
Эти ребята из Espressif новые сюрпризы преподносят:
Код:
// Workaround for RS485: If the RS485 half duplex mode is active
                // and transmitter is in idle state then reset received buffer and reset RTS pin
                // skip this behavior for other UART modes
                UART_ENTER_CRITICAL_ISR(&(uart_context[uart_num].spinlock));
                uart_hal_disable_intr_mask(&(uart_context[uart_num].hal), UART_INTR_TX_DONE);
                if (UART_IS_MODE_SET(uart_num, UART_MODE_RS485_HALF_DUPLEX)) {
                    uart_hal_rxfifo_rst(&(uart_context[uart_num].hal));
                    uart_hal_set_rts(&(uart_context[uart_num].hal), 1);
                }
Вот откуда возьмется лишний байт в приемном буфере, если на линии RX в режиме передачи, да и в режиме приема - уровень не менялся, т.к. подтянут к +3.3В.
Вот на ESP8266 такой проблемы не было. Видимо UART лучше вообще наружу вынести, в отдельный проц, для надежности.
Программно решается эта проблема.
 

pvvx

Активный участник сообщества
Вот откуда возьмется лишний байт в приемном буфере, если на линии RX в режиме передачи, да и в режиме приема - уровень не менялся, т.к. подтянут к +3.3В.
Этот кусок кода ни о чем не говорит.
У UART есть такое - loopback, да прерывание по тишине по установленному кол-ву тиков на RX.
Установив регистр счетчика тишины и задав loopback, выводим в TX и по прерыванию тишины на RX отключаем вами не понятый "DEN" и переключаемся в режим приема...
По остальному - вам пора представить сообществу новую глюко-версию на ESP32 :)
Или пройти платное обучение...
 

Evgeniy932

New member
По остальному - вам пора представить сообществу новую глюко-версию на ESP32 :)
Или пройти платное обучение...
Похоже пора с ESP32 тоже переходить на что-то другое, есть там нерешенные проблемы: https://github.com/espressif/esp-idf/issues/7315

Установив регистр счетчика тишины и задав loopback, выводим в TX и по прерыванию тишины на RX отключаем вами не понятый "DEN" и переключаемся в режим приема...
Вот именно здесь тайминг и не подошел. Все равно на 921600 позднее, чем нужно отключался DEN.
 

pvvx

Активный участник сообщества
Вот именно здесь тайминг и не подошел. Все равно на 921600 позднее, чем нужно отключался DEN.
Я этого не заметил, т.к. успешно работает и за пару мегабит, учитывая джиттер прерывания.
Это не относится к С++, т.к. там идут запросы памяти в heap, происходящие с запретом прерываний.
 

pvvx

Активный участник сообщества
Это не относится к С++, т.к. там идут запросы памяти в heap, происходящие с запретом прерываний. И у ESP32 два ядра и система имеет массу дополнительного кода для меж-ядерного распределения памяти и ресурсов с запретом прерываний, а SPI-Flash имеет те-же скоростные показатели для считывания кода для CPU, плюс более длинный код исполнения, который давно уже не лезет в кэш...
По этому ESP32 аутсайдер = кривая разработка.
 

pvvx

Активный участник сообщества
Даже с UART вы всё равно упретесь в распределение времени в блобах закрытых либ WiFi и прочего, не имея возможности что-то там подправить. Это не говоря уже о аппаратных зависимостях и глюков в самих чипах. Как итог - ESP не используется ни в одном пром. контроллере. Это чипы подходили для начального обучения программированию и на сегодня уже не выполняют и эту роль из-за устаревания поддержки современных стандартов и алгоритмов. Оставьте их использование “самоделкиным” – пусть маются.
 

pvvx

Активный участник сообщества
Какой смысл изучать и пытаться впихнуть ‘невпихуемое’ в чип десятилетней давности, имеющий ужасное распределение ресурсов и общей модели, да ещё изготовленных по древней технологии приводящей к дикому потреблению? На сегодня это могут себе позволить только мазохисты и некромансеры. Для современной электроники таких чипов пара лет = полное устаревание. А архитектура ESP не менялась уже более 7 лет. Только раздули и извратили, не решив основные проблемы известные уже до первоначальной разработки… С этими проблемами и борются в ESP по сей день, да бестолку, т.к. они заложены в основу первоначальной модели и решения у них нет и не будет в данных чипах.
 

pvvx

Активный участник сообщества
Если рассматривать применимость для поддержки сетевых протоколов, то первое что необходимо обеспечить – быструю буферизацию и распределение малого физического размера RAM на кусочки, которые можно представить в линейную область для динамических запросов памяти приложением. Для этого был создан механизм MMU (и не только для этого). Но его в ESP нет. В итоге имеет неизбежную дефрагментацию динамической памяти и отказ работы, включая системные вызовы. А тот-же древний MIPS запросто работает и по сей день, полностью обеспечивая сетевые протоколы при малой физической RAM. Попробуйте это исправить в ESP :p
 

pvvx

Активный участник сообщества
Но Ардуинщики влепили в ESP С++ с вариантом реализации основанным на heap модели подверженной дефрагментации. Этого уже достаточно, чтобы ESP стал нестабильным и не смог применяться в рабочих устройствах, а для игры в тамагочи – подходит.
 

Evgeniy932

New member
Удалось получить стабильную передачу данных UART 921600 -> TCP через разделение по разным таскам чтение из порта и запись в сокет, через StreamBuffer.
Порог при котором аппаратный FIFO UART'a сбрасывается в FIFO в RAM (размер 8192 байта, не принципиально) уменьшил с 120 байт до 30 байт.
Это на ESP32, но общий принцип одинаков для любых SoC.
Прекрасно работает с посылками по 73 кб, принимаемых по UART.
 

64detali

New member
Приветствую, прошу немного помочь разобраться в проблеме TCP2UART Connection: closed . ESP-01 подключен только к пк через вайфай свисток, собственно через него и загружался веб, это нормально?
 

Вложения

Всем привет! Подскажите как на основе TCP2UART реализовать такое:
В html странице поле для ввода значения . При открытии этой страницы чтобы при помощи JavaScript каким то образом в это поле попадали данные из RX uart .
Например на RX uart я постоянно с интервалом 2-3 раза в секунду шлю строку с данными с CRC в конце .
Мне нужно эти данные чтобы попали в определенные поля в html .
Как передать на TX uart , я знаю. И оно нормально работает . А вот на прием решения не найду (желательно чтобы оригинальный исходник не править). Если это невозможно , то подскажите где в исходниках копаться.
 

leha_m1986

New member
Здравствуйте! Помогите разобраться с настройкой интерфейса после прошивки ESP. После любых изменений в WiFi settings не могу попасть в на эту же страницу.
 

Alecs_2000

New member
что то у меня ни один модуль есп-01 с любой прошивкой фул флеш не хочет создавать точку доступа. в терминале на странной скорости в 74880 бод пишет.


ets Jan 8 2013,rst cause:2, boot mode:(3,6)

load 0x40100000, len 92, room 16
tail 12
chksum 0xef
csum 0xef
csum err
ets_main.c
 

pvvx

Активный участник сообщества
Данным прошивкам всё равно что записано до них в Flash.
Если какие-то ошибки, то это неправильно записали данные в Flash или несоответствие выставленных QSPI и прочих настроек и подключения Flash в модуле.
 

pvvx

Активный участник сообщества
что то у меня ни один модуль есп-01 с любой прошивкой фул флеш не хочет создавать точку доступа. в терминале на странной скорости в 74880 бод пишет.
ets Jan 8 2013,rst cause:2, boot mode (3,6)
DeepSeek: Какие бывают значения "cause" при старте ESP8266?

При запуске ESP8266 в UART-логах может выводиться cause: X, где X — это код причины перезагрузки.
Основные значения cause в ESP8266
КодПричина перезагрузкиОписание
0POWERONПодача питания (обычный старт).
1EXTERNAL_RESETВнешний сброс (например, через пин RESET).
2EXCEPTION (EXCAUSE_UNALIGNED)Ошибка выравнивания памяти (некорректный доступ к данным).
3SOFT_WDT_RESETСрабатывание программного Watchdog Timer (зависание кода).
4HARD_WDT_RESETСрабатывание аппаратного Watchdog Timer (критическое зависание).
5DEEP_SLEEP_AWAKEПробуждение из глубокого сна (deepSleep()).
6SOFT_RESTARTПрограммная перезагрузка (например, через ESP.restart()).
7EXT_CPU_RESETСброс внешним процессором (редко).
8EXCEPTION (EXCAUSE_ILLEGAL_INSTRUCTION)Попытка выполнить недопустимую инструкцию (битый код или память).
9EXCEPTION (EXCAUSE_INSTR_FETCH_ERROR)Ошибка чтения инструкции (повреждение флеш-памяти или неверный адрес).
Дополнительные коды исключений (если cause:2)
Если причина — 2 (EXCEPTION), то дополнительно может выводиться exccause: X, уточняющий тип исключения:
exccauseТип исключенияОписание
0IllegalInstructionНедопустимая инструкция.
1SyscallОшибка в системном вызове.
2InstructionFetchErrorОшибка чтения команды (битая прошивка или флеш).
3LoadStoreErrorОшибка загрузки/сохранения данных (неверный адрес).
4Level1InterruptПрерывание уровня 1.
5AllocaОшибка выделения памяти (например, стек переполнен).
6IntegerDivideByZeroДеление на ноль.
7UnalignedAccessНевыровненный доступ к памяти (самый частый при cause:2).
8+Другие ошибкиРедкие случаи (например, ошибки FPU, защиты памяти).
 

pvvx

Активный участник сообщества
DeepSeek: Что означают значения "boot mode" при старте ESP8266?

При старте ESP8266 в логах UART может выводиться boot mode (x,y), где x и y — это параметры, определяющие режим загрузки модуля. Эти значения зависят от состояния GPIO при включении питания.
Основные значения boot mode (x,y)
Значения x и y формируются на основе состояний пинов GPIO15 (MTDO), GPIO2, GPIO0 при старте:
boot mode (x,y)GPIO0GPIO2GPIO15Режим загрузкиОписание
(1,6)110UART-загрузчик (Flash Boot)Обычный режим — загрузка прошивки из Flash (рабочий режим).
(1,7)100Ошибка!GPIO2 должен быть HIGH при загрузке, иначе ESP может не стартовать.
(1,1)0X0UART-загрузчик (Download Mode)Режим прошивки — можно загружать код через UART (например, esptool.py).
(1,0)0X1Неиспользуемый режимОбычно приводит к сбою загрузки.
(1,2)1X1SDIO-режимИспользуется для загрузки с SD-карты (редко).
(1,3)1X1Режим тестирования (RF)Для внутреннего тестирования Wi-Fi (не для пользователя).
(1,4)1X1Неиспользуемый режимОбычно приводит к сбою.
(1,5)1X1Неиспользуемый режимОбычно приводит к сбою.
Как проверить режим загрузки?
  1. Подключите UART-адаптер (например, CH340/CP2102) и откройте терминал (115200 бод).
  2. Наблюдайте логи при включении — в первых строках будет boot mode (x,y).
  3. Сравните с таблицей выше, чтобы понять, в каком режиме запустился ESP8266.
 

Alecs_2000

New member
спасибо , но не очень понял что мне с этой информацией делать, другие прошивки залетают и работают. esplink например.
 
Сверху Снизу