Здравствуйте! Я бы хотел к вам обратиться за помощью! У меня сейчас стоит задача о прямой передаче данных между модулями ESP, вот уже долгое время никак не могу разобраться. Есть у меня 2 wifi модуля ESP12F и ESP07 (с внешней антенной). К модулю ESP12F я подсоединяю MPU6050 по I2C шине, реализую модуль в качестве клиента. ESP07 я реализовал в качестве сервера. Напрямую подключаюсь и пытаюсь передать данные с регистров MPU, но возникают трудности с самой передачей, или вообще ничего не передает, или медленно. Может подскажите как правильно реализовать? Совсем уже запутался. Быстро удается передавать только лишь уровень сигнала. Большое спасибо! (Иногда бывает что показывает нули по всем значениям, сбрасываю питание и выводятся уже нормальные данные с регистров) Код для клиента! Код (C++): #include<Wire.h> #include <EEPROM.h> #include <ESP8266WiFi.h> char* TKDssid; // Имя сервера (точки доступа) char* TKDpassword; // Пароль сервера (точки доступа) int TKDServerPort = 9001; IPAddress TKDServer(192,168,4,1); WiFiClient TKDClient; int MPU = 0x68; int16_t accResult[3], gyroResult[3]; void setup() { Wire.begin(); writeTo(MPU, 0x6B, 0); Serial.begin(115200); if(WiFi.status() == WL_CONNECTED) { WiFi.disconnect(); WiFi.mode(WIFI_OFF); delay(50); } WiFi.mode(WIFI_STA); // To Avoid Broadcasting An SSID WiFi.begin("TAKEONE", ""); // The SSID That We Want To Connect To CheckWiFiConnectivity(); TKDRequest(); } void loop() { GetAccelerometerReadings(accResult); GetGyroscopeReadings(gyroResult); /*Serial.print(gyroResult[0]); Serial.print('\t'); Serial.print(gyroResult[1]); Serial.print('\t'); Serial.print(gyroResult[2]); Serial.print('\t'); Serial.print(accResult[0]); Serial.print('\t'); Serial.print(accResult[1]); Serial.print('\t'); Serial.print(accResult[2]); Serial.println();*/ TKDClient.print(gyroResult[0]); TKDClient.print('\t'); TKDClient.print(gyroResult[1]); TKDClient.print('\t'); TKDClient.print(gyroResult[2]); TKDClient.print('\t'); TKDClient.print(accResult[0]); TKDClient.print('\t'); TKDClient.print(accResult[1]); TKDClient.print('\t'); TKDClient.print(accResult[2]); TKDClient.print('\n'); TKDClient.flush(); } //==================================================================================== void CheckWiFiConnectivity() { while(WiFi.status() != WL_CONNECTED) { for(int i=0; i < 10; i++) { delay(250); Serial.print("."); } Serial.println(""); } } //==================================================================================== void TKDRequest() { // Сначала убедитесь, что вы отключены TKDClient.stop(); // Если сообщение о успешном подключении отправлено if(TKDClient.connect(TKDServer, TKDServerPort)) { Serial.println ("Good connect!"); TKDClient.println ("Good connect!"); } } //==================================================================================== //Function for writing a byte to an address on an I2C device void writeTo(byte device, byte toAddress, byte val) { Wire.beginTransmission(device); Wire.write(toAddress); Wire.write(val); Wire.endTransmission(); } //Function for reading num bytes from addresses on an I2C device void readFrom(byte device, byte fromAddress, int num, byte result[]) { Wire.beginTransmission(device); Wire.write(fromAddress); Wire.endTransmission(); Wire.requestFrom((int)device, num); int i = 0; while(Wire.available()) { result[i] = Wire.read(); i++; } } //Function that reads the accelerometer readings void GetAccelerometerReadings(int16_t Result[]) { byte buffer[6]; readFrom(MPU, 0x3B, 6, buffer); Result[0] = (((int16_t)buffer[0]) << 8) | buffer[1]; Result[1] = (((int16_t)buffer[2]) << 8) | buffer[3]; Result[2] = (((int16_t)buffer[4]) << 8) | buffer[5]; } //Function that reads gyroscope readings void GetGyroscopeReadings(int16_t Result[]) { byte buffer[6]; readFrom(MPU, 0x43, 6, buffer); Result[0] = (((int16_t)buffer[0]) << 8) | buffer[1]; Result[1] = (((int16_t)buffer[2]) << 8) | buffer[3]; Result[2] = (((int16_t)buffer[4]) << 8) | buffer[5]; } Код для сервера. Код (C++): //-- Libraries Included -------------------------------------------------------------- #include <ESP8266WiFi.h> //------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------ // Authentication Variables char* TKDssid; // SERVER WIFI NAME char* TKDpassword; // SERVER PASSWORD //------------------------------------------------------------------------------------ #define MAXSC 2 // МАКСИМАЛЬНОЕ ЧИСЛО КЛИЕНТОВ WiFiServer TKDServer(9001); // Номер порта сервера WiFiClient TKDClient[MAXSC]; // Клиенты (устройства) //==================================================================================== //БАЗОВЫЕ НАСТРОЙКИ ПЕРЕД ЗАПУСКОМ //==================================================================================== void setup() { // Setting The Serial Port Serial.begin(115200); // Computer Communication // Print Message Of MPU6050 Setting Progress Serial.println(); Serial.println("MPU6050 ... Done"); // Setting Up A Wifi Access Point SetWifi("TAKEONE", ""); } //==================================================================================== //ГЛАВНЫЙ ЦИКЛ ПРОГРАММЫ //==================================================================================== void loop() { // Поиск доступных клиентов AvailableClients(); // Поиск сообщений клиента AvailableMessage(); } //==================================================================================== //НАСТРОЙКА ТОЧКИ ДОСТУПА И СЕРВЕРА //==================================================================================== void SetWifi(char* Name, char* Password) { // Останавливаем любой предыдущий вай-фай WiFi.disconnect(); // Установка режима WI-FI в точку доступа WiFi.mode(WIFI_AP_STA); Serial.println("WIFI Mode : AccessPoint Station"); // Имя и пароль точки доступа TKDssid = Name; TKDpassword = Password; // Запуск точки доступа WiFi.softAP(TKDssid, TKDpassword); Serial.println("WIFI < " + String(TKDssid) + " > ... Started"); // Ждем 1 секунду delay(1000); // Получаем IP адрес сервера IPAddress IP = WiFi.softAPIP(); // Выводим IP адрес сервера Serial.print("AccessPoint IP : "); Serial.println(IP); // Выводим MAC Address сервера Serial.print("AccessPoint MC : "); Serial.println(String(WiFi.softAPmacAddress())); // Запуск сервера TKDServer.begin(); TKDServer.setNoDelay(true); Serial.println("Server Started"); } //==================================================================================== //ПОИСК КЛИЕНТОВ //==================================================================================== void AvailableClients() { if (TKDServer.hasClient()) { for(uint8_t i = 0; i < MAXSC; i++) { //Поиск свободного клиента if (!TKDClient[i] || !TKDClient[i].connected()) { //Проверка прошлого клиента if(TKDClient[i]) { TKDClient[i].stop(); } // Проверка если клиенты подключены к серверу if(TKDClient[i] = TKDServer.available()) { Serial.println("New Client: " + String(i)); } // Продолжить сканирование continue; } } //no free/disconnected spot so reject WiFiClient TKDClient = TKDServer.available(); TKDClient.stop(); } else { } } //==================================================================================== //ПОИСК СООБЩЕНИЙ ОТ КЛИЕНТОВ //==================================================================================== void AvailableMessage() { //Проверка клиента на наличие данных! for(uint8_t i = 0; i < MAXSC; i++) { if (TKDClient[i] && TKDClient[i].connected() && TKDClient[i].available()) { while(TKDClient[i].available()) { String Message = TKDClient[i].readStringUntil('\r'); TKDClient[i].flush(); Serial.println("Client No " + String(i) + " - " + Message); } } } } //====================================================================================