Как передать 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)
@Dan Chaltiel, 👍0
Обсуждение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
- Радиочастотный сниффер с Arduino
- Могу ли я проверить, успешно ли отправлено сообщение, используя Radiohead_ASK?
- RF Keyfob простой код кнопки
- CC1101 Проблемы с приемом и передачей
- Как объявить массив переменного размера (глобально)
- Программирование Arduino с использованием Python, а не C/C ++
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Как справиться с rollover millis()?
mySwitch.send("T45H50");
,mySwitch.send("[45;50]");
,mySwitch.send("T45"); mySwitch.send("H50");
..., @JurajВы действительно отправляете целое число или отправляете ASCII-представление двоичных битов целого числа?, @Majenko
Метод
send()
принимает либо целое число, либо строковое байтовое представление, либо трехстабильный код, я не могу отправить строку напрямую, @Dan Chaltiel