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

RTL87xx Arduino

nicelight

Member
Люди совсем связь с реальностью потеряли. Никто вам ничего не должен... просто верх наглости конечно.
Каюсь. Постараюсь впредь не наглеть с высказыванием мыслей о том, что лучше уж ничего не писать, и направлять этот рессурс в развитие, или более серьезные ответы, чем тратить кучу времени на посты хвастовства))).
Вы поймите, вот у вас есть уровень какой то? У и у меня какой то есть. Мне хочется развиваться дальше и просто получать овтеты на вопросы, о том, в какую сторону гуглить и где искать ответы. Но чаще выходит, что от pvvx я получаю насмешки и прочие выше описаные "плюшки". Просто потому что я телепузик и не дорос. а Он шарит и может себе позволить смотреть сверху)). Каждое мое сообщение ему пишется в надежде что может сегодня он соизволит снизойти и написать более менее вменяемый ответ или ткнуть носом в место, где и как нагуглить ответ или где он уже об этом говорил) А выходит чаще тыканье носом в грязьку. :)
 

nicelight

Member
А давайте мы действительно краудфандинг попробуем организовать, для тех кто может найти на это время и просто может запилить поддержку чипов realtek ардуиновской средой, с портом некоторых основных библиотек. Пускай костыльную, но все же.. . я бы поддержал рублем точно! )
Ну и готов был бы перенять опыт, чтобы далее принимать участие в проекте и портировать оставшиеся либы и пр. самостоятельно.
 

Neov

Member
А давайте мы действительно краудфандинг попробуем организовать, для тех кто может найти на это время и просто может запилить поддержку чипов realtek ардуиновской средой, с портом некоторых основных библиотек. Пускай костыльную, но все же.. . я бы поддержал рублем точно! )
Ну и готов был бы перенять опыт, чтобы далее принимать участие в проекте и портировать оставшиеся либы и пр. самостоятельно.
Ему это не интересно. Интеллектуальная творческая личность, с крайне специфическим характером :)
 

Simon

Member
Каждое мое сообщение ему пишется в надежде что может сегодня он соизволит снизойти и написать более менее вменяемый ответ или ткнуть носом в место, где и как нагуглить ответ или где он уже об этом говорил) А выходит чаще тыканье носом в грязьку. :)
У кого-то здесь на форуме есть хорошая подпись "Чтобы правильно задать вопрос, нужно знать большую часть ответа." И это абсолютно верно. Видимо, вы еще не доросли до уровня, при котором можно задавать именно технические вопросы. Подумайте над этим.
А на "тыканье носом в грязьку" в интернете умные люди должны не обращать внимания, вы сюда за технической информацией пришли или так, языком почесать?
 

Simon

Member
А давайте мы действительно краудфандинг попробуем организовать, для тех кто может найти на это время и просто может запилить поддержку чипов realtek ардуиновской средой, с портом некоторых основных библиотек. Пускай костыльную, но все же.. . я бы поддержал рублем точно! )
А чем текущая rtlduino не устраивает? У меня все без проблем там работает, даже скучно. Мелкие ошибки(точнее, даже несоответствия реализаций) удалось отловить самому.
 

Pilnikov

Active member
А чем текущая rtlduino не устраивает? У меня все без проблем там работает, даже скучно. Мелкие ошибки(точнее, даже несоответствия реализаций) удалось отловить самому.
ESP8266WebServer - ПОРТИРУЙТЕ
Чтобы методы были такими-же
Код:
#######################################
# Methods and Functions (KEYWORD2)
#######################################

begin    KEYWORD2
handleClient    KEYWORD2
on    KEYWORD2
addHandler    KEYWORD2
uri    KEYWORD2
method    KEYWORD2
client    KEYWORD2
send    KEYWORD2
arg    KEYWORD2
argName    KEYWORD2
args    KEYWORD2
hasArg    KEYWORD2
onNotFound    KEYWORD2
RGBmatrixPanel.h от Adafruit туда-же
 

pvvx

Активный участник сообщества
Каюсь. Постараюсь впредь не наглеть с высказыванием мыслей о том, что лучше уж ничего не писать, и направлять этот рессурс в развитие, или более серьезные ответы, чем тратить кучу времени на посты хвастовства))).
Вы поймите, вот у вас есть уровень какой то? У и у меня какой то есть. Мне хочется развиваться дальше и просто получать овтеты на вопросы, о том, в какую сторону гуглить и где искать ответы. Но чаще выходит, что от pvvx я получаю насмешки и прочие выше описаные "плюшки". Просто потому что я телепузик и не дорос. а Он шарит и может себе позволить смотреть сверху)). Каждое мое сообщение ему пишется в надежде что может сегодня он соизволит снизойти и написать более менее вменяемый ответ или ткнуть носом в место, где и как нагуглить ответ или где он уже об этом говорил) А выходит чаще тыканье носом в грязьку. :)
Вы наверно не понимаете, что мне мне не понять того, что вы не знаете и ответ не построить. Приходиться действовать другими методами - разговорить, чтобы добраться до сути. Если диалог будет построен как у алкашей - Уважам, и я уважам, ... то до технической сути и конкретизации вопроса никогда не доходит. 90% вываливают что-то более твердое, только когда поставлены к стенке. :) Так-же советую вам посмотреть серьезные технические форумы или как решаются задачи у докторов наук при регулярных сборах на кухне... :)
 

Simon

Member
ESP8266WebServer - ПОРТИРУЙТЕ
Я бы рекомендовал "портировать" от ардуино, а не от есп. Какой-то самый простой оттуда работает. Там только есть особенности в реализации WiFiClient, которые довольно прозрачны, если посмотреть исходники. Для этого рекомендую поставить Sloeber (Eclipse), чтобы не мучиться с поиском по текстовым файлам вручную.
И опять подход в стиле "а ну-ка делайте мне". Откуда вообще это берется? Нет бы нормально расписать проблему(лаконично, четко, без вываливания никому ненужных избыточных простыней кода).
 

pvvx

Активный участник сообщества
Просто уже у многих возникает вопрос: "А стоило кашу то заваривать?"
А стоило вообще развиваться IoT? Темп то у него набирает обороты не по прямой, а в прогрессии. Так-же и варианты SoC от разных производителей будут далее выходить намного чаше, чем пишется представленная вами книжка. И как в этом наступающем фронте со всех дыр вы сможете удержаться и не быть откинуты в зад? В одиночку проекты в мегабайты нативных исходников никто давно уже не тянет. Вы же предлагаете мне убить всё время на разбор и пеработку 80 мегабайт СИ и прочих скриптов только в SDK к RTL871x. Если даже это проделать, на это уйдут годы в одиночку и за это время выйдет что-то более лучшее, созданное группами с финансированием и заинтересованностью. А я даже не программист, тем более не писатель художественной литературы... Подумайте сначала, что предлагаете... :)
 

Pilnikov

Active member
Я бы рекомендовал "портировать" от ардуино, а не от есп. Какой-то самый простой оттуда работает. Там только есть особенности в реализации WiFiClient, которые довольно прозрачны, если посмотреть исходники. Для этого рекомендую поставить Sloeber (Eclipse), чтобы не мучиться с поиском по текстовым файлам вручную.
И опять подход в стиле "а ну-ка делайте мне". Откуда вообще это берется? Нет бы нормально расписать проблему(лаконично, четко, без вываливания никому ненужных избыточных простыней кода).
Дайте лутче
пример малюсенькой в пару тройку элементов web морды на json или ajax с отображением парочки динамических данных, и возможностью ввода пары параметров.
И, возможно, не придется ничего портировать.

Вот это как реализовать?
Код:
void handleSetWiFi()
{
  serv_ms = millis();
  //url='/set_wifi?as='+as+'&ap='+ap+'&ss='+ss+'&sp='+sp;
  strcpy(conf_data.ap_ssid, server.arg(0).c_str());
  strcpy(conf_data.ap_pass, server.arg(1).c_str());
  strcpy(conf_data.sta_ssid, server.arg(2).c_str());
  strcpy(conf_data.sta_pass, server.arg(3).c_str());
  strcpy(conf_data.test, "ok");
  check_and_save_conf_data(conf_data);
  server.send(200, "text/html", "OK!");
}
 

pvvx

Активный участник сообщества
ESP8266WebServer - ПОРТИРУЙТЕ
Чтобы методы были такими-же
Код:
#######################################
# Methods and Functions (KEYWORD2)
#######################################

begin    KEYWORD2
handleClient    KEYWORD2
on    KEYWORD2
addHandler    KEYWORD2
uri    KEYWORD2
method    KEYWORD2
client    KEYWORD2
send    KEYWORD2
arg    KEYWORD2
argName    KEYWORD2
args    KEYWORD2
hasArg    KEYWORD2
onNotFound    KEYWORD2
RGBmatrixPanel.h от Adafruit туда-же
А зачем плодить тупиковый вариант? Основная причина - вы привыкли к нему? Это уже походит на наркоманию. :)
Данный сервер имеет методы не для многопоточных ОС (RTOS) и не имеет никаких перспектив в развитии. Его методы никак не годятся для класса устройств с 0.5...16 МБ памятью. Вот как нему прилепить HTTPS или другие современные развивающиеся методы HTTP/HTML5 и т.д.?
 

pvvx

Активный участник сообщества
И, возможно, не придется ничего портировать.
Вот это как реализовать?
Код:
void handleSetWiFi()
{
  serv_ms = millis();
  //url='/set_wifi?as='+as+'&ap='+ap+'&ss='+ss+'&sp='+sp;
  strcpy(conf_data.ap_ssid, server.arg(0).c_str());
  strcpy(conf_data.ap_pass, server.arg(1).c_str());
  strcpy(conf_data.sta_ssid, server.arg(2).c_str());
  strcpy(conf_data.sta_pass, server.arg(3).c_str());
  strcpy(conf_data.test, "ok");
  check_and_save_conf_data(conf_data);
  server.send(200, "text/html", "OK!");
}
Можно так:
Код:
      else ifcmp("ap_") {
         cstr+=3;
          ifcmp("ssid") {
             if(pvar[0]!='\0') {
                 int len = os_strlen(pvar);
                 if(len > sizeof(wifi_ap_cfg.ssid)) {
                     len = sizeof(wifi_ap_cfg.ssid);
                 }
                 else os_memset(wifi_ap_cfg.ssid, 0, sizeof(wifi_ap_cfg.ssid));
                 os_memcpy(wifi_ap_cfg.ssid, pvar, len);
#ifdef USE_NETBIOS
                 netbios_set_name(wifi_ap_cfg.ssid);
#endif
             }
          }
          else ifcmp("psw") {
             int len = os_strlen(pvar);
             if(len > sizeof(wifi_ap_cfg.password)) {
                 len = sizeof(wifi_ap_cfg.password);
             }
             else os_memset(wifi_ap_cfg.password, 0, sizeof(wifi_ap_cfg.password));
             os_memcpy(wifi_ap_cfg.password, pvar, len);
          }
          else ifcmp("chl")     wifi_ap_cfg.channel = val;
          else ifcmp("mcns")     wifi_ap_cfg.max_sta = val;
          else ifcmp("auth")     wifi_ap_cfg.security_type = (val)? RTW_SECURITY_WEP_PSK : RTW_SECURITY_OPEN;
          else ifcmp("hssid")     wifi_ap_cfg.ssid_hidden = val;
          else ifcmp("bint")     wifi_ap_cfg.beacon_interval = val;
#if LWIP_NETIF_HOSTNAME
          else ifcmp("hostname") {
               int len = os_strlen(pvar);
               if(len >= LWIP_NETIF_HOSTNAME_SIZE) {
                   len = LWIP_NETIF_HOSTNAME_SIZE-1;
               }
               os_memcpy(lwip_host_name[wlan_ap_netifn], pvar, len);
               lwip_host_name[wlan_ap_netifn][len] = 0;
               netbios_set_name(wlan_ap_netifn, pvar);
          }
#endif
          else ifcmp("dhcp")    wifi_ap_dhcp.mode = val;
          else ifcmp("ip")         wifi_ap_dhcp.ip = ipaddr_addr(pvar);
          else ifcmp("gw")         wifi_ap_dhcp.gw = ipaddr_addr(pvar);
          else ifcmp("msk")     wifi_ap_dhcp.mask = ipaddr_addr(pvar);
#if DEBUGSOO > 2
          else os_printf(" - none! ");
#endif
      }
      else ifcmp("st_") {
         cstr+=3;
          ifcmp("arec")     wifi_st_cfg.autoreconnect = val;
          else ifcmp("rect")     wifi_st_cfg.reconnect_pause = val;
          else ifcmp("ssid") {
             if(pvar[0]!='\0') {
                   int len = os_strlen(pvar);
                   if(len > sizeof(wifi_st_cfg.ssid)) {
                       len = sizeof(wifi_st_cfg.ssid);
                   }
                   else os_memset(wifi_st_cfg.ssid, 0, sizeof(wifi_st_cfg.ssid));
                   os_memcpy(wifi_st_cfg.ssid, pvar, len);
             }
          }
          else ifcmp("psw") {
             int len = os_strlen(pvar);
             if(len > sizeof(wifi_st_cfg.password)) {
                 len = sizeof(wifi_st_cfg.password);
             }
             else os_memset(wifi_st_cfg.password, 0, sizeof(wifi_st_cfg.password));
             os_memcpy(wifi_st_cfg.password, pvar, len);
          }
          else ifcmp("auth")     wifi_st_cfg.security_type = val;
          else ifcmp("bssid")     strtomac(pvar, wifi_st_cfg.bssid);
          else ifcmp("sbss")     wifi_st_cfg.flg = val;
#if LWIP_NETIF_HOSTNAME
          else ifcmp("hostname") {
               int len = os_strlen(pvar);
               if(len >= LWIP_NETIF_HOSTNAME_SIZE) {
                   len = LWIP_NETIF_HOSTNAME_SIZE-1;
               }
               os_memcpy(lwip_host_name[wlan_st_netifn], pvar, len);
               lwip_host_name[wlan_st_netifn][len] = 0;
               netbios_set_name(wlan_st_netifn, pvar);
          }
#endif
          else ifcmp("dhcp")     wifi_st_dhcp.mode = val;
         else ifcmp("ip")         wifi_st_dhcp.ip = ipaddr_addr(pvar);
          else ifcmp("gw")         wifi_st_dhcp.gw = ipaddr_addr(pvar);
          else ifcmp("msk")     wifi_st_dhcp.mask = ipaddr_addr(pvar);
Итого примерно, в первой версии, чисто для отладки:
https://esp8266.ru/forum/attachments/snimok1393-gif.3999/
ЗЫЖ Даже картинку некогда поменять, а вы уже хотите всё готовое... :)
Вот пока это лепил, нашел с десяток сурьезных ошибок в SDK, благо исходники есть и можно поправить...
Вот вы бы поправили для начала безобразие от Ameba с настройкой пинов в wiring_digital.c. Там не сложно - надо всё выкинуть и написать проще и правильнее. А то оно не работает, вообще - повторно не переключает направления пинов и их режимы. Амебщики там даже вставили digitalChangeDir(), т.к. поняли что их код не работает.
RtlDuino/wiring_digital.c at master · pvvx/RtlDuino · GitHub
 
Последнее редактирование:

pvvx

Активный участник сообщества
Кто расскажет, почему в Дурине пишем pinMode(_pinData, OUTPUT_OPENDRAIN);
Далее выводим в порт HIGH (!), а получаем LOW уровень на пине! digitalWrite(_pinData, HIGH)
Это кто так придумал? Где его найти?
 

Юрий Ботов

Moderator
Команда форума
Кто расскажет, почему в Дурине пишем pinMode(_pinData, OUTPUT_OPENDRAIN);
Далее выводим в порт HIGH (!), а получаем LOW уровень на пине! digitalWrite(_pinData, HIGH)
Это кто так придумал? Где его найти?
Мне кажется такова логика классического ардуинщика: "LOW на открытом коллекторе - значит лампочка загорится, значит HIGH"
 

A_D

Active member
Кто расскажет, почему в Дурине пишем pinMode(_pinData, OUTPUT_OPENDRAIN);
Далее выводим в порт HIGH (!), а получаем LOW уровень на пине! digitalWrite(_pinData, HIGH)
Это кто так придумал? Где его найти?
это вроде во всех АРМах так, я как на наших 1986ВЕ9х так и на STM32 с этим сталкивался (вот пример использования на STM32) - логика простая, просто активен только нижний полевик и его вход не инвертирован, дали HIGH - он открылся и притянул к земле выход.
 

Pilnikov

Active member
Можно так:
Итого примерно, в первой версии, чисто для отладки:
https://esp8266.ru/forum/attachments/snimok1393-gif.3999/
ЗЫЖ Даже картинку некогда поменять, а вы уже хотите всё готовое... :)
RtlDuino/wiring_digital.c at master · pvvx/RtlDuino · GitHub
Сложновато конечно, но если с комментами и оформить в виде примера (законченного) то подет.
А по поводу привыкания и наркоты - это в корне не так! Я за любой шухер лишь бы работало.
Мне показали так, я попробывал - у меня получилось - малость разобрался (не вдаваясь глубоко) - приспособил под свою задачку - profit!
А контроллер поменялсо - все, слазь, конечная! я по другому просто не умею.
У нас, у телепузиков, ведь как - нам лишь бы слепить побырому, а из чего и как это только гуру кухни в курсах.
 

pvvx

Активный участник сообщества
И c такой логикой подобие i2c не сделать. Инверсия при "Открытом Коллекторе", даже на чтение, а переключение на ходу направления "вход/выход" не работает, тем более его не стоит применять при мультизадачке - неизвестно и на сколько прервется процесс и будет КЗ.
В итоге - на вумной логике Дуринщиков ничего не сделать и завязываем с Arduino.
Оставляем её для 8-ми битных MCU. Нехай покоиться в них. :p
 

pvvx

Активный участник сообщества
Зачем и-квадрат на открытом коллекторе? И, вроде, пример с LCD по IIC уже есть и работает.
Опять панику наводите.
Все LCD и прочие панели у меня на SPI.
Ножкой хочу дрыгать - не выходит. Вы же не починили простые функции установки направлений GPIO на ввод и вывод (баги от Ameba) и не поставили других ядер CPU на исполнение других потоков, для выделения одного для обработки исключительно одного непрерывного потока по алгоритмам Arduino.
У меня, к примеру, висят на двух проводках микрухи типа SHT7x и прочие I2C. Те, ктороые I2C опрашиваются аппаратным I2C, а вот другие имею сигнал готовности и прочие. В них надо нагнать битики, переключая направление и следить что уровень на линиях не опущен и т.д. Вот не выходит. Процесс ногдрыга прерывается другими задачами, а они на линииях выставляют всякие сигналы и выходит КЗ. Резисторы городить не могу - частоты I2C к мегагерцу...
Так-же, в стандарте (!) I2C, CLK и SDA могут быть притянуты к gnd устройством, что означает "занято" и подобное. Аппаратный I2C у RTL это всё понимает и работает только в режиме "Открытый коллектор", а вот ногодрыгом не выходит...
Вам же партия и правительстово доверило ремонт кода ногодрыга от Ameba и даже указало конктетный файл. Ну а пока вы его не починили - никаких изменений и продолжений в развитии Arduino не будет. На этом жирная точка в Arduino + RTL871x.
Считайте это блажью или ещё чем, но более легкой сторонней задачи для проверки вопроса "а нужна ли Arduino на RTL871x народу" я не нашел.
Тама ещё @nicelight рвался в бой - кооперируйтесь, ищите кого или сами. Когда почините, представите работающий код в любом виде, тогда и буду думать дальше :) Других то желающих иметь Arduino на RTL нет. Вас всего 2 человека.
В API к SDK переключения I/O работают изумительно, в Mbed к RTL - тоже.
 
Последнее редактирование:
Сверху Снизу