• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Синхронизация часов.

pvvx

Активный участник сообщества
Так это Вы виноваты,а не они.
Встроили и не даете. А они еще не встроили. Им нечего давать.
Я дал. А они и вы - нет :p Наверно не могут - у них исходников их поделки нет - всё украдено где-то :) Espressif - шарашкина контора. Загибается уже - не может даже напечатать чипов.
 
Последнее редактирование:

pvvx

Активный участник сообщества
зато какой импульс развития и популяризации дали!!
Они-же его и закапали своим подходом. +- = 0
У вас малый кругозор в теме имеющихся на рынке SoC и других поделок с WiFi. Народ выбирает худшее. (с) Природа. Самоуничтожение - планета маленькая, стадо большое... :)
 

pvvx

Активный участник сообщества
За счет пары сторонних энтузиастов попали в течение “кухонной моды”, но “мода” прошла, а удержаться “на волне” не смогли из-за своего подхода - Espressif. :)
Не сравнивайте разное - пару тупых жадных китайцев из Espressif и людей дающих миру развитие. Впрочем и в этом вы не смыслите... :)
Роснано и Сколково ко мне на кухню не лезут и благополучно вписываются в систему самоуничтожения. У меня дети и им нужна чистая планета. :)
----------

Sasasa– вы разобрались с этим? Там встроена функция делающая поправки на время приема и запроса текущего значения у неё.

На счет организации запретов прерываний и распределения времени в Arduino на ESP обращайтесь к её писателям. В каждом заголовке исходников есть их ник и (c).
 
Последнее редактирование:

sasasa

Member
ESP1 соединяете с ESP2 проводом.
На ESP1 формируете последовательность импульсов для ESP2
На ESP2 по фронту импульса посылаете пакет по UDP для ESP1
На ESP1 измеряете время запаздывание пакета относительно фронта импульса.
В результате получится задержка и нестабильность передачи пакетов по WI-FI.
Замечу, что Вы пытаетесь решить свою задачу самым очевидным и, как правило, самым сложным методом.
Результат здесь. ESP-now пока не успел попробовать.
Есть какие-то конкретные предложения?
 

Вложения

pvvx

Активный участник сообщества
Иначе так и будете ковыряться в чужих SDK, как в чужой заднице, и ругать китайцев.
Не списывайте на всех китайцев. Разговор о китайцах из Espressif :p
Других вариантов, как ковыряться в чужих SDK вы не предложили. ESP-now сильно хуже - там джиттер будет более десятков ms - в тысячу раз более, чем уже дано и ковыряться не надо.
Замечу, что Вы пытаетесь решить свою задачу самым очевидным и, как правило, самым сложным методом.
Зато применимым на всем последующем оборудовании и прописанном в стандартах.
Вы же не смогли предложить другой метод, а разводите спам и уводите от решения вопроса, просто обманывая - подсовывая нерабочие варианты и направления. :p Не надоело?
 
Последнее редактирование:

sasasa

Member
Sasasa– вы разобрались с этим? Там встроена функция делающая поправки на время приема и запроса текущего значения у неё.
Пока нет. Когда вставил:
Код:
extern uint64_t get_tsf_station(void) ICACHE_FLASH_ATTR; // step 1 us
получаю это
Код:
_test.ino:173: undefined reference to `get_tsf_station()'
_test.ino:185: undefined reference to `get_tsf_station()'
_test.ino:186: undefined reference to `get_tsf_station()'
Хотя в этих указанный строчках даже не упомянул о get_tsf_station()

173. Serial.println("IP address: ");
185. Serial.println(" .... START ..... ");
186. }// end setup

Наверное не так делаю. libnet80211_new_v154 переименовал как libnet80211.a , поставил в место оригинального.
Пока дальше Аrduino не сдвинулся, но как я понимаю, это влияет только на ошибку, а не в работоспособности в целом. Надеюсь скоро разберусь. Спасибо.
--
p.s. сейчас посмотрел - у меня SDK 1.5.1_16_01_08, может из-за этого на работает
 

pvvx

Активный участник сообщества
p.s. сейчас посмотрел - у меня SDK 1.5.1_16_01_08, может из-за этого на работает
Я не вижу смысла патчить все варианты SDK. Кому надо, тот сам сделает - места указаны, код закрытых либ в части 80211 соответствует FreeBSD (но внесены китай-фичи+ошибки) - годятся структуры и заголовки от него.
 

sasasa

Member
переставлю v1.5.4 и попробую
Кажется простым copy/paste нельзя поставить в Ардуино IDE файлы другой SDK и libnet80211_new.a o_O Или по другому там надо их переставлять?
Пока ничем больше как Ардуино не пользовался.
Что там лучше поставить чтобы пользоваться SDK v1.5.4?
Espressif-ESP8266-DevKit-v2.2.1-x86 + Eclipse Neon x86?
Может быть другие варианты?
 
Последнее редактирование:

pvvx

Активный участник сообщества
Кажется простым copy/paste нельзя поставить в Ардуино IDE файлы другой SDK и libnet80211_new.a o_O Или по другому там надо их переставлять?
Пока ничем больше как Ардуино не пользовался.
Что там лучше поставить чтобы пользоваться SDK v1.5.4?
Espressif-ESP8266-DevKit-v2.2.1-x86 + Eclipse Neon x86?
Может быть другие варианты?
Тут не могу вам помочь. У меня руки опускаются после инсталляции Arduino ESP и трансляции любого примера. В лог не лезут все варниги и в сообщение не вставить из их количества...
Писали школьники из первого класса?
---
Вставил нормальные опции компилятору: -Wall -Werror
Всё - не транслирует ничего. Итого: в помойку эту Arduino для ESP.
Пример WiFiClient:
Код:
Arduino: 1.6.13 (Windows 7), Плата:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, 115200, 4M (3M SPIFFS)"

....\ESP8266WiFi\src\ESP8266WiFiGeneric.cpp:155:127: warning: unused parameter 'e' [-Wunused-parameter]

     WiFiEventHandler handler = std::make_shared<WiFiEventHandlerOpaque>(WIFI_EVENT_STAMODE_DHCP_TIMEOUT, [f](System_Event_t* e){

                                                                                                                               ^

....\ESP8266WiFi\src\ESP8266WiFiGeneric.cpp:454:6: warning: unused parameter 'name' [-Wunused-parameter]

void wifi_dns_found_callback(const char *name, ip_addr_t *ipaddr, void *callback_arg) {

      ^

In file included from ....\ESP8266WiFi\src\WiFiClient.cpp:41:0:

....\ESP8266WiFi\src\include/ClientContext.h:250:15: warning: unused parameter 'pcb' [-Wunused-parameter]

         err_t _sent(tcp_pcb* pcb, uint16_t len) {

               ^

....\ESP8266WiFi\src\include/ClientContext.h:278:20: warning: unused parameter 'pcb' [-Wunused-parameter]

         recv_ret_t _recv(tcp_pcb* pcb, pbuf* pb, err_t err) {

                    ^

....\ESP8266WiFi\src\include/ClientContext.h:278:20: warning: unused parameter 'err' [-Wunused-parameter]

....\ESP8266WiFi\src\include/ClientContext.h:303:14: warning: unused parameter 'err' [-Wunused-parameter]

         void _error(err_t err) {

              ^

....\ESP8266WiFi\src\include/ClientContext.h:315:15: warning: unused parameter 'pcb' [-Wunused-parameter]

         err_t _poll(tcp_pcb* pcb) {

               ^

....\ESP8266WiFi\src\WiFiClient.cpp:136:8: warning: unused parameter 'err' [-Wunused-parameter]

int8_t WiFiClient::_connected(void* pcb, int8_t err)

        ^

....\ESP8266WiFi\src\WiFiClient.cpp:145:6: warning: unused parameter 'err' [-Wunused-parameter]

void WiFiClient::_err(int8_t err)

      ^

In file included from ....\ESP8266WiFi\src\WiFiClientSecure.cpp:40:0:

....\ESP8266WiFi\src\include/ClientContext.h:250:15: warning: unused parameter 'pcb' [-Wunused-parameter]

         err_t _sent(tcp_pcb* pcb, uint16_t len) {

               ^

....\ESP8266WiFi\src\include/ClientContext.h:278:20: warning: unused parameter 'pcb' [-Wunused-parameter]

         recv_ret_t _recv(tcp_pcb* pcb, pbuf* pb, err_t err) {

                    ^

....\ESP8266WiFi\src\include/ClientContext.h:278:20: warning: unused parameter 'err' [-Wunused-parameter]

....\ESP8266WiFi\src\include/ClientContext.h:303:14: warning: unused parameter 'err' [-Wunused-parameter]

         void _error(err_t err) {

              ^

....\ESP8266WiFi\src\include/ClientContext.h:315:15: warning: unused parameter 'pcb' [-Wunused-parameter]

         err_t _poll(tcp_pcb* pcb) {

               ^

....\ESP8266WiFi\src\WiFiClientSecure.cpp:182:27: warning: unused parameter 'fd' [-Wunused-parameter]

     static ClientContext* getIOContext(int fd) {

                           ^

....\ESP8266WiFi\src\WiFiClientSecure.cpp: In function 'int ax_port_read(int, uint8_t*, size_t)':

....\ESP8266WiFi\src\WiFiClientSecure.cpp:539:53: warning: suggest parentheses around '&&' within '||' [-Wparentheses]

     if (!_client || _client->state() != ESTABLISHED && !_client->getSize()) {

                                                     ^

....\ESP8266WiFi\src\WiFiClientSecure.cpp: At global scope:

....\ESP8266WiFi\src\WiFiClientSecure.cpp:567:16: warning: unused parameter 'filename' [-Wunused-parameter]

extern "C" int ax_get_file(const char *filename, uint8_t **buf) {

                ^

....\ESP8266WiFi\src\WiFiClientSecure.cpp:579:18: warning: unused parameter 'file' [-Wunused-parameter]

extern "C" void* ax_port_malloc(size_t size, const char* file, int line) {

                  ^

....\ESP8266WiFi\src\WiFiClientSecure.cpp:579:18: warning: unused parameter 'line' [-Wunused-parameter]

....\ESP8266WiFi\src\WiFiClientSecure.cpp:596:18: warning: unused parameter 'file' [-Wunused-parameter]

extern "C" void* ax_port_realloc(void* ptr, size_t size, const char* file, int line) {

                  ^

....\ESP8266WiFi\src\WiFiClientSecure.cpp:596:18: warning: unused parameter 'line' [-Wunused-parameter]

In file included from ....\ESP8266WiFi\src\WiFiServer.cpp:38:0:

....\ESP8266WiFi\src\include/ClientContext.h:250:15: warning: unused parameter 'pcb' [-Wunused-parameter]

         err_t _sent(tcp_pcb* pcb, uint16_t len) {

               ^

....\ESP8266WiFi\src\include/ClientContext.h:278:20: warning: unused parameter 'pcb' [-Wunused-parameter]

         recv_ret_t _recv(tcp_pcb* pcb, pbuf* pb, err_t err) {

                    ^

....\ESP8266WiFi\src\include/ClientContext.h:278:20: warning: unused parameter 'err' [-Wunused-parameter]

....\ESP8266WiFi\src\include/ClientContext.h:303:14: warning: unused parameter 'err' [-Wunused-parameter]

         void _error(err_t err) {

              ^

....\ESP8266WiFi\src\include/ClientContext.h:315:15: warning: unused parameter 'pcb' [-Wunused-parameter]

         err_t _poll(tcp_pcb* pcb) {

               ^

....\ESP8266WiFi\src\WiFiServer.cpp:99:12: warning: unused parameter 'status' [-Wunused-parameter]

WiFiClient WiFiServer::available(byte* status) {

            ^

....\ESP8266WiFi\src\WiFiServer.cpp:134:8: warning: unused parameter 'buffer' [-Wunused-parameter]

size_t WiFiServer::write(const uint8_t *buffer, size_t size) {

        ^

....\ESP8266WiFi\src\WiFiServer.cpp:134:8: warning: unused parameter 'size' [-Wunused-parameter]

In file included from ..../tools/sdk/lwip/include/lwip/opt.h:46:0,

                 from ....\ESP8266WiFi\src\WiFiServer.cpp:35:

....\ESP8266WiFi\src\WiFiServer.cpp: In member function 'int8_t WiFiServer::_accept(tcp_pcb*, int8_t)':

..../tools/sdk/lwip/include/lwip/debug.h:66:32: warning: suggest braces around empty body in an 'if' statement [-Wempty-body]

   LWIP_PLATFORM_ASSERT(message); } while(0)

                                ^

..../tools/sdk/lwip/include/lwip/tcp.h:335:36: note: in expansion of macro 'LWIP_ASSERT'

#define          tcp_accepted(pcb) LWIP_ASSERT("pcb->state == LISTEN (called for wrong pcb?)", \

                                    ^

....\ESP8266WiFi\src\WiFiServer.cpp:155:5: note: in expansion of macro 'tcp_accepted'

     tcp_accepted(_pcb);

     ^

....\ESP8266WiFi\src\WiFiServer.cpp: At global scope:

....\ESP8266WiFi\src\WiFiServer.cpp:151:8: warning: unused parameter 'err' [-Wunused-parameter]

int8_t WiFiServer::_accept(tcp_pcb* apcb, int8_t err) {

        ^

....\ESP8266WiFi\src\WiFiServer.cpp:159:6: warning: unused parameter 'client' [-Wunused-parameter]

void WiFiServer::_discard(ClientContext* client) {

      ^

In file included from ....\ESP8266WiFi\src\WiFiUdp.cpp:41:0:

....\ESP8266WiFi\src\include/UdpContext.h:329:10: warning: unused parameter 'upcb' [-Wunused-parameter]

     void _recv(udp_pcb *upcb, pbuf *pb,

          ^

....\ESP8266WiFi\src\include/UdpContext.h:329:10: warning: unused parameter 'addr' [-Wunused-parameter]

....\ESP8266WiFi\src\include/UdpContext.h:329:10: warning: unused parameter 'port' [-Wunused-parameter]

....\cores\esp8266\cont_util.c: In function 'cont_init':

....\cores\esp8266\cont_util.c:35:26: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]

     for(int pos = 0; pos < sizeof(cont->stack) / 4; pos++)

                          ^

cc1.exe: all warnings being treated as errors

exit status 1
Ошибка компиляции для платы NodeMCU 1.0 (ESP-12E Module).

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
В большинстве файлов упоминается Copyright (c) 2014 Ivan Grokhotkov. Пишите ему - пусть исправляет, тогда может помогу... А пока будем считать, что Arduino для ESP8266 ещё не отлажена.
PS: Я не вижу каким образом среди тысяч warning в начальной прошивке найти свой… Мода отключать все warning-и и привела программеров Espressif к тому, что их SDK после долгих лет так и не отлажена. Теперь это распространяется и на другое ПО :(.
 
Последнее редактирование:

sasasa

Member
Чем вы пользуетесь для загрузки кода в ЕСПку? Если несколько, то посоветуйте не очень сложный вариант чтобы я мог установить SDK 1.5.4 либы. Попробовал Eclipse, но пока как в тёмном лесу o_O
Кстати интересно что после замены файлов SDK, Serial.println(system_get_sdk_version()); больше не показывает мой предыдущий v1.5.1 а сейчас v1.5.3(aec24ac9), хотя и файл скачал ESP8266_NONOS_SDK_V1.5.4_16_05_20
Может быть не в версии файла беда а для Ардуино надо иначе писать? uint64_t я переписал в место uint64
Код:
extern uint64_t get_mac_time(void) ICACHE_FLASH_ATTR; // step 1 us
#define get_tsf_ap() get_mac_time()
extern uint64_t get_tsf_station(void) ICACHE_FLASH_ATTR; // step 1 us
И странные эти ошибки в строчках, где совсем другое написано. Когда то раньше у меня было что-то похожее, но сейчас не помню как решил проблему.
 

pvvx

Активный участник сообщества
Чем вы пользуетесь для загрузки кода в ЕСПку?
Исправленной esptool.py
И странные эти ошибки в строчках, где совсем другое написано. Когда то раньше у меня было что-то похожее, но сейчас не помню как решил проблему.
Отключили вывод варнингов и всё что связано с трансляцией на вывод в Ардуино. Это не выход, а разгильдяйство :)

PS: SDK2.0 пропатчено - доступ к TSF в web-свалке с исходниками...
 
Последнее редактирование:

sasasa

Member
Может быть там просто надо добавить эти либу с #include ...?
Ну как может быть что она не видна, если она там есть?!?
 

pvvx

Активный участник сообщества
Может быть там просто надо добавить эти либу с #include ...?
Ну как может быть что она не видна, если она там есть?!?
Я уже ответил - ничем не могу помочь в Arduino для ESP. Она у меня не рабочая. Ни какая из версий - везде сотни варнингов, у компилятора отключены опции -Wall -Werror, не говоря уже о опции -pedantic-errors...
 
Последнее редактирование:

pvvx

Активный участник сообщества
Не так выразился. o_O Я хотел спросить чем вы пишите и компилируйте код, чтобы включит SDK либу?
В Arduino "бинарные" библиотеки подключаются в файле "platform.txt".
В самом редакторе-окне-амбразуре Ардуино код C++ и возможно надо написать:
extern "C" uint64_t get_mac_time(void); // step 1 us
#define get_tsf_ap() get_mac_time()
extern "C" uint64_t get_tsf_station(void); // step 1 us
 

sasasa

Member
Уже пробовал - не помогает. Вся хр.ь в том что, только я вписиваю где то uint64_t var1 = get_tsf_station();, то Ардуин сразу сходит сума и показывает ошибки на линиях в которых нет ошибок.
$%^%%$#%&^*&%^$@!ъ% :mad:
 

pvvx

Активный участник сообщества
Уже пробовал - не помогает. Вся хр.ь в том что, только я вписиваю где то uint64_t var1 = get_tsf_station();, то Ардуин сразу сходит сума и показывает ошибки на линиях в которых нет ошибок.
$%^%%$#%&^*&%^$@!ъ% :mad:
Напишите какие версии Дурины и от куда взяты.
 

sasasa

Member
Какие библиотеки должны быт включены(#include...) в начале скетча?

--
Arduino 1.6.8 , Из Аrduino.cc
ESP8266 из Github http://arduino.esp8266.com/stable/package_esp8266com_index.json, скопирована в Arduino/ hardware,
сейчас добавлен SDK 1.5.4 в ESP8266com/ES{8266/tools/SDK
всё вроде работает ну только не то что из libnet80211.a, хотя я из неё ничего больше кроме get_tsf_station() не пробовал.
 
Сверху Снизу