Posílání více "položek" komunikací pomocí STRUCT
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: Posílání více "položek" komunikací pomocí STRUCT
Nemám to jak vyzkoušet, ale tak jak máš nadefinovaný STRUCT v odesílací části, nadefinuješ v přijímací.
Tak jak jsi odeslal
rf95.send((uint8_t *)&packet, sizeof(radiopacket));
// nechce se mi prolézat příklady, nemá to být rf95.send(packet, sizeof(radiopacket));
pokud je to správně a něco to odešle,
tak stejně přijmeš
rf95.recv(packet, sizeof(radiopacket))
pak by se to mělo dát rozrřídit
Serial.println(packet.stav);
Serial.println(packet.kod);
Tak jak jsi odeslal
rf95.send((uint8_t *)&packet, sizeof(radiopacket));
// nechce se mi prolézat příklady, nemá to být rf95.send(packet, sizeof(radiopacket));
pokud je to správně a něco to odešle,
tak stejně přijmeš
rf95.recv(packet, sizeof(radiopacket))
pak by se to mělo dát rozrřídit
Serial.println(packet.stav);
Serial.println(packet.kod);
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: Posílání více "položek" komunikací pomocí STRUCT
Tohle jsem zkoušel a skončím s chybovou hláškou
Funkce recv funguje takhle https://www.airspayce.com/mikem/arduino ... a5fca0579a
Obsah zkopíruje asi jako byty do paměti (v tomhle se nevyznám) a asi by tedy stačilo to nějak překopírovat do radiopacket?
Kód: Vybrat vše
note: candidates are: virtual bool RH_RF95::recv(uint8_t*, uint8_t*)
Obsah zkopíruje asi jako byty do paměti (v tomhle se nevyznám) a asi by tedy stačilo to nějak překopírovat do radiopacket?
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: Posílání více "položek" komunikací pomocí STRUCT
Celý tvuj kod nevím,
jednou jsem dle netu testoval RF95 na stole, pak z toho kamarád udělal meteostanici, používáme tam pro zjednodušení RHDatagram manager. Našel jsem to kdysi dávno jako příklad na netu, pak už nepoužil.
Kod není celý, vymazal jsem display, vyčítání čidel atd.
Není tam inicializace a nastavení RF95 a nevím jak staré ty knihovny byly
Je tam jak vysílání tak příjem
třeba to pomůže a asi tam jsou překlepy, jsem na dovolené a rovnám to tu na tabletu
jednou jsem dle netu testoval RF95 na stole, pak z toho kamarád udělal meteostanici, používáme tam pro zjednodušení RHDatagram manager. Našel jsem to kdysi dávno jako příklad na netu, pak už nepoužil.
Kod není celý, vymazal jsem display, vyčítání čidel atd.
Není tam inicializace a nastavení RF95 a nevím jak staré ty knihovny byly
Je tam jak vysílání tak příjem
třeba to pomůže a asi tam jsou překlepy, jsem na dovolené a rovnám to tu na tabletu
Kód: Vybrat vše
#include <RHReliableDatagram.h>
#include <RH_RF95.h>
#define MY_ADDRESS 3
#define SERVER_ADDRESS 2
//Nastaveni RF95 a další
WEATHERDATA data;
unsigned long startMilli,stopMilli;
const float FREQ = 915.0;
RH_RF95 rf95;
RHDatagram manager(rf95, MY_ADDRESS);
typedef struct WEATHERDATA { //data jak odesílaná, tak přijímaná
float temp;
float hum;
float windSpeed;
char windDir[2];
};
//uložení dat do struktury
data.temp = xxxxxx;
data.hum = xxxxxx;
data.windSpeed = xxxxx;
strcpy(data.windDir, "E"); //příklad odesílání znaku
//odesílání dat všetně výpisu jak dlouho to trvalo
startMilli = millis();
if (!manager.sendto((uint8_t *) &data, sizeof(data), SERVER_ADDRESS))
Serial.print("Transmit failed");
rf95.waitPacketSent(100); // wait 100 mSec max for packet to be sent
stopMilli = millis();
Serial.print("Transmission time (mSec) = ");
Serial.println(stopMilli-startMilli);
Serial.println();
//prijem dat
startMilli = millis();
if (rf95.waitAvailableTimeout(100)) // wait 100 mSec max for response
{
uint8_t bufLen = sizeof(data);
if (manager.recvfrom((uint8_t *) &data, &bufLen))
{
stopMilli = millis();
Serial.print("Response time (mSec) = ");
Serial.println(stopMilli-startMilli);
}
else
Serial.println("Timed out waiting for response");
Serial.println();
}
//přijaté proměnné
Serial.println(String(data.temp,1));
Serial.println(String(data.hum,1));
Serial.println(String(data.windSpeed,0));
Serial.println(String(data.windDir));
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: Posílání více "položek" komunikací pomocí STRUCT
Díky za rady, ale nějak mi to nefunguje, budu na tom pracovat a když to dám dohromady, tak se pochlubím.
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: Posílání více "položek" komunikací pomocí STRUCT
No, nemám doma (dnes jsem dorazil) žádný modul z rodiny RFM, abych to s tou knihovnou RH_RF95.h otestoval.
Pohledám na netu ten příklad na meteostanici, odkud to kamarád kdysi použil.
Pak nahodím.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: Posílání více "položek" komunikací pomocí STRUCT
Problém vyřešen!
Použil jsem jinou knihovnu, konkrétně https://github.com/sandeepmistry/arduino-LoRa která posílá data jinak než ta původní RadioHead.
Vysílač:
Přijímač:
Díky za nakopnutí
Použil jsem jinou knihovnu, konkrétně https://github.com/sandeepmistry/arduino-LoRa která posílá data jinak než ta původní RadioHead.
Vysílač:
Kód: Vybrat vše
LoRa.beginPacket();
LoRa.write((uint8_t*)&packet, sizeof(radiopacket));
LoRa.endPacket();
Kód: Vybrat vše
int packetSize = LoRa.parsePacket();
if (packetSize) {
LoRa.readBytes((uint8_t *)&packet, packetSize);
//zpracování dat
}
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 15 hostů