• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
SPI sterowanie pinem SS
#21
Połączenie wygląda następująco. Faktycznie, źle zdefiniowałem pin rst. Wybrałem inny wolny pin lecz to nic nie wniosło do rozwiązania problemu.  Dodgy W załączniku dodany jest jeszcze schemat połączeń w wyższej rozdzielczości. Jak w setupie mam dodane to LoRa działa poprawnie.
Kod:
LoRa.setPins(ss,rst); 
LoRa.begin(433E6);
Gdy przeniosę ten fragment kodu do LoRa i usunę z setupa to lora przestaję odbierać dane. Jak zostawię tylko LoRa.begin(433E6); to na serial monitorze dostaję same "krzaki" (⸮⸮L⸮⸮⸮⸮⸮⸮?⸮FJ⸮⸮D⸮⸮⸮⸮)⸮!⸮⸮⸮H⸮⸮t⸮⸮d⸮@⸮9⸮). 


[Obrazek: Wemos-d1-mini.png]


Załączone pliki Miniatury
   
 
Odpowiedź
#22
Zobacz ten kod z i odłączony lcd

Kod:
#include <SPI.h>
#include <LoRa.h>
#include <U8g2lib.h>


String temperatura;
String cisnienie;
String wilgotnosc;
String bateria;

bool flaga = false;

#define ss_lcd 2 //LCD
#define sclk 14 // LCD
#define mosi 13 // LCD

#define ss 15  // LoRa
#define rst 12 //LoRa

U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R2, sclk, mosi ,ss_lcd, U8X8_PIN_NONE);

void LCD (){
// program wykonawczy dla lcd

flaga = false;

u8g2.begin ();
u8g2.clearBuffer();
u8g2.setFont (u8g2_font_ncenB10_tr);
u8g2.setCursor(2,16);
u8g2.print("EKRAN W LOOP");
u8g2.sendBuffer ();
}

void Lora(){
//program wykonawczy dla komunikacji
int pos1, pos2, pos3;

  if (!LoRa.begin(433E6))
[color=#363636][size=small]  {[/size][/color]
[color=#363636][size=small]   Serial.println("Starting LoRa failed!");[/size][/color]
[color=#363636][size=small]   delay(100);[/size][/color]
[color=#363636][size=small]    while (1);[/size][/color]
[color=#363636][size=small]  }[/size][/color]
   Serial.println("LoRa Started");

int packetSize = LoRa.parsePacket();

if (packetSize)
{

flaga =true;

String LoRaData = LoRa.readString();
while (LoRa.available())
{
((char)LoRa.read());
}
pos1 = LoRaData.indexOf('/');
pos2 = LoRaData.indexOf('&');
pos3 = LoRaData.indexOf('!');

temperatura = LoRaData.substring(0,pos1);
cisnienie = LoRaData.substring(pos1 + 1, pos2);
wilgotnosc = LoRaData.substring(pos2 +1, pos3);
bateria = LoRaData.substring(pos3 +1, LoRaData.length());


Serial.println(temperatura);
Serial.println(cisnienie);
Serial.println(wilgotnosc);
Serial.println(bateria);


Serial.println(flaga);
}
}

void setup(){
  Serial.begin(9600);
LoRa.setPins(ss,rst);
  }

void loop(){


  Lora();

}
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#23
Kod:
#include <SPI.h>
#include <LoRa.h>
#include <U8g2lib.h>


String temperatura;
String cisnienie;
String wilgotnosc;
String bateria;

bool flaga = false;

#define ss_lcd 2 //LCD
#define sclk 14 // LCD
#define mosi 13 // LCD

#define ss 15  // LoRa
#define rst 0 //LoRa

U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R2, sclk, mosi ,ss_lcd, U8X8_PIN_NONE);

void LCD (){
// program wykonawczy dla lcd

flaga = false;

u8g2.begin ();
u8g2.clearBuffer();
u8g2.setFont (u8g2_font_ncenB10_tr);
u8g2.setCursor(2,16);
u8g2.print("EKRAN W LOOP");
u8g2.sendBuffer ();
}

void Lora(){
//program wykonawczy dla komunikacji
int pos1, pos2, pos3;

  if (!LoRa.begin(433E6))
Serial.println("Starting LoRa failed!");
delay(100);
while (1);
  Serial.println("LoRa Started");

int packetSize = LoRa.parsePacket();

if (packetSize)
{

flaga =true;

String LoRaData = LoRa.readString();
while (LoRa.available())
{
((char)LoRa.read());
}
pos1 = LoRaData.indexOf('/');
pos2 = LoRaData.indexOf('&');
pos3 = LoRaData.indexOf('!');

temperatura = LoRaData.substring(0,pos1);
cisnienie = LoRaData.substring(pos1 + 1, pos2);
wilgotnosc = LoRaData.substring(pos2 +1, pos3);
bateria = LoRaData.substring(pos3 +1, LoRaData.length());


Serial.println(temperatura);
Serial.println(cisnienie);
Serial.println(wilgotnosc);
Serial.println(bateria);


Serial.println(flaga);
}
}

void setup(){
Serial.begin(9600);
LoRa.setPins(ss,rst);
  }

void loop(){
Wkleiłem to i na serial monitorze mam krzaki co 3 sekundy. Wygląda na to, że Wemos się resetuje. W załączniku screen.


Załączone pliki Miniatury
   
 
Odpowiedź
#24
Jeszcze raz spróbuj bo mi się zle wkleiło z krzaczkami

wstaw tam to

if (!LoRa.begin(433E6))
{
Serial.println("Starting LoRa failed!");
delay(100);
while (1);
}
Serial.println("LoRa Started");
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#25
Kod:
#include <SPI.h>
#include <LoRa.h>
#include <U8g2lib.h>


String temperatura;
String cisnienie;
String wilgotnosc;
String bateria;

bool flaga = false;

#define ss_lcd 2 //LCD
#define sclk 14 // LCD
#define mosi 13 // LCD

#define ss 15  // LoRa
#define rst 0 //LoRa

U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R2, sclk, mosi ,ss_lcd, U8X8_PIN_NONE);

void LCD (){
// program wykonawczy dla lcd

flaga = false;

u8g2.begin ();
u8g2.clearBuffer();
u8g2.setFont (u8g2_font_ncenB10_tr);
u8g2.setCursor(2,16);
u8g2.print("EKRAN W LOOP");
u8g2.sendBuffer ();
}

void Lora(){
//program wykonawczy dla komunikacji
int pos1, pos2, pos3;

  if (!LoRa.begin(433E6))
{
Serial.println("Starting LoRa failed!");
delay(100);
while (1);
}
Serial.println("LoRa Started");

int packetSize = LoRa.parsePacket();

if (packetSize)
{

flaga =true;

String LoRaData = LoRa.readString();
while (LoRa.available())
{
((char)LoRa.read());
}
pos1 = LoRaData.indexOf('/');
pos2 = LoRaData.indexOf('&');
pos3 = LoRaData.indexOf('!');

temperatura = LoRaData.substring(0,pos1);
cisnienie = LoRaData.substring(pos1 + 1, pos2);
wilgotnosc = LoRaData.substring(pos2 +1, pos3);
bateria = LoRaData.substring(pos3 +1, LoRaData.length());


Serial.println(temperatura);
Serial.println(cisnienie);
Serial.println(wilgotnosc);
Serial.println(bateria);


Serial.println(flaga);
}
}

void setup(){
Serial.begin(9600);
LoRa.setPins(ss,rst);
  }

void loop(){


  Lora();

}
Otrzymuję na serial monitorze komunikat "LoRa started" jednak danych nie odbiera.
 
Odpowiedź
#26
odłączony miałeś LCD?
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#27
Tak, LCD jest odłączony od płytki Wemos. Już powoli brakuje mi pomysłów co można z tym zrobić aby to działało poprawnie.

Wysłane z mojego ONEPLUS A3003 przy użyciu Tapatalka
 
Odpowiedź
#28
A Pokaż kod nadajnika
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#29
Kod:
#include <Adafruit_BME280.h> //obsluga BME280
Adafruit_BME280 bme; //obsluga BME280

#include <SPI.h> //obsluga magistrali SPI
#include <LoRa.h> //obsługa nadajnika LoRa

#include <LowPower.h> // biblioteka do oszczedzania enargii

String LoRaMessage = ""; //zmienna przechowujaca wiadomosc nadawcza nadajnika LoRa

void setup() {
  Serial.begin(9600);
  bme.begin(0x76); // uruchomienie czujnika BME
  bme.setSampling(Adafruit_BME280::MODE_FORCED, //uruchomienie samplowania z wieksza dokladnoscia
  Adafruit_BME280::SAMPLING_X1,//temperature
  Adafruit_BME280::SAMPLING_X1,//pressure
  Adafruit_BME280::SAMPLING_X1,//humidity
  Adafruit_BME280::FILTER_OFF);
  LoRa.begin(433E6); //ustawienie czestotliwosci nadawania 433Mhz
  analogReference(INTERNAL); // wewnetrzne napiecie odniesinia 1.1V do pomiaru napiecia ogniwa zasilajacego
 
}

void loop() {
  LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
  delay(2000);
  int adc_val = analogRead(A0);  //odczyt stanu z pinu A0, poziom bateri
  float Ubat = adc_val * 0.008218126; //wartosc odczytana * wspolczynnik wynikajacy z dzielnika rezystorowego
  bme.takeForcedMeasurement(); // pobieranie wartosci skalibrowanych z czujnika BME, poczatek pomiaru
  float temperatura;
  temperatura=bme.readTemperature();
  float cisnienie;
  cisnienie=(bme.readPressure() / 100.0F);
  float wilgotnosc;
  wilgotnosc=bme.readHumidity();  //koniec pomiaru
  LoRaMessage = String(temperatura,1) + "/" + String(cisnienie,1) + "&" + String(wilgotnosc,0)+ "!" + String(Ubat,1);  //przygotowanie danych do wyslania, formatowanie ramki danych
  Serial.println(temperatura);
  Serial.println(cisnienie);
  Serial.println(wilgotnosc);
  Serial.println(Ubat,1);
  LoRa.beginPacket(); //uruchomienie pakieru danych LoRa
  LoRa.print(LoRaMessage); // wyslanie ramki danych po przez LoRa
  LoRa.endPacket(); //koniec pakietu danych LoRa

Kod nadajnika.
 
Odpowiedź
#30
Podejrzewam gdzie jest problem, nadajnik wysyła dane co 10s a odbiór daliśmy natychmiastowy niestety LoRa.begin(433E6) czyści bufor wiec if (packetSize) nigdy nie zadziała. Powstała pentla która nigdy się nie wykona... Dlatego miałeś na monitorze tylko LoRa Started powtarzające i nic więcej...

Zobacz ten kod z podłączonym LCD poprawiony daj czas dane odbiornika aktualizowane są co 20s około jak zadziała to trzeba pomyśleć inaczej...

[code]#include <SPI.h>
#include <LoRa.h>
#include <U8g2lib.h>


String temperatura;
String cisnienie;
String wilgotnosc;
String bateria;

bool flaga = false;

#define ss_lcd 2 //LCD
#define sclk 14 // LCD
#define mosi 13 // LCD

#define ss 15  // LoRa
#define rst 0 //LoRa

U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R2, sclk, mosi ,ss_lcd, U8X8_PIN_NONE);

void LCD (){
// program wykonawczy dla lcd

flaga = false;

u8g2.begin ();
u8g2.clearBuffer();
u8g2.setFont (u8g2_font_ncenB10_tr);
u8g2.setCursor(2,16);
u8g2.print("EKRAN W LOOP");
u8g2.sendBuffer ();
}

void Lora(){
//program wykonawczy dla komunikacji
int pos1, pos2, pos3;

  if (!LoRa.begin(433E6))
{
Serial.println("Starting LoRa failed!");
delay(100);
while (1);
}
Serial.println("LoRa Started");

delay(20000);

int packetSize = LoRa.parsePacket();

if (packetSize)
{

flaga =true;

String LoRaData = LoRa.readString();
while (LoRa.available())
{
((char)LoRa.read());
}
pos1 = LoRaData.indexOf('/');
pos2 = LoRaData.indexOf('&');
pos3 = LoRaData.indexOf('!');

temperatura = LoRaData.substring(0,pos1);
cisnienie = LoRaData.substring(pos1 + 1, pos2);
wilgotnosc = LoRaData.substring(pos2 +1, pos3);
bateria = LoRaData.substring(pos3 +1, LoRaData.length());


Serial.println(temperatura);
Serial.println(cisnienie);
Serial.println(wilgotnosc);
Serial.println(bateria);


Serial.println(flaga);
}
}

void setup(){
Serial.begin(9600);
LoRa.setPins(ss,rst);
  }

void loop(){

if (flaga) {
  LCD();
  }else {
  Lora();
}
}
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości