Билли-Релешка: ESP32/ESP8266 "на пальцах"

под ядром 2.0.5 не скомпилировалось

Ядро от Espressif? Покажите скриншоты интерфейса Arduino IDE, пожалуйста.

под 2.11 сейчас пробую, аналогично

In file included from D:\ARDUINO\arduino-1.8.19\portable\sketchbook\2023\Billy_the_Relay\ESP_HTTP.h:20,
                 from D:\ARDUINO\arduino-1.8.19\portable\sketchbook\2023\Billy_the_Relay\ESP_HTTP.cpp:18:
config_ASCII_cmd_handler.h:21:41: error: multi-line comment [-Werror=comment]
 #define CMD_1       "SETLOCALSSID="     // Изменение SSID точки доступа локальной сети Wi-Fi, хранящегося            \
                                         ^
config_ASCII_cmd_handler.h:23:41: error: multi-line comment [-Werror=comment]
 #define CMD_2       "PRINTLOCALSSID"    // Вывод SSID точки доступа локальной сети Wi-Fi, хранящегося во встроенном  \
                                         ^
config_ASCII_cmd_handler.h:25:41: error: multi-line comment [-Werror=comment]
 #define CMD_3       "SETLOCALPSWD="     // Изменение пароля точки доступа локальной сети Wi-Fi, хранящегося          \
                                         ^
config_ASCII_cmd_handler.h:27:41: error: multi-line comment [-Werror=comment]
 #define CMD_4       "SETLOCALPORT="     // Изменение номера порта, используемого устройством как локальным           \
                                         ^
config_ASCII_cmd_handler.h:29:41: error: multi-line comment [-Werror=comment]
 #define CMD_5       "PRINTLOCALPORT"    // Вывод номера порта, используемого устройством как локальным               \
                                         ^
config_ASCII_cmd_handler.h:34:41: error: multi-line comment [-Werror=comment]
 #define CMD_9       "SETIOTIP="         // Изменение IP-адреса удалённого сервера, хранящегося во встроенном         \
                                         ^
config_ASCII_cmd_handler.h:36:41: error: multi-line comment [-Werror=comment]
 #define CMD_10      "PRINTIOTIP"        // Вывод IP-адреса удалённого сервера, хранящегося во встроенном накопителе  \
                                         ^
config_ASCII_cmd_handler.h:38:41: error: multi-line comment [-Werror=comment]
 #define CMD_11      "SETIOTPORT="       // Изменение номера порта, в который устройство будет стучаться к удалённому \
                                         ^
config_ASCII_cmd_handler.h:40:41: error: multi-line comment [-Werror=comment]
 #define CMD_12      "PRINTIOTPORT"      // Вывод номера порта, в который устройство будет стучаться к удалённому     \
                                         ^
config_ASCII_cmd_handler.h:42:41: error: multi-line comment [-Werror=comment]
 #define CMD_13      "SETIOTREQMSG="     // Изменение текста запроса, направляемого устройством удалённому серверу,   \
                                         ^
config_ASCII_cmd_handler.h:44:41: error: multi-line comment [-Werror=comment]
 #define CMD_14      "PRINTIOTREQMSG"    // Вывод текста запроса, направляемого устройством удалённому серверу,       \
                                         ^
config_ASCII_cmd_handler.h:46:41: error: multi-line comment [-Werror=comment]
 #define CMD_15      "SETIOTREQPERIOD="  // Изменение периодичности (в миллисекундах) направления запросов удалённому \
                                         ^
cc1plus.exe: some warnings being treated as errors

Ого. В первый раз вижу, чтобы продление однострочного комментария (“//”, C++ - стайл) через бэкслэш рассматривалось компилятором как ошибка.

Понял, буду иметь в виду, спасибо за фидбэк.

у меня рука такая, если что-то теоретически может не заработать оно у меня обязательно не заработает, надо искать подработку тестеровщика )))

1 лайк

Запилил хотфикс, заменил на старые добрые С-комменты :slightly_smiling_face:

Точно!!! Я эти многострочные комментарии просто сам подправил и забыл Вам про это сказать.

На самом деле, продлевать таким образом комментарий, конечно же, нельзя, но некоторые компиляторы смотря “ширше”, на то у них соответствующие опции есть.

осталось выяснить под каким ядром это ширше компилировалось

Под любым можно опции компилятора настроить.

ну так в скетче тогда и настраивать, не?

Кстати, вспомнил, почему решил проигнорировать ворнинги по поводу const char* и ISO C++. У меня функция handle_cmd_helper_send() отправляет как консты, так и обычные строки (причём успешно).

Получается, нужно либо пилить перегруженную функцию, либо каждый раз делать что-то вроде

char msg[STR_MAX_LEN + 1] = {0};
strcpy(msg, "My string literal");
handle_cmd_helper_send(msg);
D:\ARDUINO\arduino-1.8.19\portable\packages\esp32\hardware\esp32\2.0.14\cores\esp32\esp32-hal-uart.c: In function 'uartSetPins':
D:\ARDUINO\arduino-1.8.19\portable\packages\esp32\hardware\esp32\2.0.14\cores\esp32\esp32-hal-uart.c:153:9: warning: 'return' with no value, in function returning non-void
         return;
         ^~~~~~
D:\ARDUINO\arduino-1.8.19\portable\packages\esp32\hardware\esp32\2.0.14\cores\esp32\esp32-hal-uart.c:149:6: note: declared here
 bool uartSetPins(uint8_t uart_num, int8_t rxPin, int8_t txPin, int8_t ctsPin, int8_t rtsPin)
      ^~~~~~~~~~~

Либо забить и написать самому, без подобных “фич”, но короче и более адекватно…

Это Вы переутомились. Расслабьтесь и подумайте.

Достаточно просто заменить тип параметра в трёх функциях

handle_cmd_helper_send
ESP_TCP_server_send_msg
ESP32_BT_send_msg

с char * на const char *, как проблема немедленно исчезнет.

Больше ничего там делать не надо. Всё будет как надо куда надо передаваться.

Меня вот это удивило:

if (buf_size - strlen(buf) >= 3) {  // Один байт для CR, второй для LF, третий для нуля.
        buf[strlen(buf)] = '\r';
        buf[strlen(buf)] = '\n';
        buf[strlen(buf)] = '\0';

        return 1;
    }

А вот и нет.

C:\Users\dmitriy.efimov\Desktop\Billy_the_Relay-main\Billy_the_Relay\Billy_the_Relay.ino: In function 'void handle_cmd_helper_send(const char*)':
Billy_the_Relay:998:29: error: invalid conversion from 'const char*' to 'char*' [-fpermissive]
  998 |     ESP_TCP_server_send_msg(msg);
      |                             ^~~
      |                             |
      |                             const char*
In file included from C:\Users\dmitriy.efimov\Desktop\Billy_the_Relay-main\Billy_the_Relay\Billy_the_Relay.ino:34:
C:\Users\dmitriy.efimov\Desktop\Billy_the_Relay-main\Billy_the_Relay\ESP_TCP.h:33:36: note:   initializing argument 1 of 'void ESP_TCP_server_send_msg(char*)'
   33 | void ESP_TCP_server_send_msg(char *msg);
      |                              ~~~~~~^~~
exit status 1
invalid conversion from 'const char*' to 'char*' [-fpermissive]

А, стоп. Сейчас кое-что переделаю.

А вот и да. Вы просто неаккуратно это сделали. Надо это сделать для всех трёх функций и в их предварительном описании, и в определении, т.е. в шести местах! Сделайте аккуратно и всё получится!

1 лайк

Всё, теперь получилось. Добро пожаловать в контрибьюторы нашего опенсорс-проекта :cowboy_hat_face:

Евгений Петрович, где проставляться будете? :joy: