простая (нет) беспроводная сеть датчиков

bwana

✩✩✩✩✩✩✩
3 Окт 2024
15
0
RX DS18B20 RF433:
#include <GyverOneWire.h>
#include <Gyver433.h>
#include <GyverDS18.h>
#define G433_SPEED 1000
#define RADIO_BUF_SIZE 5
#define RADIO_DATA 8
#define RADIO_VCC 9
GyverDS18Single ds(10);  // пин
Gyver433_TX <RADIO_DATA, G433_XOR> tx;
void setup() {
    pinMode(RADIO_VCC, OUTPUT);         // Пины
    Serial.begin(9600);
    ds.setResolution(9);
    ds.requestTemp();  // первый запрос на измерение
}
void loop() {
    
    if (ds.ready()) {         
        if (ds.readTemp()) {
            Serial.print("temp: ");
            Serial.print(ds.getTemp());
            Serial.println("C*");
        } else {
            Serial.println("error");
        }
        uint16_t result = ds.getTemp();
    uint8_t data[3];              // Формируем и отсылаем пакет
    data[0] = 0xA1;
    data[1] = highByte(result);
    data[2] = lowByte(result);
    digitalWrite(RADIO_VCC, HIGH);
    _delay_ms(1);
    tx.sendData(data);
    tx.sendData(data);
    tx.sendData(data);
    tx.sendData(data);
    tx.sendData(data);
    digitalWrite(RADIO_VCC, LOW);
    delay(30000);
    ds.requestTemp();
    }
}
Ардуино нано. В сериал исправно пишет температуру, пакеты уходят в эфир.

Приёмник не могу даже скомпилировать, ругается Compilation error: no matching function for call to 'GyverDS18::getTemp(int)'

что я делаю не так? Верно ли выставил RADIO_BUF_SIZE 5 и ds.setResolution(9); одинаковыми на передатчике и на приёмнике?

Код приёмника на NodeMCU 1.0 ESP-12
TX RF433 (SYN480r) NodeMCU 1.0 ESP-12 LOL1n:
#define RADIO_DATA 0
#define RADIO_BUF_SIZE 5
#define G433_SPEED 1000

#include <Gyver433.h>
#include <GyverDS18.h>

Gyver433_RX <RADIO_DATA, G433_XOR> rx;
GyverDS18 ds(0);

void setup() {
  Serial.begin(9600);
  ds.setResolution(9);
}

void loop() {
  if (rx.tickWait()) {
      switch (rx.buffer[0]) {
      case 0xA1:           
      
      Serial.print("DS18B20: ");
      Serial.print(ds.getTemp(rx.buffer[1] << 8 | rx.buffer[2]));
      Serial.println(" *C");
      break;
    }
  }
}
Одно устройство должно периодически отправлять текущую температуру, а второе её получать и писать в порт сериал

Заранее благодарен за ответы.
 

viktor1703

★★★✩✩✩✩
9 Дек 2021
789
198
что я делаю не так?
Одно устройство должно периодически отправлять текущую температуру, а второе её получать
А зачем же вы тогда в коде приемника температуру читаете не с приёмника, а с датчика?
Далее
не могу даже скомпилировать, ругается Compilation error: no matching function for call to 'GyverDS18::getTemp(int)'
Всё правильно, так и должно быть. Потому что при попытке чтения температуры из датчика (непонятно зачем вы это делаете в коде приемника), вы пытаетесь передать в эту функцию некие значения, а в этой функции такое не предусмотрено.

ds.getTemp(rx.buffer[1] << 8 | rx.buffer[2])
Ещё.
Разве этой функцией вы получаете данные? Эта функция возвращает количество успешно принятых байт. Не изобретайте велосипед, в библиотеке есть примеры, возьмите их за основу.