Почитал я тут поподробнее про 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 не понравилось я понимаю конечно что у 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
}