Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Модератор: immortal
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Arduino 1.8.10
ESP32 отсюда https://github.com/espressif/arduino-es ... manager.md
Библиотек не нужно, они уже входят в ESP32 (кроме PubSubClient).
Для wroom в настройках скорее всего выбирать ESP32 Dev Module
ESP32 отсюда https://github.com/espressif/arduino-es ... manager.md
Библиотек не нужно, они уже входят в ESP32 (кроме PubSubClient).
Для wroom в настройках скорее всего выбирать ESP32 Dev Module
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Я так и делаю, выбираю только ESP32 Dev Module, потому что с другими платами у меня скетч не проходит проверку. Если выбрана не та плата, то при проверке скетча мне об этом сообщают.
Такие настройки платы и так после загрузки скетча
При установке библиотеки PubSubClient, в описании я не вижу, чтобы эта библиотека подходила для ESP32
Какая версия ESP32 для платы у вас стоит?
Какая версия PubSubClient у вас?
Такие настройки платы и так после загрузки скетча
СпойлерПоказать
СпойлерПоказать
Какая версия ESP32 для платы у вас стоит?
Какая версия PubSubClient у вас?
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Что-то никак ваш скетч не хочет устанавливаться. У вас на скриншоте выбрана скорость 921600
Если я выберу скорость загрузки 921600, то появляется вот такое сообщение
Если я выберу скорость загрузки 115200, то появляется вот такое сообщение и почему-то он сообщает про такой режим работы с памятью DIO. Бывает, что одни модули работают в DIO, другие в QIO.
Саму ошибку я устранил с помощью flash tool, стер все данные с памяти
Если я заливаю такой скетч ESP32_RGB_LED_Strip_with_Color_Picker_Web_Server, код можете скопировать, только указать данные WiFi, то все работает.
Если я выберу скорость загрузки 921600, то появляется вот такое сообщение
СпойлерПоказать
СпойлерПоказать
СпойлерПоказать
Если я заливаю такой скетч ESP32_RGB_LED_Strip_with_Color_Picker_Web_Server, код можете скопировать, только указать данные WiFi, то все работает.
Код: Выделить всё
/*********
Rui Santos
Complete project details at https://randomnerdtutorials.com
*********/
// Load Wi-Fi library
#include <WiFi.h>
// Replace with your network credentials
const char* ssid = "указываем имя вашей сети";
const char* password = "указываем пароль вашей сети";
// Set web server port number to 80
WiFiServer server(80);
// Decode HTTP GET value
String redString = "0";
String greenString = "0";
String blueString = "0";
int pos1 = 0;
int pos2 = 0;
int pos3 = 0;
int pos4 = 0;
// Variable to store the HTTP req uest
String header;
// Red, green, and blue pins for PWM control
const int redPin = 13; // 13 corresponds to GPIO13
const int greenPin = 12; // 12 corresponds to GPIO12
const int bluePin = 14; // 14 corresponds to GPIO14
// Setting PWM frequency, channels and bit resolution
const int freq = 5000;
const int redChannel = 0;
const int greenChannel = 1;
const int blueChannel = 2;
// Bit resolution 2^8 = 256
const int resolution = 8;
// Current time
unsigned long currentTime = millis();
// Previous time
unsigned long previousTime = 0;
// Define timeout time in milliseconds (example: 2000ms = 2s)
const long timeoutTime = 2000;
void setup() {
Serial.begin(115200);
// configure LED PWM functionalitites
ledcSetup(redChannel, freq, resolution);
ledcSetup(greenChannel, freq, resolution);
ledcSetup(blueChannel, freq, resolution);
// attach the channel to the GPIO to be controlled
ledcAttachPin(redPin, redChannel);
ledcAttachPin(greenPin, greenChannel);
ledcAttachPin(bluePin, blueChannel);
// Connect to Wi-Fi network with SSID and password
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// Print local IP address and start web server
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
}
void loop(){
WiFiClient client = server.available(); // Listen for incoming clients
if (client) { // If a new client connects,
currentTime = millis();
previousTime = currentTime;
Serial.println("New Client."); // print a message out in the serial port
String currentLine = ""; // make a String to hold incoming data from the client
while (client.connected() && currentTime - previousTime <= timeoutTime) { // loop while the client's connected
currentTime = millis();
if (client.available()) { // if there's bytes to read from the client,
char c = client.read(); // read a byte, then
Serial.write(c); // print it out the serial monitor
header += c;
if (c == '\n') { // if the byte is a newline character
// if the current line is blank, you got two newline characters in a row.
// that's the end of the client HTTP request, so send a response:
if (currentLine.length() == 0) {
// HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
// and a content-type so the client knows what's coming, then a blank line:
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println("Connection: close");
client.println();
// Display the HTML web page
client.println("<!DOCTYPE html><html>");
client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
client.println("<link rel=\"icon\" href=\"data:,\">");
client.println("<link rel=\"stylesheet\" href=\"https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css\">");
client.println("<script src=\"https://cdnjs.cloudflare.com/ajax/libs/jscolor/2.0.4/jscolor.min.js\"></script>");
client.println("</head><body><div class=\"container\"><div class=\"row\"><h1>ESP Color Picker</h1></div>");
client.println("<a class=\"btn btn-primary btn-lg\" href=\"#\" id=\"change_color\" role=\"button\">Change Color</a> ");
client.println("<input class=\"jscolor {onFineChange:'update(this)'}\" id=\"rgb\"></div>");
client.println("<script>function update(picker) {document.getElementById('rgb').innerHTML = Math.round(picker.rgb[0]) + ', ' + Math.round(picker.rgb[1]) + ', ' + Math.round(picker.rgb[2]);");
client.println("document.getElementById(\"change_color\").href=\"?r\" + Math.round(picker.rgb[0]) + \"g\" + Math.round(picker.rgb[1]) + \"b\" + Math.round(picker.rgb[2]) + \"&\";}</script></body></html>");
// The HTTP response ends with another blank line
client.println();
// Request sample: /?r201g32b255&
// Red = 201 | Green = 32 | Blue = 255
if(header.indexOf("GET /?r") >= 0) {
pos1 = header.indexOf('r');
pos2 = header.indexOf('g');
pos3 = header.indexOf('b');
pos4 = header.indexOf('&');
redString = header.substring(pos1+1, pos2);
greenString = header.substring(pos2+1, pos3);
blueString = header.substring(pos3+1, pos4);
/*Serial.println(redString.toInt());
Serial.println(greenString.toInt());
Serial.println(blueString.toInt());*/
ledcWrite(redChannel, redString.toInt());
ledcWrite(greenChannel, greenString.toInt());
ledcWrite(blueChannel, blueString.toInt());
}
// Break out of the while loop
break;
} else { // if you got a newline, then clear currentLine
currentLine = "";
}
} else if (c != '\r') { // if you got anything else but a carriage return character,
currentLine += c; // add it to the end of the currentLine
}
}
}
// Clear the header variable
header = "";
// Close the connection
client.stop();
Serial.println("Client disconnected.");
Serial.println("");
}
}
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Вопрос решился, нужно было выбрать Flash Mode DIO, теперь другая проблема
В настройках я указал все так, указал свой IP адрес, не 192.168.1.8, а другой, а на скриншоте я его стер, добавил две строки для авторизации, но почему-то он указывает другой IP адрес, а не тот, что я указал?
СпойлерПоказать
СпойлерПоказать
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Все верно, там должно быть DIO, я неправильный скриншот сделал (менял плату на другую и не все вернул назад).
По умолчанию плата получает адрес от роутера по DHCP, его можно не указывать (если хотите, конечно, то это нужно сделать в функции setupWiFi()).
В разделе MQTT Settings указывать нужно адрес сервера, где крутится MQTT-брокер, а не какой-то другой. Ну либо вообще ничего не указывать, если вам не нужен MQTT
По умолчанию плата получает адрес от роутера по DHCP, его можно не указывать (если хотите, конечно, то это нужно сделать в функции setupWiFi()).
В разделе MQTT Settings указывать нужно адрес сервера, где крутится MQTT-брокер, а не какой-то другой. Ну либо вообще ничего не указывать, если вам не нужен MQTT
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Вот оно что, а я тут голову сломал, не мог понять, почему не работает на QIO . У меня имеется сервер MQTT и на нем настроена авторизация. Я правильно понимаю, чтобы шлюз подключился к серверу MQTT, нужно добавить эти строки?
static const char* mqtt_server = "0.0.0.0"; //Адрес сервера
static const uint16_t mqtt_port = 1883; //Порт сервера
static const char* mqtt_user = ""; //Логин от сервера
static const char* mqtt_pass = ""; //Пароль от сервера
static const char* mqtt_client = "R4SClient";
static const char* mqtt_server = "0.0.0.0"; //Адрес сервера
static const uint16_t mqtt_port = 1883; //Порт сервера
static const char* mqtt_user = ""; //Логин от сервера
static const char* mqtt_pass = ""; //Пароль от сервера
static const char* mqtt_client = "R4SClient";
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Я указал IP адрес сервера MQTT, а он почему-то тянет IP адрес, который ему выдает DHCP. Строка static const char* mqtt_server = "0.0.0.0"; указывает конкретный ip адрес сервера или эта строка не работает?
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Можете привести пример, как мне настроить скетч таким образом, чтобы шлюз мог подключиться к серверу MQTT с авторизацией?
Так нужно прописывать в функции setupWiFi()?
нашел еще такой вариант
Так нужно прописывать в функции setupWiFi()?
Код: Выделить всё
// присваиваем статический IP адрес
WiFi.mode(WIFI_STA); // режим клиента
WiFi.config(IPAddress(192, 168, 1, 20), IPAddress(192, 168, 1, 1), IPAddress(255, 255, 255, 0), IPAddress(192, 168, 1, 1));
нашел еще такой вариант
Код: Выделить всё
// Удаляем предыдущие конфигурации WIFI сети
WiFi.disconnect(); // обрываем WIFI соединения
WiFi.softAPdisconnect(); // отключаем отчку доступа(если она была
WiFi.mode(WIFI_OFF); // отключаем WIFI
delay(500);
// присваиваем статический IP адрес
WiFi.mode(WIFI_STA); // режим клиента
WiFi.config(IPAddress(192, 168, 1, 20), IPAddress(192, 168, 1, 1), IPAddress(255, 255, 255, 0), IPAddress(192, 168, 1, 1));
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
с горе пополам получилось, но чайник не находит и не хочет с ним сопрягаться. Через gatttol соединение проходит успешно, а вот с esp32 как-то не получается. Просто в gatttool я использую gatttool -t random -b 00:00:00:00:00:00 -I, может здесь также?
И почему-то ip по прежнему он показывает 192.168.1.8, когда я подключаюсь к нем через web по 192.168.1.20?
Сообщение через браузер {"monitoring":5}
И почему-то ip по прежнему он показывает 192.168.1.8, когда я подключаюсь к нем через web по 192.168.1.20?
СпойлерПоказать
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB