Самостоятельно прописать мак и имя клиента для ESP8266
- Войдите на сайт для отправки комментариев
Чт, 23/06/2022 - 13:47
Доброго времени суток. Учусь работать с ардуино, и почти сразу начал с настройки ESP8266. Получается подключить плату к роутеру. Но если подключить несколько, то начинаются конфликты, потому что мак у них один и тот же. Возможно потому что взял самые дешевые для тренировки и с другими такой проблемы не будет. Но пока вожусь с ними. Подключаюсь так:
#include <ESP8266WiFi.h> // Библиотека для создания Wi-Fi подключения (клиент или точка доступа)
#include <WiFiClient.h>
#include <ESP8266WebServer.h> // Библиотека для управления устройством по HTTP (например из браузера)
#include <FS.h> // Библиотека для работы с файловой системой
#include <ESP8266FtpServer.h> // Библиотека для работы с SPIFFS по FTP
const char* ssid = "";
const char* password = "";
// Пробовал сделать так: IPAddress mac = (0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED);
void setup() {
Serial.begin(9600); // Инициализируем вывод данных на серийный порт со скоростью 9600 бод
WiFi.begin(ssid, password); // Инициализируем подключение к указанной вайфай сети
// И вот тут вставить WiFi.config(mac); Но ругается.
}
}
void loop() {
// put your main code here, to run repeatedly:
}
А про имя клиента вообще мыслей нет
например можно так const char* ssid = "SSID_NAME"; const char* password = "password"; IPAddress ip(192, 168, 1, 200); IPAddress gateway(192, 168, 1, 1); IPAddress subnet(255, 255, 255, 0); uint8_t mac[6] {0xA8, 0xD9, 0xB3, 0x00, 0x00, 0x02}; ……. void WiFi_conn() { WiFi.mode(WIFI_OFF); delay(1000); WiFi.mode(WIFI_STA); Serial.println(); Serial.print("OLD ESP8266 MAC: "); Serial.println(WiFi.macAddress()); wifi_set_macaddr(0, const_cast<uint8*>(mac)); Serial.print("NEW ESP8266 MAC: "); Serial.println(WiFi.macAddress()); WiFi.begin(ssid, password); WiFi.config(ip, gateway, subnet); Serial.println(""); // ждем соединения: while (WiFi.status() != WL_CONNECTED) { for (int i = 0 ; i < 10 ; i++) led_blink(50); Serial.print("."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); }В принципе получилось. Только почему-то у меня не захотело работать без функции void setup(). Пришлось в неё перенести все, что в вашей
voidWiFi_conn(). Хотя по идее можно было сделать отдельноvoid setup() (тут напр, инициализировать вывод данных и указать скорость) иvoidWiFi_conn(). Но так почему-то не получилось.И мне не нужно было прописывать адрес, гетвей, маску. Я их убрал.Но вопросы остались. Этот новый мак как надолго? Старый где-то сохранился? Как вернуть старый?Я поэксперементировал. Тупо перезагрузил плату и заново залил скетч. Выдало:Тоесть получается, что новый действует пока залит скетч? Тоесть можно тут же вернуть старый? Или залить новый, где нет подмены и там будет старый?
uint8_t mac[6] {0xA8, 0xD9, 0xB3, 0x00, 0x00, 0x02}; ……. wifi_set_macaddr(0, const_cast<uint8*>(mac));Кстати, попробовал эти строки заменить на:
byte arduino_mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED }; // ..... wifi_set_macaddr(0, const_cast<byte*>(arduino_mac));И тоже получилось. Только не совсем понятна разница между этими вариантами.
И хотелось бы понять, что значат ваши строки (интуитивно догадываюсь, что остановка вайфая и запуск):
Но где об этом можно прочитать? Пробовал читать библиотеку WiFiClient, но либо там этого нет, либо я не понял.