Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Разработка ‘библиотеки’ малого webсервера на esp8266.

Тема в разделе "SDK и создание собственных прошивок", создана пользователем pvvx, 3 янв 2015.

  1. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.273
    Симпатии:
    1.318
    Там ещё немного сложнее для правильной реализации. Требуется создание подобия ФАПЧ c фильтрацией на 50 или 60Гц +- нормативы сети с малым запасом. А от него уже плясать задержками включениями (+логика проверки сбоев, выпадений и искажения фазы) и ещё с пересчетом для линейности управления мощностью или по другой характеристике нагрузки... А т.к. это разовая задача, то проще решить поставив спец.чип управления и не маяться. Но ради спорта можно и этим заняться.
    Подключение опроса SPI и I2C к web делаются просто - примеры и исходники есть во многих местах...
     
    Последнее редактирование: 5 фев 2015
    Lstt нравится это.
  2. Algis

    Algis Читатель

    Сообщения:
    36
    Симпатии:
    7
    Да, схема хорошая, а остальное правильно отметил уважаемый pvvx
     
    Lstt нравится это.
  3. amatron

    amatron Читатель

    Сообщения:
    41
    Симпатии:
    7
    Подскажите, пожалуйста, как при помощи переменных, например >~sys.gpio14~ изменить состояние пина (на 0 или 1)?
     
  4. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.273
    Симпатии:
    1.318
    Не могу найти где устанавливается ограничение уровня передатчика WiFi...
    Пока искал, добавил от WiFi:
    <noisefloor>-95</noisefloor>
    <power>2137</power>
    Путем непосредственной записи в регистры ~ram0x60000304=0x10000~ :)
    Описание регистров и адресов I/O дано в ESP8266_GPIO_Register_141105.xls и ESP8266_Pin_List_141105.xlsx. Они находятся в разделе документации на сайте.
    Но лучше написать в СИ что требуется, т.к. регистры I/O имеют множественные варианты управления и установки - входы/выходы/подтяжки, переключения на входы-выходы другой внутренней аппаратуры....
     
  5. Andy Korg

    Andy Korg Moderator Команда форума

    Сообщения:
    414
    Симпатии:
    75
  6. Andy Korg

    Andy Korg Moderator Команда форума

    Сообщения:
    414
    Симпатии:
    75
    Че-то не получается забабахать клиента udp . Не вызывается callback-функция udp_rcv, помогите пожалуйста понять в чем я не прав.
    Код (Text):
    1. #include "lwip/udp.h"
    2. #include "lwip/ip_addr.h"
    3. #include "lwip/err.h"
    4. #include "user_interface.h"
    5.  
    6. struct udp_pcb* udp_nat;
    7.  
    8. uint32 TimeInet = 0;
    9.  
    10. void ICACHE_FLASH_ATTR udp_rcv(void *arg, struct udp_pcb *pcb, struct pbuf *p,
    11.     ip_addr_t *addr, u16_t port){
    12.  
    13.     TimeInet = 0xfffffff0;
    14.  
    15.     if (p->len != 4){
    16.         TimeInet = 0xffffffff;
    17.     }
    18.     else{
    19.         memcpy(&TimeInet, p->payload, 4);
    20.     }
    21.     pbuf_free(p);
    22. }
    23.  
    24. err_t ICACHE_FLASH_ATTR natInit(void){
    25.  
    26.     err_t err = ERR_OK;
    27.     struct ip_addr natIP;
    28.  
    29.     struct pbuf* p = pbuf_alloc(PBUF_TRANSPORT, 1, PBUF_RAM);
    30.  
    31.     struct ip_info wifi_info;
    32.  
    33.     udp_nat = udp_new();
    34.     if (udp_nat != NULL){
    35.         if (wifi_get_ip_info(STATION_IF, &wifi_info)){
    36.             udp_nat->local_ip = wifi_info.ip;
    37.             udp_nat->local_port = 6234;
    38.         }
    39.         udp_recv(udp_nat, udp_rcv, NULL);
    40.         IP4_ADDR(&natIP, 128, 138, 141, 172);
    41.         udp_sendto(udp_nat, p, &natIP, 37);
    42.         pbuf_free(p);
    43.     }
    44.     else {
    45.         err = ERR_MEM;
    46.     }
    47. }
    48.  
     
  7. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.273
    Симпатии:
    1.318
    Возьмите примеры у LwIP http://download.savannah.gnu.org/releases/lwip/
    UDP используется в contrib-1.4.0\apps\netbios\netbios.c и contrib-1.4.0\apps\sntp\sntp.c
    И кто вам сказал, что в текущем pbuf будут данные по payload ? Вы их размер и наличие проверили :) pbuf_copy_partial(...) и т.д.

    В текущем SDK версия LwIP 1.4.0 c некоторыми "патчами", не совсем правильными... Но это уже не относится к вашему коду, а к тому что китай-программер впихнул их неверно сначала уничтожает pcb, а потом лезет в него :). Для одно-задачки и без C++ пойдет, если таймер в это время не сработает и никто память не перераспределит... :)

    Кто подскажет, куда идет байт из OTP области [0x3ff00052] :
    ESP-01: 3ff00050: 00 00 82 0e ad 99 00 02 00 a0 00 00 00 00 00 00
    chip_id = 0x0099ad0e, mac = 1a:fe:34:99:ad:0e
    ESP-12: 3ff00050: 00 00 83 bf c0 9f 00 02 00 a0 00 00 00 00 00 00
    chip_id = 0x009fc0bf, mac = 1a:fe:34:9f:c0:bf
    (помечены все имеющиеся различия в OTP, ROM код идентичен)
    Разбираюсь с различием старых чипов ESP8266 с новыми (почему уровень SAR питания показывает разный).
     
    Последнее редактирование: 6 фев 2015
  8. Andy Korg

    Andy Korg Moderator Команда форума

    Сообщения:
    414
    Симпатии:
    75
    Спасибо за подсказку. Посмотрел примеры, вроде все делаю как тама. А не выходит каменный цветок. Может еще у кого мысли есть?
     
  9. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.273
    Симпатии:
    1.318
    Вы не написали что не работает. Отправка или прием? С какого IP отсылаете на какой IP ESP8266? У ESP8266 2 IP - st/ap. Внутреннего роуминга между ними нет :)
    ----
    Сменил свалку на соответствие Unofficial Development Kit for Espressif ESP8266 v1.0.9 (c) by CHERTS
    Поправил Make, изменил пример udp_test_port.c для Andy Korg на прямую работу с LwIP:
    udp.gif
    Никаких IP от WiFi в UDP не приматывал, отвечает и AP и ST.
     
    Последнее редактирование: 7 фев 2015
  10. Andy Korg

    Andy Korg Moderator Команда форума

    Сообщения:
    414
    Симпатии:
    75
    Я-то по простоте душевной думал, что вот этот код указывает с какого IP отправлять
    Код (Text):
    1.         if (wifi_get_ip_info(STATION_IF, &wifi_info)){
    2.             udp_nat->local_ip = wifi_info.ip;
    3.             udp_nat->local_port = 6234;
    4.         }
    Но потом поковырял функцию udp_sendto и оказалось, что умные люди уже все сделали и написали
    Код (Text):
    1.   netif = ip_route(dst_ip);
    Т.е. сетевой интерфейс выбираться на основе destantion ip и мои потуги выглядеть умным провалились :)
    ----
    Огромное спасибо! Cкачал и посмотрел.
    Один мааленький вопросик: Обязательно делать "err_t err = udp_bind(pcb, IP_ADDR_ANY, portn);" если мне нужен только клиент?
     
    Последнее редактирование: 7 фев 2015
  11. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.273
    Симпатии:
    1.318
    А принимать он будет? Или только отсылать?
     
  12. Andy Korg

    Andy Korg Moderator Команда форума

    Сообщения:
    414
    Симпатии:
    75
    Точняк! Ему же надо принимать ответ от сервера ntp! Вот я лох :)
    Большое спасибо!
     
  13. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.273
    Симпатии:
    1.318
    Нашлось, почему процедура readvdd33() на модулях показывает разное напряжение. Всё оказалось банальнее - у неё внутренняя связь с ножкой входа ADC.
    Меняю напряжение на входе ADC (переменным резиcтором) - меняются показания readvdd33:
    ADC_vs_VDD.gif
    Это на ESP-01. На ESP-12 ещё не пробовал... там у меня не прикручен переменный резистор :)
    ---------
    readvdd33() включает "подтяжку" на VCC и измеряет напряжение на подключенном внешнем сопротивлении на вход ADC ножки чипа и GND:
    ReadVdd.gif

    Процедура uint16 system_adc_read(void) на время измерения выключает WiFi
    (видимо он дает помеху). Перенаправляет к uint16 test_tout(0), в котором измерение происходит между pm_set_sleep_mode(4) .... pm_wakeup_init(4,0).
     
    Последнее редактирование: 8 фев 2015
  14. elAlex

    elAlex Новичок

    Сообщения:
    6
    Симпатии:
    3
    Читаю постоянно этот форум ( сам пока ничего для других не сделал ) и думаю что буду не одинок если выскажу pvvx уважение и благодарность. Спасибо.
     
    alexsmd, Algis и AlexeyGR нравится это.
  15. Algis

    Algis Читатель

    Сообщения:
    36
    Симпатии:
    7
    Согласен на 100%, уважение и благодарность для pvvx :)
     
  16. Algis

    Algis Читатель

    Сообщения:
    36
    Симпатии:
    7
    Кстати. модуль ESP-03 тоже "болен" кривой разводкой хотя и не греется,
    при интенсивном использовании TCP2UART (запрос через каждые 3 сек.) виснет раз в сутки, один раз видимо даже прошивка полетела, так как ожил только после перепрошивки.
    Дополнительный конденсатор с обратной стороны, близко к выводам питания процессора, убрал проблему.
     
  17. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.273
    Симпатии:
    1.318
    Китайцы сделали уже ESP-201 и опять не вывели ножку питания RTC, для продолжения покупки новых модулей. :)
    "ожил только после перепрошивки" - это может быть связано именно с RTC. Там сохраняется конфигурация для рестарта по deep_sleep и т.д. Если нога reset не соединена с pd (не помню какой, описано в PDF-SDK), то рестарта нет и происходит путаница с рестартом... После переключение питания и режимов загрузки - перевод в режим программирования и другие пляски с выводами, решает проблему - оно загружается без перепрошивки.
     
    Последнее редактирование: 9 фев 2015
  18. elAlex

    elAlex Новичок

    Сообщения:
    6
    Симпатии:
    3
    По большому счёту - ничего не мешает сделать свой модуль. Выбросить наружу всё что можно и нужно. Этот будет проще чем CC2530 например. Балун на борту ( после TI это доставило ). Всё что необходимо есть на Али. Себестоимость выше будет, это да ( с китайцами спорить тяжело ). Но мне кажется не критично.
     
  19. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.273
    Симпатии:
    1.318
    Я то припаять смогу, а народ? Так не решается.
    Для экспериментов можно и так:
    IMG_5532.jpg
    ADC вывод выводил на ESP-01...
     
    Последнее редактирование: 9 фев 2015
  20. elAlex

    elAlex Новичок

    Сообщения:
    6
    Симпатии:
    3
    Собственно и паять-то не обязательно. Плату развести, отдать китайцам ( Seeed Studio, ets ) в работу. Им-же сборку заказать. У Cherts ( попутно так-же поблагодарю хозяина площадки, спасибо ) магазин есть. Там организовать продажу. Маржу не загонять и спрос будет.
     

Поделиться этой страницей