Displej + nRF24L01
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Displej + nRF24L01
Ahoj všem, mám takový dotaz. Potřeboval bych připojit k desce mini Pro 2,8"displej SPI s řadičem ILI9341 a bezdrátový modul nRF24L01. Jde to vůbec? Děkuji za odpověď.
Re: Displej + nRF24L01
Tak, SPI port to zvládne v pohodě, ale je otázka, jak jsou napsané knihovny a jestli dovolí sdílení SPI. Po zkušenostech s nimi, bych si spíše tipoval, že to nepůjde, ale vlastní zkušenost s takovouto kombinací nemám.
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: Displej + nRF24L01
Na SPI můžeš připojit teoreticky kolik chceš zařízení.
Co jsem vyčetl (ale i to využívám), musí se splnit
- jen jeden Master na komunikaci (tedy zatím jsem nezkoušel 2xMASTER)
- u všech SLAVE zařízení vstup SS (Slave Select) - kterým se navolí s kým zrovna komunikuješ
- knihovny napsané tak, aby toto vše výše bylo možné - displeje na SPI jsem měl jen 2 a ani jedna knihovna toto nespňovala.
Ale normálně z ATMega obsluhuji 2 i 3 "komunikační" moduly na SPI a funguje mi to
Co jsem vyčetl (ale i to využívám), musí se splnit
- jen jeden Master na komunikaci (tedy zatím jsem nezkoušel 2xMASTER)
- u všech SLAVE zařízení vstup SS (Slave Select) - kterým se navolí s kým zrovna komunikuješ
- knihovny napsané tak, aby toto vše výše bylo možné - displeje na SPI jsem měl jen 2 a ani jedna knihovna toto nespňovala.
Ale normálně z ATMega obsluhuji 2 i 3 "komunikační" moduly na SPI a funguje mi to
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: Displej + nRF24L01
Děkuji za odpovědi. Jsem úplný začátečník, tak v tom docela plavu. Našel jsem toto: https://www.14core.com/nrf24l01-i2ctwi- ... p-guide/ . Už mám objednané, jak modul dorazí, vyzkouším a dám vědět.
Re: Displej + nRF24L01
RF modul připoj na HW SPI piny a displej na jiné, které si definuješ v nastavení displeje.
Re: Displej + nRF24L01
Zdravím všechny bastlíře a programátory. Komunikační modul I2C / TWI pro NRF24L01 mi dorazil. Hned jsem jej zapojil abych vyzkoušel funkčnost a zda mi bude vyhovovat k mému projektu. Po nahrání ukázkového kódu jak do vysílače, tak do přijímače se mi na seriálu krásně zobrazovalo jak moduly krásně komunikují. Byl jsem nadšený, ale jen do doby kdy jsem v kódu cokoliv změnil. Nedokázal jsem odeslat ani "Hello World". Po několika hodinovém brouzdání po internetu docházím k závěru, že komunikační modul na prd. Je k němu velmi málo informací, více méně žádné. Tak snad časem...
Vrátit jsem se tedy ke klasickému zapojení s použitím arduina Una, nRF24L01 a 1,3" displej ST7789 240 x 240 jako přijímač. Vysílač Uno, NRF24L01 a nějaký senzor, použil jsem BME280.
Displej je zapojen, jak mi poradil RomanB. Chvíli trvalo najít správnou knihovnu pro komunikaci s displejem (Arduino_ST7789.h), ne každá při takovém zapojení funguje. Uvedu příklad použití jiné knihovny: Už sice nevím které, ale na displeji se zobrazila hodnota teplota, tlak apod. Jenže při dalším příjmu se hodnoty nepřepsaly, ale jako by se vrstvily jedna na druhou. Nevím, jak to správně popsat, zkrátka za nějakou dobu se displeji zobrazovaly místo čísel úplné nesmysly.
Teď vše funguje podle mých představ, jen mám jedinou výtku – Písmo (font). Projekt je v podstatě obyčejný teploměr, který bude umístěný ve zdi v elektroinstalační krabici. Na displeji chci mít teplotu zobrazenou velkými čísli – Jdu kolem a mrknu a vím jaká je teplota. Nemusím nikde mžourat na malá čísla. Problém je v tom, při zvětšení základního fontu glcdfont knihovny Adafruit GFX nejsou číslice pěkná. Jsou zubatá, desetinná tečka působí docela rušivě a okolní čísla dost odděluje. V projektu používám setTextSize(10). Existují krásné fonty např. od velice šikovného Poláka: cbm80amiga · GitHub . Bohužel se mi ni nepodařilo zprovoznit. Lámu si s tím hlavu už přes týden, ale vše je marné. Nemá někdo z vás nějaký nápad? Budu rád za jakoukoliv radu. Děkuji.
PS: Přikládám kód, možná se bude někomu hodit.
V přijímači je pro zjednodušení nastavení pro teplotu a napětí.
Vysílač:
Přijímač:
Vrátit jsem se tedy ke klasickému zapojení s použitím arduina Una, nRF24L01 a 1,3" displej ST7789 240 x 240 jako přijímač. Vysílač Uno, NRF24L01 a nějaký senzor, použil jsem BME280.
Displej je zapojen, jak mi poradil RomanB. Chvíli trvalo najít správnou knihovnu pro komunikaci s displejem (Arduino_ST7789.h), ne každá při takovém zapojení funguje. Uvedu příklad použití jiné knihovny: Už sice nevím které, ale na displeji se zobrazila hodnota teplota, tlak apod. Jenže při dalším příjmu se hodnoty nepřepsaly, ale jako by se vrstvily jedna na druhou. Nevím, jak to správně popsat, zkrátka za nějakou dobu se displeji zobrazovaly místo čísel úplné nesmysly.
Teď vše funguje podle mých představ, jen mám jedinou výtku – Písmo (font). Projekt je v podstatě obyčejný teploměr, který bude umístěný ve zdi v elektroinstalační krabici. Na displeji chci mít teplotu zobrazenou velkými čísli – Jdu kolem a mrknu a vím jaká je teplota. Nemusím nikde mžourat na malá čísla. Problém je v tom, při zvětšení základního fontu glcdfont knihovny Adafruit GFX nejsou číslice pěkná. Jsou zubatá, desetinná tečka působí docela rušivě a okolní čísla dost odděluje. V projektu používám setTextSize(10). Existují krásné fonty např. od velice šikovného Poláka: cbm80amiga · GitHub . Bohužel se mi ni nepodařilo zprovoznit. Lámu si s tím hlavu už přes týden, ale vše je marné. Nemá někdo z vás nějaký nápad? Budu rád za jakoukoliv radu. Děkuji.
PS: Přikládám kód, možná se bude někomu hodit.
V přijímači je pro zjednodušení nastavení pro teplotu a napětí.
Vysílač:
Kód: Vybrat vše
/*
Arduino UNO
nRF24L01
.............
:1 3 5 7 :
:o o o o :
:o o o o :
:2 3 6 8 :
: :
: :
: :
: :
:...........:
1 - GND - GND
2 - VCC - 3V3
3 - CE - 9
4 - CSN - 10
5 - SCK - 13
6 - MOSI - 11
7 - MISO - 12
8 - IRQ - NC
*/
#include <SPI.h>
#include <Wire.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define POT 0 // Pin A0 UNO
Adafruit_BME280 bme; // I2C
struct package
{
float temperature ;
float pressure;
float humidity ;
float pressureicao;
float voltage;
};
typedef struct package Package;
Package data;
RF24 radio(9, 10); // CE, CSN
const byte address[6] = "00001";
void setup(void)
{
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(address);
//radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_MAX);
radio.stopListening();
bme.begin(0x76);
}
void loop()
{
readSensor();
radio.write(&data, sizeof(data));
Serial.println("----Test spojení----");
Serial.print("Temperature = ");
Serial.print(bme.readTemperature());
Serial.println(" ºC");
Serial.print("Pressure = ");
Serial.print(bme.readPressure() / 100); // 100 Pa = 1 millibar
Serial.println(" mb");
Serial.print("Humidity = ");
Serial.print(bme.readHumidity());
Serial.println(" %");
Serial.print("Approx altitude = ");
Serial.print(bme.readAltitude(1013.25));
Serial.println(" m");
Serial.print("Voltage = ");
Serial.print(data.voltage);
Serial.println(" V");
Serial.print("--------------------------------\n\n");
delay(3000);
}
void readSensor()
{
data.humidity = bme.readHumidity();
data.temperature = bme.readTemperature();
data.pressure = bme.readPressure() / 100.0;
data.pressureicao = (((bme.readPressure() / 100.0)-8) / pow(1 - ((0.0065 * 241) / (data.temperature + (0.0065 * 241) + 273.15)), 5.257));
// korekce chyby: -8 hPa
data.voltage = analogRead(POT);
data.voltage = data.voltage * 5 / 1024;
}
Kód: Vybrat vše
/*
Arduino UNO
nRF24L01
.............
:1 3 5 7 :
:o o o o :
:o o o o :
:2 3 6 8 :
: :
: :
: :
: :
:...........:
1 - GND - GND
2 - VCC - 3V3
3 - CE - 9
4 - CSN - 10
5 - SCK - 13
6 - MOSI - 11
7 - MISO - 12
8 - IRQ - NC
ST7789 240x240 IPS
o 01 GND -> GND
o 02 VCC -> VCC (jen 3.3V !)
o 03 SCL -> 3/SCK
o 04 SDA -> 4/MOSI
o 05 RES -> 5
o 06 DC -> 6
o 07 BLK -> NC
*/
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Arduino_ST7789.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#define TFT_DC 6
#define TFT_MOSI 4
#define TFT_SCLK 3
#define TFT_RST 5
#define SCR_WD 240
#define SCR_HT 240
Arduino_ST7789 tft = Arduino_ST7789(TFT_DC, TFT_RST, TFT_MOSI, TFT_SCLK);
struct package
{
float temperature;
float humidity;
float pressure;
float pressureicao;
float voltage;
};
typedef struct package Package;
Package data;
RF24 radio(9, 10); // CE, CSN
const byte address[6] = "00001";
void setup()
{
Serial.begin(9600);
radio.begin();
radio.setPALevel(RF24_PA_MAX);
//radio.setDataRate( RF24_250KBPS ) ;
radio.openReadingPipe(0, address);
radio.startListening();
tft.init(SCR_WD, SCR_HT);
tft.fillScreen(BLUE);
tft.setTextColor(WHITE, BLUE);
tft.setTextSize(3);
tft.setCursor(22, 5);
tft.print("TEMPERATURE");
tft.setTextSize(2);
tft.setCursor(35, 220);
tft.print("Voltage:");
}
void loop()
{
if (radio.available())
{
radio.read(&data, sizeof(data));
float temperature = data.temperature;
float voltage = data.voltage;
tft.setTextSize(10);
tft.setCursor(0, 85);
tft.print(temperature, 1);
tft.setTextSize(2);
tft.setCursor(135, 220);
tft.print(voltage);
tft.println(" V");
}
Serial.println("----Test spojení----");
Serial.print("Temperature = ");
Serial.print(data.temperature);
Serial.println(" °C");
Serial.print("Voltage = ");
Serial.print(data.voltage);
Serial.println(" V");
Serial.print("--------------------------------\n\n");
delay(1000);
}
Re: Displej + nRF24L01
Přikládám ještě obrázek displeje:
První pokus s přidáním obrázku se mi nezdařil, spěchal jsem k zubaři.
První pokus s přidáním obrázku se mi nezdařil, spěchal jsem k zubaři.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 45 hostů