Displej + nRF24L01

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
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.
Odpovědět
Auja
Příspěvky: 4
Registrován: 07 úno 2021, 11:27
Reputation: 0

Displej + nRF24L01

Příspěvek od Auja » 07 úno 2021, 11:45

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ěď.

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Displej + nRF24L01

Příspěvek od ondraN » 08 úno 2021, 13:42

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.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Displej + nRF24L01

Příspěvek od pavel1tu » 08 úno 2021, 14:31

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 ;)
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Auja
Příspěvky: 4
Registrován: 07 úno 2021, 11:27
Reputation: 0

Re: Displej + nRF24L01

Příspěvek od Auja » 09 úno 2021, 21:45

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.

RomanB
Příspěvky: 90
Registrován: 04 zář 2017, 14:28
Reputation: 0
Bydliště: Havířov

Re: Displej + nRF24L01

Příspěvek od RomanB » 10 úno 2021, 08:13

RF modul připoj na HW SPI piny a displej na jiné, které si definuješ v nastavení displeje.

Auja
Příspěvky: 4
Registrován: 07 úno 2021, 11:27
Reputation: 0

Re: Displej + nRF24L01

Příspěvek od Auja » 26 úno 2021, 11:54

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č:

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;
}
Přijímač:

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);
}

Obrázek

Auja
Příspěvky: 4
Registrován: 07 úno 2021, 11:27
Reputation: 0

Re: Displej + nRF24L01

Příspěvek od Auja » 26 úno 2021, 18:18

Přikládám ještě obrázek displeje:
displej.png
displej.png (171.02 KiB) Zobrazeno 2548 x
První pokus s přidáním obrázku se mi nezdařil, spěchal jsem k zubaři.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 11 hostů