For my weatherstation project I want to send data from an arduino nano connected to a BMP280 and a 433MHz tx to a arduino uno with 433 rx and a display and show the data on this display. The problem that occurs, however, is that I am able to read sensor data only as I exclude all lines relative to sending data over 433 with the virtualwire library. Does anyone know where this problem comes from? I read about changing the send/receive pin which I did by vw_set_tx_pin(7) instead of pin 12. Did not work. When I run the code the serial monitor shows that it cannot find my BMP sensor although I have been able to use it before without virtualwire included. It seems that somehow its address is being captured.
The same thing actually happens for the arduino display. Somehow the display will not work anymore when using virtualwire.
I hope someone can help me out. Thanks in advance. I added my code so you can look at it. As you can see in the transmitter code i only want to send temperature and pressure.
Receiver code (it also has a dht22 but that's irrelevant):
// Weather Station
// Arduino Uno
// OLED display and DHT22 sensor
#include <DHT.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <VirtualWire.h>
#include <SPI.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
float t,h;
char temperatureChar[10];
char pressureChar[10];
struct package
{
float temperature = 0.0;
float pressure = 0.0;
};
typedef struct package Package;
Package data;
// SETUP
void setup() {
Serial.begin(115200);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
vw_set_rx_pin(7);
vw_setup(500);
vw_rx_start();
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 30);
display.println("Weather Station v1.0");
display.setCursor(0, 40);
display.println("J.R. de Haan");
display.setCursor(0, 50);
display.println("Copyright 2020");
display.setCursor(0, 10);
display.println("Initializing.");
display.display();
delay(1000);
display.setCursor(0, 10);
display.println("Initializing..");
display.display();
delay(1000);
display.setCursor(0, 10);
display.println("Initializing...");
display.display();
delay(1000);
dht.begin();
}
void loop() {
t = dht.readTemperature();
h = dht.readHumidity();
if (isnan(t) || isnan(h)) {
Serial.print("DHT values not read!");
return;
}
// DISPLAY DATA
display.clearDisplay();
// TEMPERATURE
display.setTextSize(1);
display.setCursor(0, 10);
display.println("Temperature indoor: ");
display.setTextSize(2);
display.setCursor(0, 20);
display.println(t);
display.setCursor(100, 20);
display.println((char)247);
display.setCursor(115, 20);
display.println("C");
// HUMIDITY
display.setTextSize(1);
display.setCursor(0, 40);
display.println("Humidity indoor: ");
display.setTextSize(2);
display.setCursor(0, 50);
display.println(h);
display.setCursor(115, 50);
display.println("%");
display.display();
delay(1000);
// OUTDOOR 433 MHz
uint8_t buf[sizeof(data)];
uint8_t buflen = sizeof(data);
if (vw_have_message()) // Is there a packet for us?
{
vw_get_message(buf, &buflen);
memcpy(&data,&buf,buflen);
Serial.print("\nPackage:");
Serial.print(data.temperature);
String temperatureString = String(data.temperature,1);
temperatureString.toCharArray(temperatureChar,10);
String pressureString = String(data.pressure,1);
pressureString.toCharArray(pressureChar,10);
Serial.print("\n");
Serial.println(data.pressure);
}
delay(10000);
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 10);
display.println("Temperature outdoor: ");
display.setTextSize(2);
display.setCursor(0, 20);
display.println(data.temperature);
display.setCursor(100, 20);
display.println((char)247);
display.setCursor(115, 20);
display.println("C");
display.setTextSize(1);
display.setCursor(0, 40);
display.println("Pressure outdoor: ");
display.setTextSize(2);
display.setCursor(0, 50);
display.println(data.pressure);
display.setCursor(115, 50);
display.println("hPa");
display.display();
delay(10000);
}
Transmitter code:
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <VirtualWire.h>
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BMP280 bme;
struct package
{
float temperature ;
float pressure ;
};
typedef struct package Package;
Package data;
void setup() {
Serial.begin(115200);
if (!bme.begin(0x76)) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
vw_set_tx_pin(12);
vw_set_ptt_inverted(true);
vw_setup(500);
}
void loop() {
Serial.print("Temperature = ");
data.temperature = bme.readTemperature() - 2;
float temp = bme.readTemperature() - 2;
Serial.print(temp);
Serial.println("*C");
Serial.print("Pressure = ");
data.pressure = bme.readPressure() / 100.0F;
Serial.print(bme.readPressure() / 100.0F);
Serial.println("hPa");
Serial.print("Approx. Altitude = ");
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println("m");
Serial.println();
delay(1000);
vw_send((uint8_t *)&data, sizeof(data));
vw_wait_tx();
delay(2000);
}