• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to secondary sidebar
  • Skip to footer

У Павла!

  • Контроллеры
    • Arduino
      • Приборы
      • Музыка
      • Проекты Arduino
      • Уроки Arduino
      • Игры на Arduino
      • Роботы на Ардуино
      • FLProg
    • Одноплатные ПК
      • Orange pi
      • Raspberry pi
        • Raspberry pi pico
        • Raspberry pi server
        • Проекты Raspberry pi
    • ESP
      • ESP8266
        • NodeMCU
      • ESP32
      • M5stack
    • Другие контроллеры
      • STM32
  • Умный дом
    • Home Assistant
      • Автоматизации
    • Tuya
    • Bluetooth
    • ESPHome
    • Frigate
    • Telegram
    • Яндекс
  • ЧПУ
  • 3d печать
  • Об авторе

Домашняя метеостанция на датчиках 433МГц

9 июня, 2017

Для данного проекта нам понадобится:

Приемник и передатчик на 433МГц в количестве 2 шт. http://ali.pub/1joehv

Arduino uno http://ali.pub/1joeoa

Arduino Mega http://ali.pub/1joeqf

Arduino nano http://ali.pub/1joes6

BME 280  http://ali.pub/1joewn

BMP180 http://ali.pub/1joey7

DS18b20 http://ali.pub/1jof0j

LCD nokia 5110  http://ali.pub/1jof7c

Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.

 

Давайте для начала рассмотрим схему подключения приемника

Из данной схемы видно какой пин датчиков к какому пину ардуино подключен.

В FLProg данная схема выглядит вот таким образом:

Ниже в видео в конце этой статьи я подробно рассказываю, какой блок для чего служит в данной схеме.

Скетч приемника:

 

#include <Adafruit_Sensor.h>

#include <VirtualWire.h>

#include <Adafruit_BME280.h>

#include <SPI.h>

#include <EasyTransferVirtualWire.h>

#include <LCD5110_Graph.h>

int out1;
int out2;
int out3;
int out4;
EasyTransferVirtualWire ET; 
struct SEND_DATA_STRUCTURE{
  //Struct can'e be bigger then 26 bytes for VirtualWire version
  int data1;
  int data2;
  int data3;
  int data4;
};
//give a name to the group of data
SEND_DATA_STRUCTURE mydata;
LCD5110 myGLCD(8,9,10,11,12);
extern uint8_t TinyFont[]; // Объявление трех внешних
extern uint8_t SmallFont[]; // массивов символов
extern uint8_t BigNumbers[];
bool en_str_214990099_1;
String in_str_214990099_1;
bool en_str_214990099_2;
String in_str_214990099_2;
bool en_str_214990099_3;
String in_str_214990099_3;
float Temperature_168723051_1;
float Pressure_168723051_1;
float Altitude_168723051_1;
float Humidity_168723051_1;
#define BME_SCK_168723051_1 13

#define BME_MISO_168723051_1 12

#define BME_MOSI_168723051_1 11

#define BME_CS_168723051_1 10

#define SEALEVELPRESSURE_HPA_168723051_1 (1013.25)

Adafruit_BME280 bme_168723051_1; // I2C
bool en_str_214990099_4;
String in_str_214990099_4;
void setup()
{
  ET.begin(details(mydata));
  vw_set_rx_pin(4);
  vw_set_ptt_inverted(true); // Required for DR3100
  vw_setup(2000);

  vw_rx_start();       // Start the receiver PLL running
    
 if ( 1 ) { 
  pinMode(13, OUTPUT); 
}
  randomSeed(analogRead(0));
myGLCD.InitLCD();
myGLCD.setContrast (60);   //   установка контраста



if (!bme_168723051_1.begin()) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
}

}
void loop()
{




myGLCD.update();
delay (100); // Задержка 0.1 с
myGLCD.clrScr(); // Очистка экрана

en_str_214990099_1 = 1;
in_str_214990099_1 = ((String("Zal ")) + ((String(out1, DEC))));
if (en_str_214990099_1==1)
{
myGLCD.setFont(SmallFont);
myGLCD.print(in_str_214990099_1, 0, 10);
}
  //check and see if a data packet has come in. 
  if(ET.receiveData()){
 if ( 1 ) { 
digitalWrite(13, HIGH);
}
    out1 = mydata.data1;
    out2 = mydata.data2;
    out3 = mydata.data3;
    out4 = mydata.data4;

       if ( 1 ) { 
digitalWrite(13, LOW);
}

  }
  
  //you should make this delay shorter then your transmit delay or else messages could be lost
  delay(250);
en_str_214990099_2 = 1;
in_str_214990099_2 = ((String("spalnya ")) + ((String(out2, DEC))));
if (en_str_214990099_2==1)
{
myGLCD.setFont(SmallFont);
myGLCD.print(in_str_214990099_2, 0, 20);
}
en_str_214990099_3 = 1;
in_str_214990099_3 = ((String("kuhnya ")) + (( _floatToStringWitRaz(Temperature_168723051_1,2))));
if (en_str_214990099_3==1)
{
myGLCD.setFont(SmallFont);
myGLCD.print(in_str_214990099_3, 0, 30);
}
Temperature_168723051_1 = bme_168723051_1.readTemperature();
Pressure_168723051_1 = bme_168723051_1.readPressure() / 100.0F * 0.7500;
Altitude_168723051_1 = bme_168723051_1.readAltitude(SEALEVELPRESSURE_HPA_168723051_1);
Humidity_168723051_1 = bme_168723051_1.readHumidity();
en_str_214990099_4 = 1;
in_str_214990099_4 = String("METEOSTATION");
if (en_str_214990099_4==1)
{
myGLCD.setFont(SmallFont);
myGLCD.print(in_str_214990099_4, 5, 0);
}




}
String  _floatToStringWitRaz(float value, int raz)
{
 
  return String(value,raz);
}

 

Ссылка на проект в FLProg: https://yadi.sk/d/xaPb9cJv3JyG9p

Модуль LCD 5110 : https://yadi.sk/d/wxYROnHtvwjFE

Модуль BME 280: https://yadi.sk/d/V-yyGBC8vwjMp

Модуль приемника и передатчика 433МГц: https://yadi.sk/d/rgQ1TDXl3JyGPR

 

Теперь давайте рассмотрим схему подключения передатчика на DS18b20:

Из схемы видно что куда подключается.

Ссылка проект: https://yadi.sk/d/12b0tZG63JyGwK

 


#include <OneWire.h>
#include <EasyTransferVirtualWire.h>

#include <VirtualWire.h>

byte _d18x2x1Addr[8]={0x28, 0xFF, 0xCC, 0x27, 0x64, 0x16, 0x4, 0xA1};

OneWire _ow2(2);
bool in1;
float in2;
int in3;
int in4;
EasyTransferVirtualWire ET;
struct SEND_DATA_STRUCTURE{
//Struct can'e be bigger then 26 bytes for VirtualWire version
int data1;
int data2;
int data3;
int data4;
};
//give a name to the group of data
SEND_DATA_STRUCTURE mydata;
unsigned long _d18x2x1Tti = 0UL;
float _d18x2x1O = 0.00;
void setup()
{
ET.begin(details(mydata));
vw_set_tx_pin(12); //установка пина, к которому подключен data-вход передатчика
vw_set_ptt_inverted(true); // Required for DR3100
vw_setup(2000);

if ( 1 ) {
pinMode(13, OUTPUT);
}
randomSeed(analogRead(0));

}
void loop()
{

in1 = 0;
in2 = (_d18x2x1O);
in3 = 0;
in4 = 0;
mydata.data1 = in1;
mydata.data2 = in2;
mydata.data3 = in3;
mydata.data4 = in4;
if ( 1 ) {
digitalWrite(13, HIGH);
}

ET.sendData();

if ( 1 ) {
digitalWrite(13, LOW);
}

delay(1000);
if(_isTimer(_d18x2x1Tti, 1000)) {
_d18x2x1Tti = millis();
_d18x2x1O= _readDS18_ow2(_d18x2x1Addr, 0);}
}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
}
float _convertDS18x2xData(byte type_s, byte data[12])
{
int16_t raw = (data[1] << 8) | data[0];
if (type_s)
{
raw = raw << 3;
if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; }
}
else
{
byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw & ~7; else if (cfg == 0x20) raw = raw & ~3; else if (cfg == 0x40) raw = raw & ~1;
}
return (float)raw / 16.0;
}
float _readDS18_ow2(byte addr[8], byte type_s)
{ byte data[12];
byte i;
_ow2.reset();
_ow2.select(addr);
_ow2.write(0xBE);
for ( i = 0; i < 9; i++) {
data[i] = _ow2.read();}
_ow2.reset();
_ow2.select(addr);
_ow2.write(0x44, 1);
return _convertDS18x2xData(type_s, data);}

 

Ну и схема передатчика на BMP180:

В схеме также показано какой пин куда подключается.

Ссылка на проект: https://yadi.sk/d/6iRGWq-z3JyHPG

 


#include <Wire.h>
#include <EasyTransferVirtualWire.h>

#include <VirtualWire.h>

#include <BMP085.h>
BMP085 _bmp085 = BMP085();
long _bmp085T = 0;

int in1;
int in2;
int in3;
int in4;
EasyTransferVirtualWire ET;
struct SEND_DATA_STRUCTURE{
//Struct can'e be bigger then 26 bytes for VirtualWire version
int data1;
int data2;
int data3;
int data4;
};
//give a name to the group of data
SEND_DATA_STRUCTURE mydata;
unsigned long _bmp0851Tti = 0UL;
void setup()
{
Wire.begin();
_bmp085.init();
ET.begin(details(mydata));
vw_set_tx_pin(12); //установка пина, к которому подключен data-вход передатчика
vw_set_ptt_inverted(true); // Required for DR3100
vw_setup(2000);

if ( 1 ) {
pinMode(13, OUTPUT);
}
randomSeed(analogRead(0));

}
void loop()
{if(_isTimer(_bmp0851Tti, 1000)) {
_bmp0851Tti = millis();
_bmp085.getTemperature(&_bmp085T);
}

in1 = (_bmp085T)/(10);
in2 = 0;
in3 = 0;
in4 = 0;
mydata.data1 = in1;
mydata.data2 = in2;
mydata.data3 = in3;
mydata.data4 = in4;
if ( 1 ) {
digitalWrite(13, HIGH);
}

ET.sendData();

if ( 1 ) {
digitalWrite(13, LOW);
}

delay(1000);
}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
}

Демонстрация работы данной программы можно увидеть в видео приведенном в конце статьи.

Видео:

Primary Sidebar

Поиск

Новые записи

  • Автоматизация перезагрузки устройства по команде Ping.
  • Разблокирование и добавление шлюза Xiaomi gateway 3 в Home Assistant для управления Bluetooth устройствами из экосистемы Xiaomi Home (mihome)
  • Интеграция для локального управления (без интернета) ик пультом Tuya работающим по wifi из Home Assistant
  • Транслируем показания с Уличного Bluetooth Датчика температуры по BTHome на дисплей датчика температуры XIaomi LYWSD03MMC
  • Заставляем Bluetooth датчики температуры tuya и xiaomi отправлять данные по Zigbee в Home Assistant.

Официальный YouTube Канал M5Stack:

Подписывайтесь на Телеграм канал

https://t.me/ypavla

Подписаться на YouTube!

Secondary Sidebar




Подписывайтесь на Telegram Канал!

У Павла!

Footer

Copyright_У Павла! © 2025 ·