Портирование с 8266 на 32 или что в имени ему еёшном?

Почитал я тут поподробнее про esp32 и решил поиграться с этим зверем. Под рукой оказалась платка с оледом на борту и после недолгих шаманств она запустилась с библиотекой от адафрут на стандартных i2c пинах 4 и 5 - пришлось несколько изменить обращения к экрану но нерадикально. Практически всё применяемое в 8266 кроме ssdp заработало сразу. Но самый большой прикол оказался для меня таким:
Я управляю кучей помп клапанов и шаровых кранов (в некотором роде самогонный аппарат). И в числе прочего есть глобальные переменные разрешения работы с каждым из устройств, которые управляются с вэбморды. Переменные при объявлении имеют вид-
boolean device_enable = true ;
Компилятор на эту строку обругался. Ничего не понимая подставил ее в рабочий код примера и опять ругань.

Спойлер

HelloServer_kuku:20:1: error: stray ‘\320’ in program
boolean drop_enаble = true; //глобальное разрешение слива ОШИБКА
^
HelloServer_kuku:20:1: error: stray ‘\260’ in program
HelloServer_kuku:20:22: error: expected initializer before ‘ble’
boolean drop_enаble = true; //глобальное разрешение слива ОШИБКА
^

Оказалось ему …ble не понравилось :frowning: я понимаю конечно что у 32 есть это бле в аппаратной начинке, но какое его собачье дело во фрагменте имени объявляемой переменной ?
причем перенаписанное то же самое ругани не вызывает. привел код с обоими вариантами. кстати может быть пригодится как пример запуска онбордового дисплея.

Спойлер
#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>


const char* ssid = "................";
const char* password = "................";

WebServer server(80);

// Определяем размеры матрицы
#define WIDTH 128
#define HEIGHT 64

//boolean     drop_enable         = true;              //глобальное разрешение слива КОМПИЛЛИРУЕТСЯ
boolean     drop_enаble         = true;              //глобальное разрешение слива ОШИБКА

// Определяем выводы к которым подключена OLED матрица
const uint8_t disp_SDA = 5;
const uint8_t disp_SCL = 4;

// Создаём объект дисплея
Adafruit_SSD1306 display(WIDTH, HEIGHT, &Wire, -1);

const int led = 13;

void handleRoot() {
  digitalWrite(led, 1);
  server.send(200, "text/plain", "hello from esp32!");
  digitalWrite(led, 0);
}

void handleNotFound() {
  digitalWrite(led, 1);
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i = 0; i < server.args(); i++) {
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
  digitalWrite(led, 0);
}

void setup(void) {
  pinMode(led, OUTPUT);
  digitalWrite(led, 0);
  Serial.begin(115200);
    Wire.begin(disp_SDA, disp_SCL);
    if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C, false, false)) {
        Serial.println(F("Не удалось инициировать дисплей"));
        for(;;);
    }
    delay(2000); 
    display.clearDisplay();

  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("start WROOM"); display.display();
         
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  display.print("connect WiFi ");

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
      display.print("."); display.display();
  }

  display.println("!"); display.display();
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  display.println ("Connected ");
  display.println (ssid);
  display.println (WiFi.localIP());
  display.display();


  if (MDNS.begin("esp32")) {
    Serial.println("MDNS responder started");
      display.println ("MDNS started");
  }

  server.on("/", handleRoot);

  server.on("/inline", []() {
    server.send(200, "text/plain", "this works as well");
  });

  server.onNotFound(handleNotFound);

  server.begin();
  Serial.println("HTTP server started");
  display.println ("HTTP server started");
    display.display();
}

void loop(void) {
  server.handleClient();
  delay(2);//allow the cpu to switch to other tasks
}

Ошибка какая конкретно? Приведите её сюда.
Только быстрей, ща злые придут!

В той теме уже пришёл злой @Araris и всё веселье прикрыл :frowning:

Поиграем в игру "хороший и плохой полицейский форумчанин)
Блин, где прокрутка?

Причём тут ble? У Вас в коде в слове device_enable буква ‘а’ русская (даже в Вашем посте осталась - видимо, копипастили). Замените на латинскую и никакого бля т.е. ble не будет :slight_smile:

Никакого. Он же Вам прямо сказал в чём проблема: “stray ‘\320’ in program”, кто ж виноват, что Вы не прочитали?

1 лайк

@ЕвгенийП , Вам весь код видно?

но этот код для esp8266 однако компилировался :wink:
я его начал просто под esp32 пытаться скомпилировать и выметать по дороге ошибки
про stray я прочитал, только не понял, что он имеет ввиду
вот этот блинк компилируется для esp8266 и выдает ошибку для esp32

коль скоро виновата кириллическая а, то почему на неё все время не ругается ?

Спойлер
boolean     drop_enаble         = true;              //глобальное разрешение слива

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(15, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

Не этот! Вы случайно внесли туда русскую букву ‘a’ в процессе

Да, и вообще. Чего воду в ступе толочь? Скопипастите строку "boolean drop_enаble = true; " из первого спойлера первого поста и запустите компилятор для чего угодно (хоть для UNO), а потом поменяйте букву на латинскую и запустите ещё раз. Всё. Вопрос закрыт и обсуждать больше нечего.

2 лайка

ну ведь вранье же…

1 лайк
  1. Нет
  2. Если открыть на весь экран, то весь
  3. Если нажать кнопку копирования, то копируется весь
  4. Я вообще не смотрел код, я прочитал сообщение (первый спойлер) и скопипастил строку прямо из сообщения, вставил в бинарный редактор и убедился, что буква русская.
1 лайк

я выше привел blink с этой строкой, который компилируется для 8266 и некомпилируется для 32

для UNO ошибка , для esp8266 все проходит

попробовал - не компилируется

Ну что лезть в бутылку-то, когда очевидно неправ?

1 лайк

Видимо бутылки разные…

Простите, Вы со поспорить решили?

Повторяю,

  1. Скопипастите строку "boolean drop_enаble = true; " из первого спойлера первого поста;
  2. Запустите компилятор (на пустом скетче, но с этой строкой) для чего угодно (хоть для UNO);
  3. Потом поменяйте букву на латинскую и запустите ещё раз

Это всё! Если Ваш цель разобраться, конечно. Если же Ваша цель - поспорить и доказать свою правоту, то это без меня, пожалуйста.

Один и тот же код? Ну-ну. Пусть проходит, только без меня. (хотя, хз что у Вас там за компилятор, есть такие, которые русские буквы “принимают”, может у Вас такой, но мне это неинтересно. Что означает это сообщение я Вам сказал)

1 лайк

если что могу зумом или скайпом показать вживую а то меня тут обманщиком нарекли
я уже понял в чем проблема, я не понимаю, почему для 8266 это прокатывает
я конечно понимаю, что нашим звёдным магистрам при отсутствии ответа проще ответить в стиле “сам дурак” , из-за чего теперь и я почувствовал на себе возросшую токсичность общения на этом форуме, о чем в последнее время тут многие пишут.
Если кого то из высокородных я отвлек от дел праведных своими глупыми вопросами, прошу извинить.

Из этого рисунка никак не следует, что это тот же код с русской буквой.

Мне не надо. Неинтересно.

В сообщении выше я Вам курсивом всё объяснил - если у Вас компилятор ест русские буквы, значит ест, может опция такая стоит - расширенный алфавит.

1 лайк

Гениально, шеф!)) Я так однажды О и 0 перепутал и много часов искал причину…

1 лайк

Не нужно спорить.
Посмотрите Ваш код в любом HEX редакторе. И, кстати, это наиболее универсальный способ борьбы с ошибками подобного типа.
Так что лучше всего поблагодарите за подсказку и запомните этот прием на будущее.

2 лайка

ты для начала boolean на bool поменяй.

1 лайк