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

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

pvvx

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

amatron

New member
Подскажите, пожалуйста, как при помощи переменных, например >~sys.gpio14~ изменить состояние пина (на 0 или 1)?
 

pvvx

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

Andy Korg

Moderator
Команда форума
Че-то не получается забабахать клиента udp . Не вызывается callback-функция udp_rcv, помогите пожалуйста понять в чем я не прав.
Код:
#include "lwip/udp.h"
#include "lwip/ip_addr.h"
#include "lwip/err.h"
#include "user_interface.h"

struct udp_pcb* udp_nat;

uint32 TimeInet = 0;

void ICACHE_FLASH_ATTR udp_rcv(void *arg, struct udp_pcb *pcb, struct pbuf *p,
    ip_addr_t *addr, u16_t port){

    TimeInet = 0xfffffff0;

    if (p->len != 4){
        TimeInet = 0xffffffff;
    }
    else{
        memcpy(&TimeInet, p->payload, 4);
    }
    pbuf_free(p);
}

err_t ICACHE_FLASH_ATTR natInit(void){

    err_t err = ERR_OK;
    struct ip_addr natIP;

    struct pbuf* p = pbuf_alloc(PBUF_TRANSPORT, 1, PBUF_RAM);

    struct ip_info wifi_info;

    udp_nat = udp_new();
    if (udp_nat != NULL){
        if (wifi_get_ip_info(STATION_IF, &wifi_info)){
            udp_nat->local_ip = wifi_info.ip;
            udp_nat->local_port = 6234;
        }
        udp_recv(udp_nat, udp_rcv, NULL);
        IP4_ADDR(&natIP, 128, 138, 141, 172);
        udp_sendto(udp_nat, p, &natIP, 37);
        pbuf_free(p);
    }
    else {
        err = ERR_MEM;
    }
}
 

pvvx

Активный участник сообщества
Че-то не получается забабахать клиента udp . Не вызывается callback-функция udp_rcv, помогите пожалуйста понять в чем я не прав.
Возьмите примеры у 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 питания показывает разный).
 
Последнее редактирование:

Andy Korg

Moderator
Команда форума
Возьмите примеры у 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

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

pvvx

Активный участник сообщества
Спасибо за подсказку. Посмотрел примеры, вроде все делаю как тама. А не выходит каменный цветок. Может еще у кого мысли есть?
Вы не написали что не работает. Отправка или прием? С какого 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.
 
Последнее редактирование:

Andy Korg

Moderator
Команда форума
Вы не написали что не работает. Отправка или прием? С какого IP отсылаете на какой IP ESP8266? У ESP8266 2 IP - st/ap. Внутреннего роуминга между ними нет :)
Я-то по простоте душевной думал, что вот этот код указывает с какого IP отправлять
Код:
        if (wifi_get_ip_info(STATION_IF, &wifi_info)){
            udp_nat->local_ip = wifi_info.ip;
            udp_nat->local_port = 6234;
        }
Но потом поковырял функцию udp_sendto и оказалось, что умные люди уже все сделали и написали
Код:
  netif = ip_route(dst_ip);
Т.е. сетевой интерфейс выбираться на основе destantion ip и мои потуги выглядеть умным провалились :)
----
Сменил свалку на соответствие Unofficial Development Kit for Espressif ESP8266 v1.0.9 (c) by CHERTS
Поправил Make, изменил пример udp_test_port.c для Andy Korg на прямую работу с LwIP:
Посмотреть вложение 146
Никаких IP от WiFi в UDP не приматывал, отвечает и AP и ST.
Огромное спасибо! Cкачал и посмотрел.
Один мааленький вопросик: Обязательно делать "err_t err = udp_bind(pcb, IP_ADDR_ANY, portn);" если мне нужен только клиент?
 
Последнее редактирование:

pvvx

Активный участник сообщества
Нашлось, почему процедура 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).
 
Последнее редактирование:

elAlex

New member
Читаю постоянно этот форум ( сам пока ничего для других не сделал ) и думаю что буду не одинок если выскажу pvvx уважение и благодарность. Спасибо.
 

Algis

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

pvvx

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

elAlex

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

pvvx

Активный участник сообщества
По большому счёту - ничего не мешает сделать свой модуль. Выбросить наружу всё что можно и нужно. Этот будет проще чем CC2530 например. Балун на борту ( после TI это доставило ). Всё что необходимо есть на Али. Себестоимость выше будет, это да ( с китайцами спорить тяжело ). Но мне кажется не критично.
Я то припаять смогу, а народ? Так не решается.
Для экспериментов можно и так:
IMG_5532.jpg
ADC вывод выводил на ESP-01...
 
Последнее редактирование:

elAlex

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