Передать массив байтов в Char и отправить на отдельный Arduino
Я пытаюсь отправить данные между Arduino Nano и D1 Mini (модуль ESP 8266)
Мой код ,как показано ниже в Nano, который будет преобразованием,
#include <DES.h>
#include <SoftwareSerial.h>
SoftwareSerial link(2, 3); // Rx, Tx
DES des;
byte in[8];
String input;
char text[20];
char charVal[6];
char buf[30];
void setup() {
link.begin(9600);
Serial.begin(9600);
Serial.println("Hello! Pleace Enter Your Data to Encrypt");
}
void tdesTest() {
byte out[8];
byte key[] = {
0x3b, 0x38, 0x98, 0x37, 0x15, 0x20, 0xf7, 0x5e, // key A
0x92, 0x2f, 0xb5, 0x10, 0xc7, 0x1f, 0x43, 0x6e, // key B
0x3b, 0x38, 0x98, 0x37, 0x15, 0x20, 0xf7, 0x5e, // key C (in this case A)
};
Serial.println();
Serial.println("====== Triple-DES test ======");
//encrypt
Serial.print("Encrypt...");
unsigned long time = micros();
des.tripleEncrypt(out, in, key);
time = micros() - time;
Serial.print("done. (");
Serial.print(time);
Serial.println(" micros)");
printArray(out);
/*
//decrypt
for (int i = 0; i < 8; i++)
{
in[i] = out[i];
}
Serial.print("Decrypt...");
time = micros();
des.tripleDecrypt(out, in, key);
time = micros() - time;
Serial.print("done. (");
Serial.print(time);
Serial.println(" micros)");
printArray(out);
delay(2000);
*/
}
//printing output
void printArray(byte output[])
{
for (int i = 0; i < 8; i++)
{
if (output[i] < 0x10)
{
Serial.print("0");
}
Serial.print(output[i], HEX);
Serial.print(" ");
delay(100);
}
Serial.println();
}
void loop() {
while (Serial.available() > 0) {
String input = Serial.readString(); // read the incoming data as string
memset(in, 0, 9); // Erase the contents of in[]
input.toCharArray((char *)in, 9); // Copy up to 8 bytes from the string
tdesTest();
}
}
В printArray(вывод байтов[])
я получаю вывод в виде шестнадцатеричного
байта, как показано ниже
Я пытаюсь отправить эти зашифрованные данные с Arduino nano на D1 Mini,
Я написал небольшое приложение-приемник в D1 Mini , и оно работает, Код приемника:
//Receiver code
#include <SoftwareSerial.h>
SoftwareSerial link(4, 0); // Rx, Tx
byte greenLED = 13;
char cString[2000];
byte chPos = 0;
byte ch = 0;
char dataStr[6];
void setup()
{
link.begin(9600); //setup software serial
Serial.begin(9600); //setup serial monitor
pinMode(greenLED, OUTPUT);
}
void loop()
{
while (link.available())
{
ESP.wdtDisable();
//read incoming char by char:
ch = link.read();
cString[chPos] = ch;
chPos++;
digitalWrite(greenLED, HIGH); //flash led to show data is arriving
delay(20);
digitalWrite(greenLED, LOW);
}
cString[chPos] = 0; //terminate cString
chPos = 0;
Serial.print(cString);
ESP.wdtEnable(1);
Serial.flush();
}
Я хочу передать эти шестнадцатеричные данные,сгенерированные в D1 Mini с Arduino Nano,
Я написал тестовый код в Arduino Nano для передатчика(Nano), и между приемником (D1 Mini) он работает,
//Transmitter Code for Testing Connections
#include <SoftwareSerial.h>
SoftwareSerial link(2, 3); // Rx, Tx
byte greenLED = 12;
char text[20] ;
char charVal[6];
void setup()
{
link.begin(9600);
Serial.begin(9600);
}
void loop()
{
strcat(text, "Message"); //append to empty string
Serial.println(text); //print to local screen for debug*
link.println(text);
delay(10000);
}
Пожалуйста, помогите мне отправить эти шестнадцатеричные
данные одним кадром в D1 Mini.
1 ответ
Лучший ответ:
Вы можете изменить функцию printArray для работы с предоставленным
экземпляром печати:
void printArray(byte output[], Print& serial)
{
for (int i = 0; i < 8; i++)
{
if (output[i] < 0x10)
{
serial.print("0");
}
serial.print(output[i], HEX);
serial.print(" ");
}
serial.println();
}
затем вы можете использовать его как printArray(выход, серийный);
или printArray(выход, ссылка);
.
- Модули HC-12 перестали принимать, не могу понять почему
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- AT-команда не отвечает на последовательный монитор
- Получить данные с сайта с помощью ESP8266 с помощью AT-команд
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Программное обеспечениеSerial с ESP8266
- Как связаться с ESP8266 ESP01, отправив данные через программный сериал на Arduino Uno?
- Arduino Nano, ESP8266-01 связь
Спасибо за комментарий, я применил ваше решение следующим образом: [ссылка](https://drive.google.com/file/d/1H1jHvRVSRtEHCetsYQ4vq08NhWdkX55m/view?usp=sharing) и получаю эту ошибку [ссылка](https://drive.google.com/file/d/114NBymjGduXe2TxsCCM84dVfOWbMYRnj/view?usp=sharing), @Vinod Amarathunga
Пожалуйста, помогите мне исправить это, если я использую неправильный способ, @Vinod Amarathunga
Не могли бы вы поподробнее, пожалуйста ?, @Vinod Amarathunga
Не могли бы вы показать это в коде ?, @Vinod Amarathunga
Спасибо, понял. Но приемник не показывает никакого вывода. Я думаю, что это передаст шестнадцатеричный вывод как есть, но приемник ожидает ввода символов. Любая идея, как сделать его символом
printArray(out, ссылка);
, @Vinod Amarathungaбайт-это символ, символ-это байт. вы можете сделать " ссылка.запись(выход, 8)";, @Juraj
Спасибо , это сработало, но то, что я получаю, нечитаемо [ссылка](https://drive.google.com/file/d/1H0AE9LZ_Vwuzb1CGArd3l6gm81w2GdRU/view?usp=sharing), @Vinod Amarathunga
конечно, это нечитабельно. это тот же массив, для которого вы используете свой printArray для его печати., @Juraj
Не могли бы вы посоветовать, как сделать его читабельным ?, @Vinod Amarathunga
используйте функцию printArray, @Juraj
Я добавил его как этот [Код](https://drive.google.com/file/d/1ozaJCk9N84PDZiWkJFm_dvY5JkGyOGwu/view?usp=sharing) но получаю ошибку [Ошибка](https://drive.google.com/file/d/1f6tSgjBryRC__ZjndS5Il1mm75YrP8Pt/view?usp=sharing), @Vinod Amarathunga
Не могли бы вы помочь мне исправить это, @Vinod Amarathunga
Не волнуйся, я был готов все исправить., @Vinod Amarathunga
Спасибо за поддержку, очень признателен., @Vinod Amarathunga
Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/127166/discussion-between-juraj-and-vinrocka)., @Juraj