Closed DmytroMelnyk closed 2 years ago
Скажу честно, не вникал, чем она отличается от обычной. Знаю только, что на атоме прошивка работает, а там ESP32-PICO-D4.
In file included from main/r4sGate.c:347:
main/tft/tft.c: In function 'lcd_init':
main/tft/tft.c:1197:23: error: 'LEDC_HIGH_SPEED_MODE' undeclared (first use in this function); did you mean 'LEDC_LOW_SPEED_MODE'?
.speed_mode = LEDC_HIGH_SPEED_MODE, // timer mode
^~~~~~~~~~~~~~~~~~~~
LEDC_LOW_SPEED_MODE
main/tft/tft.c:1197:23: note: each undeclared identifier is reported only once for each function it appears in
In file included from main/r4sGate.c:347:
main/tft/tft.c: In function 'tftinit':
main/tft/tft.c:7:21: error: 'HSPI_HOST' undeclared (first use in this function); did you mean 'SPI3_HOST'?
#define SPI_PORT HSPI_HOST
^~~~~~~~~
main/tft/tft.c:1331:59: note: in expansion of macro 'SPI_PORT'
if (PIN_NUM_MISO == PIN_NUM_MOSI) ret=spi_bus_initialize(SPI_PORT, &buscfg, 0);
^~~~~~~~
main/r4sGate.c: In function 'hw_timer_callback':
main/r4sGate.c:354:10: error: 'timg_dev_t' {aka 'volatile struct timg_dev_s'} has no member named 'int_clr_timers'; did you mean 'int_clr'?
TIMERG0.int_clr_timers.t0 = 1;
^~~~~~~~~~~~~~
int_clr
main/r4sGate.c: In function 'mqtt_event_handler_cb':
main/r4sGate.c:10349:16: error: 'LEDC_HIGH_SPEED_MODE' undeclared (first use in this function); did you mean 'LEDC_LOW_SPEED_MODE'?
ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0, duty);
^~~~~~~~~~~~~~~~~~~~
LEDC_LOW_SPEED_MODE
Compiling .pio\build\esp32dev\asio\asio\asio\src\asio.o
Archiving .pio\build\esp32dev\esp-idf\app_update\libapp_update.a
Archiving .pio\build\esp32dev\esp-idf\app_trace\libapp_trace.a
Compiling .pio\build\esp32dev\bootloader_support\src\bootloader_common.o
Compiling .pio\build\esp32dev\bootloader_support\src\bootloader_common_loader.o
Compiling .pio\build\esp32dev\bootloader_support\src\bootloader_clock_init.o
Indexing .pio\build\esp32dev\esp-idf\app_update\libapp_update.a
Compiling .pio\build\esp32dev\bootloader_support\src\bootloader_flash.o
Indexing .pio\build\esp32dev\esp-idf\app_trace\libapp_trace.a
Compiling .pio\build\esp32dev\bootloader_support\src\bootloader_mem.o
Compiling .pio\build\esp32dev\bootloader_support\src\bootloader_random.o
*** [.pio\build\esp32dev\main\r4sGate.o] Error 1
попробовал сбилдить в PlatformIO... вот такие вот ошибки выскочили
добавил
board_build.mcu = esp32c3 board_build.variant = esp32c3
в platformio.ini
tft monitor я могу закоментить - он мне не нужен... но вот что делать с ошибками компиляции в r4sGate.c я не знаю :(
Можно попробовать поменять на то, что он предлагает. Наверное это обрезанная версия обычной есп32. Что за последняя ошибка таймера, я пока не знаю. Upd: Почитал о С3, интересная есп. Но у нее на 120к меньше оперативки, так что шлюз может туда и не влезть. Тем не менее нужно восстановить возможность сборки шлюза без экрана. Когда-то опция такая была, но потом забросил. Интересно, а в режиме обычной есп проект собирается без ошибок?
Да в режиме обычной esp, т.е. без
board_build.mcu = esp32c3
board_build.variant = esp32c3
собирается без ошибок
Мне по сути нужно управление только чайником, а не весь ГейтВей... Если бы Вы подсказали что можно вырезать оттуда :). Я пробовал комментить
#include "tft/tft.c"
ошибок стало больше и совсем разных :(
Я просмотрел исходный код и не нашел упоминания о чайнике RK-M216S. Подскажите, пожалуйста, он поддерживается?
Я просмотрел исходный код и не нашел упоминания о чайнике RK-M216S. Подскажите, пожалуйста, он поддерживается?
у меня так заработал
В следующей версии будет возможность отключения экрана при сборке. Освобождается 32к памяти, зарезервированной под буфер экрана. Кто знает, может и влезет в С3. Пока не могу выложить, так как никак не могу проверить одно устройство. Изменений будет порядочно, так что можно пока сохранить на всякий случай текущую версию. И да, в описании есть соответствие чайников пунктам меню шлюза: Redmond SkyKettle RK-G200S / RK-G204S / RK-G210S / RK-G211S / RK-G212S / RK-G214S / RK-M216S Redmond SkyKettle RK-G240S / RK-G204S / RK-G210S / RK-G211S / RK-G212S / RK-G214S / RK-M216S Первый чайник - меню, далее все, что туда подходит. Так что упоминание есть.)))
Добрый вечер! Попробовал я использовать рекомендации IDE, т.е. заменил:
LEDC_HIGH_SPEED_MODE => LEDC_LOW_SPEED_MODE
HSPI_HOST => SPI3_HOST
TIMERG0.int_clr_timers.t0 => TIMERG0.int_clr_timers.t0_int_clr
TIMERG0.hw_timer[0].config.alarm_en => TIMERG0.hw_timer[0].config.tx_alarm_en
так же добавил в platformio.ini:
build_flags = -DCONFIG_BT_BLE_42_FEATURES_SUPPORTED=TRUE
Проект скомпилировался, я даже сумел его залить в ESP32C3. Плата подключилась к гостевому Wi-Fi, получила IP адресс, но вот к веб-серверу я уже подключится не смог. Зато получил логи:
ESP-ROM:esp32c3-api1-20210207
Build:Feb 7 2021
rst:0x1 (POWERON),boot:0xc (SPI_FAST_FLASH_BOOT)
SPIWP:0xee
mode:DIO, clock div:2
load:0x3fcd6100,len:0x16b4
load:0x403ce000,len:0x930
load:0x403d0000,len:0x2d28
entry 0x403ce000
I (31) boot: ESP-IDF 4.4.1 2nd stage bootloader
I (31) boot: compile time 16:32:43
I (31) boot: chip revision: 3
I (33) boot_comm: chip revision: 3, min. bootloader chip revision: 0
I (40) boot.esp32c3: SPI Speed : 40MHz
I (45) boot.esp32c3: SPI Mode : DIO
I (49) boot.esp32c3: SPI Flash Size : 4MB
I (54) boot: Enabling RNG early entropy source...
I (59) boot: Partition Table:
I (63) boot: ## Label Usage Type ST Offset Length
I (70) boot: 0 nvs WiFi data 01 02 00009000 00004000
I (78) boot: 1 phy_init RF data 01 01 0000d000 00001000
I (85) boot: 2 otadata OTA data 01 00 0000e000 00002000
I (93) boot: 3 ota_0 OTA app 00 10 00010000 001e0000
I (100) boot: 4 ota_1 OTA app 00 11 001f0000 001e0000
I (108) boot: 5 spiffs Unknown data 01 82 003d0000 00030000
I (115) boot: End of partition table
I (119) boot_comm: chip revision: 3, min. application chip revision: 0
I (127) esp_image: segment 0: paddr=00010020 vaddr=3c160020 size=627c0h (403392) map
I (222) esp_image: segment 1: paddr=000727e8 vaddr=3fc91600 size=04f38h ( 20280) load
I (227) esp_image: segment 2: paddr=00077728 vaddr=40380000 size=088f0h ( 35056) load
I (236) esp_image: segment 3: paddr=00080020 vaddr=42000020 size=158174h (1409396) map
I (540) esp_image: segment 4: paddr=001d819c vaddr=403888f0 size=08c48h ( 35912) load
I (549) esp_image: segment 5: paddr=001e0dec vaddr=50000010 size=00010h ( 16) load
I (556) boot: Loaded app from partition at offset 0x10000
I (556) boot: Disabling RNG early entropy source...
I (570) cpu_start: Pro cpu up.
I (578) cpu_start: Pro cpu start user code
I (578) cpu_start: cpu freq: 160000000
I (578) cpu_start: Application information:
I (581) cpu_start: Project name: r4sGate
I (586) cpu_start: App version: 1
I (590) cpu_start: Compile time: Jul 3 2022 16:28:09
I (597) cpu_start: ELF file SHA256: 48440bdb5164096f...
I (602) cpu_start: ESP-IDF: 4.4.1
I (607) heap_init: Initializing. RAM available for dynamic allocation:
I (615) heap_init: At 3FCA6F20 len 000190E0 (100 KiB): DRAM
I (621) heap_init: At 3FCC0000 len 0001F060 (124 KiB): STACK/DRAM
I (628) heap_init: At 50000020 len 00001FE0 (7 KiB): RTCRAM
I (635) spi_flash: detected chip: generic
I (639) spi_flash: flash io: dio
I (643) sleep: Configure to isolate all GPIO pins in sleep state
I (649) sleep: Enable automatic switching of GPIO sleep configuration
I (657) coexist: coexist rom version 9387209
I (662) cpu_start: Starting scheduler.
Starting r4sGate...
This is esp32c3 chip with 1 CPU cores, WiFi/BLE,
silicon revision 3, 4MB external flash
I (675) R4S: Init start free heap: 218476
APP IDF version: 4.4.1
I (695) pp: pp rom version: 9387209
I (695) net80211: net80211 rom version: 9387209
I (705) wifi:wifi driver task: 3fcb0024, prio:23, stack:6656, core=0
I (705) system_api: Base MAC address is not set
I (705) system_api: read default base MAC address from EFUSE
I (715) wifi:wifi firmware version: 63017e0
I (715) wifi:wifi certification version: v7.0
I (725) wifi:config NVS flash: enabled
I (725) wifi:config nano formating: disabled
I (725) wifi:Init data frame dynamic rx buffer num: 32
I (735) wifi:Init management frame dynamic rx buffer num: 32
I (735) wifi:Init management short buffer num: 32
I (745) wifi:Init dynamic tx buffer num: 32
I (745) wifi:Init static tx FG buffer num: 2
I (755) wifi:Init static rx buffer size: 1600
I (755) wifi:Init static rx buffer num: 10
I (755) wifi:Init dynamic rx buffer num: 32
I (765) wifi_init: rx ba win: 6
I (765) wifi_init: tcpip mbox: 32
I (775) wifi_init: udp mbox: 6
I (775) wifi_init: tcp mbox: 6
I (775) wifi_init: tcp tx win: 5744
I (785) wifi_init: tcp rx win: 5744
I (785) wifi_init: tcp mss: 1440
I (795) wifi_init: WiFi IRAM OP enabled
I (795) wifi_init: WiFi RX IRAM OP enabled
I (805) phy_init: phy_version 909,156dee4,Apr 7 2022,20:27:09
I (895) wifi:mode : sta (84:f7:03:a6:64:00)
I (895) wifi:enable tsf
I (905) R4S: Wifi_init_sta finished.
I (905) R4S: Connecting to Wifi: 'r4s' with password '12345678'
I (905) wifi:new:<11,0>, old:<1,0>, ap:<255,255>, sta:<11,0>, prof:1
I (915) wifi:state: init -> auth (b0)
I (915) wifi:state: auth -> assoc (0)
I (925) wifi:state: assoc -> run (10)
I (935) wifi:connected with r4s, aid = 2, channel 11, BW20, bssid = 34:97:f6:68:9e:79
I (935) wifi:security: WPA2-PSK, phy: bgn, rssi: -41
I (935) wifi:pm start, type: 1
I (935) wifi:set rx beacon pti, rx_bcn_pti: 14, bcn_timeout: 14, mt_pti: 25000, mt_time: 10000
W (955) wifi:<ba-add>idx:0 (ifx:0, 34:97:f6:68:9e:79), tid:0, ssn:0, winSize:64
I (1015) wifi:BcnInt:102400, DTIM:1
I (1695) esp_netif_handlers: sta ip: 192.168.1.223, mask: 255.255.255.0, gw: 192.168.1.1
I (1695) R4S: got ip:192.168.1.223
I (1695) R4S: Connected to ap SSID:'r4s' password:'12345678'
W (1705) BTDM_INIT: esp_bt_controller_mem_release not implemented, return OK
I (1705) BTDM_INIT: BT controller compile version [d913766]
I (1715) BTDM_INIT: Bluetooth MAC: 84:f7:03:a6:64:02
I (1725) R4S: app_main init bluetooth
I (1745) R4S: Basic Auth string:
I (1745) R4S: esp32 BLE MAC Address:
I (1745) R4S: 84 f7 03 a6 64 02
I (1755) R4S: Init end free heap: 94148
Еще проапдейтил версию espressif:
platform = espressif32@5.0.0
я раскоментил пару логов, там где был ВебСервер и получил вот такие вот логи:
I (1755) R4S: Starting server on port: '80'
I (1755) R4S: Max URI handlers: '16'
I (1755) R4S: Max Open Sessions: '7'
I (1765) R4S: Max Header Length: '512'
I (1765) R4S: Max URI Length: '512'
I (1765) R4S: Max Stack Size: '20480'
I (1775) R4S: Init end free heap: 94164
Добавил вот так вот лог, но при переходе по IP адресу в браузерной строке, лог этот не отобразился, но и страница не отрисовалась. Может действительно памяти мало :(
Обновил версию, ее можно собрать без опции экрана. Вроде бы убрал по максимуму. Можно пробовать собрать для C3.
Попробовал новую версию. Но все таки проблема в http сервере похоже. Заметил еще вот такой вот лог, это критично?
I (1724) R4S: reg app failed, app_id 0004, status 128
Если да, то может тут нужно severity warning
Похоже, что не хватает памяти для запуска http сервера. Что в общем-то и понятно, ведь разница в оперативке между обычной esp и esp-c3 (120к) больше свободного озу в шлюзе, это где-то 85к при отсутствии BLE устройств в настройках. Надо отметить, что разница совсем небольшая, ведь сейчас свободная память выводится как раз с учетом сервера, это стек 10к и буфер 13к для вывода страницы на экран.
Хотя с другой стороны, там же ж есть вот такой вот статус: И если бы памяти не хватало, то наверное была бы такая ошибка. Хотя не знаю. Я не программирую контроллеры ))).
Ну правильно, он пытается взять память, а памяти не хватает.
Оказывается что все работает. Проблема была на моей стороне. Когда я создал гостевую сеть, я выключил доступ с гостевой в мою локальную. Т.е. IP нового устройства я видел, а доступа к нему не имел :(. Работает все на ESP32C3)))
Работает собранная без экрана? И сколько свободной памяти показывает?
Да. Экран я выключил. Вот что по памяти:
Но тут следует обратить внимание что я использую platform = espressif32@5.0.0
с более старой версией 4.4.0 оно не собралось. Может в новой есть тоже оптимизации какие-то
Памяти больше даже, чем без экрана на обычной, там 98к кажется было. Она бы и экран потянула, наверное, да выводов маловато. А, вот еще, версия idf 4.4.1, у меня просто 4.4. Пока работает, сносить ее не хочется.
Выводов меньше. Но стоила она дешевле чем обычная :)
И еще вопрос, что править нужно в самом исходнике для работы с C3? Я потом сошлюсь на эту страничку в описании.
Если можно, то было бы неплохо добавить что то вот такое вот в исходники
//Reset irq and set for next time
#ifdef CONFIG_IDF_TARGET_ESP32C3
TIMERG0.int_clr_timers.t0_int_clr = 1;
TIMERG0.hw_timer[0].config.tx_alarm_en = 1;
#else
TIMERG0.int_clr_timers.t0 = 1;
TIMERG0.hw_timer[0].config.alarm_en = 1;
#endif
//
Ну а затем я отключал TFT:
//#define USE_TFT
апгрейдил версию платформы в platformio.ini и добавлял сюда же модификацю esp32 + добавлял саппорт BLE42:
platform = espressif32@5.0.0
board_build.mcu = esp32c3
board_build.variant = esp32c3
build_flags = -DCONFIG_BT_BLE_42_FEATURES_SUPPORTED=TRUE
билдил и заливал. Как по мне проще всего это делать в VSCode + экстеншин "Platformio IDE"
Добавил в исходники. При выборе С3 опция экрана отключается. Там нужно еще разбираться с SPI, пока не вникал, в чем отличия от обычной есп32.
Точно не скажу, но когда собирал с экраном кажись оно на что то ругалось связанное с SPI. То ли именование констант было какое-то другое - уже не помню.
Подскажите, пожалуйста, а возможно сделать билд под ESP32-C3?