Передача данных между двумя ESP32. Где ж я так накосячил?
- Войдите на сайт для отправки комментариев
Приветствую камрады!
Подскажите пожалуйсте где я промахнулся, ибо сил больше нет.
Задача примитивно простая - одна 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);
То все отлично работает. Блин, можно прописать чтобы клиент реагировал на команду от сервера, которую он понимает, и отправлял через антену правильную команду, но так же не интерстно))) Я не пониаю где теряется нужные значения, и почему оно конвертируется в непоймичто. Подскажите куда рыть пожалуйста!
Может ты не будешь смешивать print и write?
Согласен. Косяк. Спасибо. Иду исправлять.
Меня не оправдывает, но если перепутать методы, компилятор же должен выдать ошибку, так как библиотека просто не понимает чего я от нее хочу... Поправлю отпишусь.
Нет, не должен. Программа корректная и делает ровно то, что ты написал.
Спасибо вам добрый человек!!!! Все заработало. Да, я не понимал что есть разница между print и write. Пришлось таки немного покомбинировать, но всетаки взлетело!
В итоге получился следуующий код.
Сервер:
Клиент:
Хотя таймер там бесполезен по ходу... Ну то такое. Спасибо еще раз!