Как передать 2 параметра с помощью библиотеки RCSwitch?

Я изучаю мир Arduino, но очень мало знаю о C и C++.

Я пытаюсь создать небольшой радиочастотный передатчик, который должен передавать данные о температуре и влажности с датчика DHT-11 на Raspberry Pi.

Я использую библиотеку RCSwitch для отправки информации с помощью Arduino и библиотеку 433Utils для ее получения на RPI.

Используя эти две демонстрационные библиотеки, я смог отправить целое число, содержащее информацию о температуре или влажности (mySwitch.send("00001010");), и прочитать его на RPI.

Но как мне отправить обе информации, чтобы RPI знал, какая из них является температурой, а какая — влажностью?

Я знаю, что мог бы просто отправить оба значения и предположить, что самая низкая температура — это температура, но это было бы очень грязно и не очень полезно.

РЕДАКТИРОВАТЬ:

Следуя ответу Эдгара в https://arduino.stackexchange.com/a/52992/11604, я знаю, что нужно написать:

void send_string(const char *str){
    int i = 0;
    for (char *p = str; *p; p++ ) {     
        mySwitch.send((i<<8) + *p, 16);
        i++;
    }
}

void loop() {   
    delay(1000); 
    h=40.650;
    t=32.0078;  
    hic=33.586;     
    String x = "$H" + String(h) + "T" + String(t) + "HI" + String(hic); 
    send_string(x.c_str());
}

Работает отлично! (см. его полный ответ для кода на стороне RPI)

, 👍0

Обсуждение

mySwitch.send("T45H50");, mySwitch.send("[45;50]");, mySwitch.send("T45"); mySwitch.send("H50");..., @Juraj

Вы действительно отправляете целое число или отправляете ASCII-представление двоичных битов целого числа?, @Majenko

Метод send() принимает либо целое число, либо строковое байтовое представление, либо трехстабильный код, я не могу отправить строку напрямую, @Dan Chaltiel


1 ответ


1

Выбранная вами библиотека не предназначена для передачи информации между узлами. Она предназначена для отправки простых команд ВКЛ/ВЫКЛ на переключатели, подключенные по радиочастоте. Настроить ее на отправку данных нужным вам способом будет сложно. Не невозможно, но сложно.

Вместо этого вам следует рассмотреть более подходящую систему, например, популярную библиотеку RadioHead. Похоже, что она поддерживает Raspberry Pi из коробки:

Raspberry Pi использует библиотеку BCM2835 для GPIO http://www.airspayce.com/mikem/bcm2835/ В настоящее время работает только с драйвером RH_NRF24 или другими драйверами, которым не требуется поддержка прерываний. Предоставлено Майком Публоном.

Другим вариантом может стать небольшой Arduino в качестве интерфейса между RF-модулем и Pi.

,

Я думаю, что эта библиотека - то, что я искал, спасибо! Но я не понимаю вашего последнего предложения, чем это отличается от того, что я делаю?, @Dan Chaltiel

На самом деле, RadioHead слишком сложен, когда вы не до конца понимаете, что делаете (надеюсь, я когда-нибудь пойму). Я нашел очень хороший ответ с RCSwitch [https://arduinoprosto.ru/q/52989/how-to-transmit-string-data-using-the-rc-switch-library](здесь)., @Dan Chaltiel