Передача данных между двумя ESP32. Где ж я так накосячил?

Links
Offline
Зарегистрирован: 19.02.2021

Приветствую камрады!

Подскажите пожалуйсте где я промахнулся, ибо сил больше нет.

Задача примитивно простая - одна ESP32 (сервер) передает второй (клиенту) команду из трех байт. Клиент тупо рэтранслирует эти три байта в Serial2, на радио модуль. Все. Но нет. 

Подключение ESP32 реализовано через WiFi, с помощью

#include <WiFi.h>
WiFiServer Server(ServerPort);
WiFiClient RemoteClient;

Собственно команда с сервера:

	if (RemoteClient.connected()){
		if(myTime - dataSendTimer > 10){ //чтобы немножко притормозить передачу данных, так как антена работает на 9600baud
			RemoteClient.print(0x61);  		
			RemoteClient.print(0xC3);           
	    	        RemoteClient.print(0x61);
			Serial.println(".");
			dataSendTimer = myTime;
		}
	}

И на клиенте принимается вот так:

	if(client.connected()){
   		if (client.available()) {
    		   byte c = client.read();
    		   Serial.print(c);
    		   Serial2.write(c);
		}
	}

Так вот. Все это работает неправильно. Команда в монитор порта клиента уже попадает какя-то неправильная. Подключаюсь к серверу с телефона, все ок. Да, в десятичном виде но оно. А на клиенте дичь какая-то, ну вообще никак, не похоже ни на одну из систем исчесления. И естественно устройство подключенное через антену не реагирует... 

Кстати, если в коде клиента прописать вот это:

	Serial2.write(0x61);  			
	Serial2.write(0xC3);           
	Serial2.write(0x61);

То все отлично работает. Блин, можно прописать чтобы клиент реагировал на команду от сервера, которую он понимает, и отправлял через антену правильную команду, но так же не интерстно))) Я не пониаю где теряется нужные значения, и почему оно конвертируется в непоймичто. Подскажите куда рыть пожалуйста!

rkit
Offline
Зарегистрирован: 23.11.2016

Может ты не будешь смешивать print и write?

Links
Offline
Зарегистрирован: 19.02.2021

Согласен. Косяк. Спасибо. Иду исправлять. 

Меня не оправдывает, но если перепутать методы, компилятор же должен выдать ошибку, так как библиотека просто не понимает чего я от нее хочу... Поправлю отпишусь.

 

rkit
Offline
Зарегистрирован: 23.11.2016

Нет, не должен. Программа корректная и делает ровно то, что ты написал.

Links
Offline
Зарегистрирован: 19.02.2021

Спасибо вам добрый человек!!!! Все заработало. Да, я не понимал что есть разница между print и write. Пришлось таки немного покомбинировать, но всетаки взлетело! 

В итоге получился следуующий код.

Сервер:

    if (RemoteClient.connected()){
		  if(myTime - dataSendTimer > 10){
			  RemoteClient.write(0x61);
              RemoteClient.write(0xC3);
              RemoteClient.write(0x61);	
			Serial.println(".");
			dataSendTimer = myTime;
		}

Клиент:

if(client.connected()){
   		if (client.available()) {
        Serial2.write(client.read());
    		Serial.println(client.read(), HEX);
		}
	}

Хотя таймер там бесполезен по ходу... Ну то такое. Спасибо еще раз!