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

Обсуждение Парсинг URL &key=val&...

pvvx

Активный участник сообщества
Если я не ошибаюсь, конкретно в данном случае строка приходит в теле сообщения, а не в заголовке. А значит, кодированиям не подвержена. По-крайней мере так было у меня при проверке.
Content-Type: application/x-www-form-urlencoded = http://en.wikipedia.org/wiki/Percent-encoding
И такие данные ныне передаются в multipart/form-data formats
Ссылка для примера http://www.restfm.com/restfm-manual...ing-data/applicationx-www-form-urlencoded-and
Любой, уважающий форматы прокси исказит ваши данные :p
Вы используете HTTP протокол, а не нативный TCP. А HTTP нормирован всякими стандартами и .... Короче нафиг современным браузерам и сетям поддерживать огрызки того века? Не стоит заниматься некромантией (оживлять мертвецов) :)

Взялись за реализацию парсинга HTTP запроса – делайте это нормально. Зачем нужен глюк? Не можете поддержать стандарт – делайте на другом протоколе, который проще.
 
Последнее редактирование:

Alex_S

New member
Да, на заголовок Content-Type я не обратил внимания. Тады согласен с написанным!
 

Nail

New member
Добрый день, обьясните почему при отсоединении линии TxD от PC(компьютер), esp8266 перестает принимать данные на линии RxD.

|PC|-(RxD)<----(TxD)-|esp8266|-(RxD)<-(TxD)-|ID-20(rfid)| - данные читаются
|PC|-(RxD)<-X-(TxD)-|esp8266|-(RxD)<-(TxD)-|ID-20(rfid)| - данные не читаются

настройеи UART:
Код:
HardwareSerial* HardwareSerial::s_serials[1] = {0};


    void HardwareSerial_rx_handler()
    {
        uint32_t uart_intr_status = READ_PERI_REG(UART_INT_ST(0));

        while (uart_intr_status != 0)
        {
            if (UART_RXFIFO_FULL_INT_ST == (uart_intr_status & UART_RXFIFO_FULL_INT_ST))
            {
                while (READ_PERI_REG(UART_STATUS(0)) & (UART_RXFIFO_CNT << UART_RXFIFO_CNT_S))
                {
                    uint8_t recByte = READ_PERI_REG(UART_FIFO(0)) & 0xFF;
                    HardwareSerial::getSerial(0)->put(recByte);
                }
                WRITE_PERI_REG(UART_INT_CLR(0), UART_RXFIFO_FULL_INT_CLR);
            }
            uart_intr_status = READ_PERI_REG(UART_INT_ST(0));
        }
    }


    void ICACHE_FLASH_ATTR HardwareSerial::reconfig(uint32_t baud_rate)
    {
        // wait tx fifo empty
        while (READ_PERI_REG(UART_STATUS(0)) & (UART_TXFIFO_CNT << UART_TXFIFO_CNT_S));

        PIN_PULLUP_DIS(PERIPHS_IO_MUX_U0TXD_U);
        PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0RXD_U, FUNC_U0RXD);
        PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_U0TXD);

        // no flow ctrl
        CLEAR_PERI_REG_MASK(UART_CONF0(0), UART_TX_FLOW_EN);
        CLEAR_PERI_REG_MASK(UART_CONF1(0), UART_RX_FLOW_EN);

        uart_div_modify(0, UART_CLK_FREQ / baud_rate);

        WRITE_PERI_REG(UART_CONF0(0),
                      | (0x1 << UART_STOP_BIT_NUM_S)    // 1 stop bit
                      | (0x3 << UART_BIT_NUM_S));        // 8 data bits

        // reset fifo
        SET_PERI_REG_MASK(UART_CONF0(0), UART_RXFIFO_RST | UART_TXFIFO_RST);
        CLEAR_PERI_REG_MASK(UART_CONF0(0), UART_RXFIFO_RST | UART_TXFIFO_RST);

        uint8_t const UART_RX_TimeOutIntrThresh   = 2;
        uint8_t const UART_TX_FifoEmptyIntrThresh = 20;
        uint8_t const UART_RX_FifoFullIntrThresh  = 1;
        uint32_t reg_val = 0;
        WRITE_PERI_REG(UART_INT_CLR(0), UART_INTR_MASK);
        reg_val = READ_PERI_REG(UART_CONF1(0)) & ~((UART_RX_FLOW_THRHD << UART_RX_FLOW_THRHD_S) | UART_RX_FLOW_EN) ;
        reg_val |= ((UART_RX_TimeOutIntrThresh & UART_RX_TOUT_THRHD) << UART_RX_TOUT_THRHD_S) | UART_RX_TOUT_EN;
        reg_val |= (UART_RX_FifoFullIntrThresh & UART_RXFIFO_FULL_THRHD) << UART_RXFIFO_FULL_THRHD_S;
        reg_val |= (UART_TX_FifoEmptyIntrThresh & UART_TXFIFO_EMPTY_THRHD) << UART_TXFIFO_EMPTY_THRHD_S;
        WRITE_PERI_REG(UART_CONF1(0), reg_val);

        CLEAR_PERI_REG_MASK(UART_INT_ENA(0), UART_INTR_MASK);
        SET_PERI_REG_MASK(UART_INT_ENA(0), UART_RXFIFO_FULL_INT_ENA);
        _xt_isr_attach(ETS_UART_INUM, HardwareSerial_rx_handler);

        ETS_UART_INTR_ENABLE();
    }
  
    void ICACHE_FLASH_ATTR HardwareSerial::write(uint8_t b)
    {
        while (true)
        {
            uint32_t fifo_cnt = READ_PERI_REG(UART_STATUS(0)) & (UART_TXFIFO_CNT << UART_TXFIFO_CNT_S);
            if ((fifo_cnt >> UART_TXFIFO_CNT_S & UART_TXFIFO_CNT) < 126)
                break;
        }
        WRITE_PERI_REG(UART_FIFO(0) , b);
    }
 
Последнее редактирование:
Сверху Снизу